3910d9ec441128f8f19194daa848950da49cdcc3
[so.git] / adapters / mso-openstack-adapters / src / test / java / org / onap / so / adapters / network / NetworkAdapterRestTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.onap.so.adapters.network;
22
23 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
24 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
25 import static org.junit.Assert.assertEquals;
26 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeletePublicUrlStackByNameAndID_204;
27 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetPublicUrlStackByNameAndID_200;
28 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetPublicUrlStackByNameAndID_204;
29 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackAppC_404;
30 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreatedAppC_200;
31 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackCreatedVUSP_200;
32 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVUSP_404;
33 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200;
34 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostPublicUrlWithBodyFile_200;
35 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByID_200;
36 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPublicUrlStackByName_200;
37 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutPublicUrlStackByNameAndID_200;
38 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess;
39
40 import java.io.File;
41 import java.io.IOException;
42 import java.nio.file.Files;
43 import java.nio.file.Paths;
44
45 import javax.ws.rs.core.MediaType;
46 import javax.ws.rs.core.Response;
47
48 import org.json.JSONException;
49 import org.junit.Test;
50 import org.onap.so.adapters.nwrest.CreateNetworkRequest;
51 import org.onap.so.adapters.nwrest.CreateNetworkResponse;
52 import org.onap.so.adapters.nwrest.DeleteNetworkRequest;
53 import org.onap.so.adapters.nwrest.DeleteNetworkResponse;
54 import org.onap.so.adapters.nwrest.NetworkTechnology;
55 import org.onap.so.adapters.nwrest.QueryNetworkError;
56 import org.onap.so.adapters.nwrest.QueryNetworkResponse;
57 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
58 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
59 import org.onap.so.adapters.vnf.BaseRestTestUtils;
60 import org.onap.so.client.policy.JettisonStyleMapperProvider;
61 import org.onap.so.entity.MsoRequest;
62 import org.springframework.beans.factory.annotation.Autowired;
63 import org.springframework.http.HttpEntity;
64 import org.springframework.http.HttpMethod;
65 import org.springframework.http.ResponseEntity;
66
67 import com.fasterxml.jackson.core.JsonParseException;
68 import com.fasterxml.jackson.databind.JsonMappingException;
69
70 public class NetworkAdapterRestTest extends BaseRestTestUtils {
71
72         @Autowired
73         private JettisonStyleMapperProvider jettisonTypeObjectMapper;
74         private static final String CLOUDSITE_ID = "mtn13";
75         private static final String TENANT_ID = "ba38bc24a2ef4fb2ad2810c894f1938f";
76         private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b";
77         private static final String NETWORK_TYPE = "CONTRAIL30_BASIC";
78         private static final String MODEL_CUSTOMIZATION_UUID = "3bdbb104-476c-483e-9f8b-c095b3d308ac";
79         private static final String MSO_SERVICE_INSTANCE_ID = "05869d5f-47df-4b45-bbfc-4f03ce0a50bf";
80         private static final String MSO_REQUEST_ID = "requestId";
81         private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0";
82
83         @Test
84         public void testCreateNetwork() throws JSONException, JsonParseException, JsonMappingException, IOException {
85                 
86                 CreateNetworkRequest request = new CreateNetworkRequest();
87                 request.setBackout(true);
88                 request.setSkipAAI(true);
89                 request.setFailIfExists(false);
90                 MsoRequest msoReq = new MsoRequest();
91                 String networkTechnology = "CONTRAIL";
92
93                 msoReq.setRequestId(MSO_REQUEST_ID);
94                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
95                 request.setMsoRequest(msoReq);
96                 request.setCloudSiteId(CLOUDSITE_ID);
97                 request.setTenantId(TENANT_ID);
98                 request.setNetworkId(NETWORK_ID);
99                 request.setNetworkName(NETWORK_NAME);
100                 request.setNetworkType(NETWORK_TYPE);
101                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
102                 request.setNetworkTechnology(networkTechnology);
103
104                 mockOpenStackResponseAccess(wireMockPort);
105
106                 mockOpenStackPostPublicUrlWithBodyFile_200();
107
108                 mockOpenStackGetStackCreatedVUSP_200();
109
110                 mockOpenStackGetStackVUSP_404();
111
112                 headers.add("Accept", MediaType.APPLICATION_JSON);
113                 HttpEntity<CreateNetworkRequest> entity = new HttpEntity<CreateNetworkRequest>(request, headers);
114                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
115                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
116
117                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
118                                 new File("src/test/resources/__files/CreateNetworkResponse.json"), CreateNetworkResponse.class);
119
120                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
121                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
122         }
123
124         @Test
125         public void testCreateNetwork_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
126                 
127
128
129                 mockOpenStackResponseAccess(wireMockPort);
130
131                 mockOpenStackPostPublicUrlWithBodyFile_200();
132
133                 mockOpenStackGetStackCreatedAppC_200();
134                 
135                 mockOpenStackGetStackAppC_404();
136                 
137                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
138                 headers.add("Accept", MediaType.APPLICATION_JSON);
139                 
140                 String request = readJsonFileAsString("src/test/resources/CreateNetwork.json");
141                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
142
143                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
144                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
145                 
146                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
147                                 new File("src/test/resources/__files/CreateNetworkResponse2.json"), CreateNetworkResponse.class);
148
149                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
150                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
151         }
152         
153
154         
155         @Test
156         public void testDeleteNetwork() throws IOException{
157                 
158                 DeleteNetworkRequest request = new DeleteNetworkRequest();
159                 
160                 MsoRequest msoReq = new MsoRequest();
161                 
162                 msoReq.setRequestId(MSO_REQUEST_ID);
163                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
164                 request.setMsoRequest(msoReq);
165                 request.setCloudSiteId(CLOUDSITE_ID);
166                 request.setTenantId(TENANT_ID);
167                 request.setNetworkId(NETWORK_ID);
168                 request.setNetworkType(NETWORK_TYPE);
169                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
170                 request.setNetworkStackId(NETWORK_ID);
171                 
172                 mockOpenStackResponseAccess(wireMockPort);
173                 
174                 mockOpenStackPublicUrlStackByID_200(wireMockPort);
175                 
176                 mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockPort);
177                 
178                 mockOpenStackDeletePublicUrlStackByNameAndID_204();
179                 
180                 headers.add("Accept", MediaType.APPLICATION_JSON);
181                 
182                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(request, headers);
183                 
184                 ResponseEntity<DeleteNetworkResponse> response = restTemplate.exchange(
185                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.DELETE, entity, DeleteNetworkResponse.class); 
186                 
187                 DeleteNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
188                                 new File("src/test/resources/__files/DeleteNetworkResponse.json"), DeleteNetworkResponse.class);
189                 
190                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
191                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
192                 
193         }
194
195         @Test
196         public void testQueryNetwork_Exception() throws IOException{
197                 MsoRequest msoReq = new MsoRequest();
198                 msoReq.setRequestId(MSO_REQUEST_ID);
199                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
200                 headers.add("Accept", MediaType.APPLICATION_JSON);
201
202                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
203
204                 ResponseEntity<QueryNetworkError> response = restTemplate.exchange(
205                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.GET,
206                                 entity, QueryNetworkError.class);
207
208                 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
209
210         }
211
212         @Test
213         public void testQueryNetwork() throws IOException{
214
215                 mockOpenStackResponseAccess(wireMockPort);
216                 mockOpenStackGetStackVfModule_200();
217
218                 headers.add("Accept", MediaType.APPLICATION_JSON);
219                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
220
221                 ResponseEntity<QueryNetworkResponse> response = restTemplate.exchange(
222                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"+"?cloudSiteId=" + CLOUDSITE_ID + "&tenantId=" + TENANT_ID
223                                                 + "&aaiNetworkId=aaiNetworkId"), HttpMethod.GET, 
224                                 entity, QueryNetworkResponse.class);
225
226                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value());
227
228         }
229         
230         @Test
231         public void testUpdateNetwork() throws IOException{
232                 
233                 UpdateNetworkRequest request = new UpdateNetworkRequest();
234                 
235                 MsoRequest msoReq = new MsoRequest();
236                 
237                 msoReq.setRequestId(MSO_REQUEST_ID);
238                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
239                 request.setMsoRequest(msoReq);
240                 request.setCloudSiteId(CLOUDSITE_ID);
241                 request.setTenantId(TENANT_ID);
242                 request.setNetworkId(NETWORK_ID);
243                 request.setNetworkName(NETWORK_NAME);
244                 request.setNetworkType(NETWORK_TYPE);
245                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
246                 request.setNetworkStackId(NETWORK_ID);
247                 
248                 mockOpenStackResponseAccess(wireMockPort);
249
250                 mockOpenStackPublicUrlStackByName_200(wireMockPort);
251                 
252                 mockOpenStackPublicUrlStackByID_200(wireMockPort);
253                 
254                 mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockPort);
255
256                 mockOpenStackPutPublicUrlStackByNameAndID_200();
257
258                 headers.add("Accept", MediaType.APPLICATION_JSON);
259                 
260                 HttpEntity<UpdateNetworkRequest> entity = new HttpEntity<UpdateNetworkRequest>(request, headers);
261                 
262                 ResponseEntity<UpdateNetworkResponse> response = restTemplate.exchange(
263                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.PUT, entity, UpdateNetworkResponse.class); 
264                 
265                 UpdateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
266                                 new File("src/test/resources/__files/UpdateNetworkResponse.json"), UpdateNetworkResponse.class);
267                 
268                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
269                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
270         }       
271         
272         @Test
273         public void testCreateNetworkCNRC_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
274                 
275                 mockOpenStackResponseAccess(wireMockPort);
276
277                 mockOpenStackPostPublicUrlWithBodyFile_200();
278
279                 mockOpenStackGetStackCreatedAppC_200();
280                 
281                 mockOpenStackGetStackAppC_404();
282                 
283                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
284                 headers.add("Accept", MediaType.APPLICATION_JSON);
285                 
286                 String request = readJsonFileAsString("src/test/resources/CreateNetwork3.json");
287                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
288
289                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
290                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
291
292                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
293                                 new File("src/test/resources/__files/CreateNetworkResponse3.json"), CreateNetworkResponse.class);
294                 
295                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
296                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
297         }
298         
299         @Test
300         public void testCreateNetworkNC_Shared_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
301                 
302                 mockOpenStackResponseAccess(wireMockPort);
303
304                 mockOpenStackPostPublicUrlWithBodyFile_200();
305
306                 mockOpenStackGetStackCreatedAppC_200();
307                 
308                 mockOpenStackGetStackAppC_404();
309                 
310                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
311                 headers.add("Accept", MediaType.APPLICATION_JSON);
312                 
313                 String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json");
314                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
315
316                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
317                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
318
319                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
320                                 new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class);
321                 
322                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
323                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
324         }
325         
326         @Override
327         protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{
328                 return new String(Files.readAllBytes(Paths.get(fileLocation)));
329         }
330 }