97392adeef6db13e3c2cc7424303c53c4d4c13f3
[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.QueryNetworkError;
55 import org.onap.so.adapters.nwrest.QueryNetworkResponse;
56 import org.onap.so.adapters.nwrest.RollbackNetworkRequest;
57 import org.onap.so.adapters.nwrest.RollbackNetworkResponse;
58 import org.onap.so.adapters.nwrest.UpdateNetworkRequest;
59 import org.onap.so.adapters.nwrest.UpdateNetworkResponse;
60 import org.onap.so.adapters.vnf.BaseRestTestUtils;
61 import org.onap.so.client.policy.JettisonStyleMapperProvider;
62 import org.onap.so.entity.MsoRequest;
63 import org.springframework.beans.factory.annotation.Autowired;
64 import org.springframework.http.HttpEntity;
65 import org.springframework.http.HttpMethod;
66 import org.springframework.http.ResponseEntity;
67
68 import com.fasterxml.jackson.core.JsonParseException;
69 import com.fasterxml.jackson.databind.JsonMappingException;
70
71 public class NetworkAdapterRestTest extends BaseRestTestUtils {
72
73         @Autowired
74         private JettisonStyleMapperProvider jettisonTypeObjectMapper;
75         private static final String CLOUDSITE_ID = "mtn13";
76         private static final String TENANT_ID = "ba38bc24a2ef4fb2ad2810c894f1938f";
77         private static final String NETWORK_ID = "da886914-efb2-4917-b335-c8381528d90b";
78         private static final String NETWORK_TYPE = "CONTRAIL30_BASIC";
79         private static final String MODEL_CUSTOMIZATION_UUID = "3bdbb104-476c-483e-9f8b-c095b3d308ac";
80         private static final String MSO_SERVICE_INSTANCE_ID = "05869d5f-47df-4b45-bbfc-4f03ce0a50bf";
81         private static final String MSO_REQUEST_ID = "requestId";
82         private static final String NETWORK_NAME = "vUSP-23804-T-01-dpa2b_EVUSP-CORE-VIF-TSIG0_net_0";
83
84         @Test
85         public void testCreateNetwork() throws JSONException, JsonParseException, JsonMappingException, IOException {
86                 
87                 CreateNetworkRequest request = new CreateNetworkRequest();
88                 request.setBackout(true);
89                 request.setSkipAAI(true);
90                 request.setFailIfExists(false);
91                 MsoRequest msoReq = new MsoRequest();
92                 String networkTechnology = "CONTRAIL";
93
94                 msoReq.setRequestId(MSO_REQUEST_ID);
95                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
96                 request.setMsoRequest(msoReq);
97                 request.setCloudSiteId(CLOUDSITE_ID);
98                 request.setTenantId(TENANT_ID);
99                 request.setNetworkId(NETWORK_ID);
100                 request.setNetworkName(NETWORK_NAME);
101                 request.setNetworkType(NETWORK_TYPE);
102                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
103                 request.setNetworkTechnology(networkTechnology);
104
105                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
106
107                 mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
108
109                 mockOpenStackGetStackCreatedVUSP_200(wireMockServer);
110
111                 mockOpenStackGetStackVUSP_404(wireMockServer);
112
113                 headers.add("Accept", MediaType.APPLICATION_JSON);
114                 HttpEntity<CreateNetworkRequest> entity = new HttpEntity<CreateNetworkRequest>(request, headers);
115                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
116                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
117
118                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
119                                 new File("src/test/resources/__files/CreateNetworkResponse.json"), CreateNetworkResponse.class);
120
121                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
122                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
123         }
124
125         @Test
126         public void testCreateNetwork_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
127                 
128
129
130                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
131
132                 mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
133
134                 mockOpenStackGetStackCreatedAppC_200(wireMockServer);
135                 
136                 mockOpenStackGetStackAppC_404(wireMockServer);
137                 
138                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
139                 headers.add("Accept", MediaType.APPLICATION_JSON);
140                 
141                 String request = readJsonFileAsString("src/test/resources/CreateNetwork.json");
142                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
143
144                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
145                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
146                 
147                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
148                                 new File("src/test/resources/__files/CreateNetworkResponse2.json"), CreateNetworkResponse.class);
149
150                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
151                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
152         }
153         
154
155         
156         @Test
157         public void testDeleteNetwork() throws IOException{
158                 
159                 DeleteNetworkRequest request = new DeleteNetworkRequest();
160                 
161                 MsoRequest msoReq = new MsoRequest();
162                 
163                 msoReq.setRequestId(MSO_REQUEST_ID);
164                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
165                 request.setMsoRequest(msoReq);
166                 request.setCloudSiteId(CLOUDSITE_ID);
167                 request.setTenantId(TENANT_ID);
168                 request.setNetworkId(NETWORK_ID);
169                 request.setNetworkType(NETWORK_TYPE);
170                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
171                 request.setNetworkStackId(NETWORK_ID);
172                 
173                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
174                 
175                 mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
176                 
177                 mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort);
178                 
179                 mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer);
180                 
181                 headers.add("Accept", MediaType.APPLICATION_JSON);
182                 
183                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(request, headers);
184                 
185                 ResponseEntity<DeleteNetworkResponse> response = restTemplate.exchange(
186                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.DELETE, entity, DeleteNetworkResponse.class); 
187                 
188                 DeleteNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
189                                 new File("src/test/resources/__files/DeleteNetworkResponse.json"), DeleteNetworkResponse.class);
190                 
191                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
192                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
193                 
194         }
195
196         @Test
197         public void testRollbackNetwork() throws IOException {
198
199                 RollbackNetworkRequest request = new RollbackNetworkRequest();
200
201                 MsoRequest msoReq = new MsoRequest();
202
203                 msoReq.setRequestId(MSO_REQUEST_ID);
204                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
205
206                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
207
208                 mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
209
210                 mockOpenStackGetPublicUrlStackByNameAndID_204(wireMockServer, wireMockPort);
211
212                 mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer);
213
214                 headers.add("Accept", MediaType.APPLICATION_JSON);
215
216                 HttpEntity<RollbackNetworkRequest> entity = new HttpEntity<>(request, headers);
217
218                 ResponseEntity<RollbackNetworkResponse> response = restTemplate
219                         .exchange(createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b/rollback"),
220                                 HttpMethod.DELETE, entity, RollbackNetworkResponse.class);
221
222                 RollbackNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper()
223                         .readValue(new File("src/test/resources/__files/RollbackNetworkResponse.json"), RollbackNetworkResponse.class);
224
225                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
226                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
227
228         }
229
230         @Test
231         public void testQueryNetwork_Exception() throws IOException{
232                 MsoRequest msoReq = new MsoRequest();
233                 msoReq.setRequestId(MSO_REQUEST_ID);
234                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
235                 headers.add("Accept", MediaType.APPLICATION_JSON);
236
237                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
238
239                 ResponseEntity<QueryNetworkError> response = restTemplate.exchange(
240                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.GET,
241                                 entity, QueryNetworkError.class);
242
243                 assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
244
245         }
246
247         @Test
248         public void testQueryNetwork() throws IOException{
249
250                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
251                 mockOpenStackGetStackVfModule_200(wireMockServer);
252
253                 headers.add("Accept", MediaType.APPLICATION_JSON);
254                 HttpEntity<DeleteNetworkRequest> entity = new HttpEntity<DeleteNetworkRequest>(headers);
255
256                 ResponseEntity<QueryNetworkResponse> response = restTemplate.exchange(
257                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"+"?cloudSiteId=" + CLOUDSITE_ID + "&tenantId=" + TENANT_ID
258                                                 + "&aaiNetworkId=aaiNetworkId"), HttpMethod.GET, 
259                                 entity, QueryNetworkResponse.class);
260
261                 assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value());
262
263         }
264         
265         @Test
266         public void testUpdateNetwork() throws IOException{
267                 
268                 UpdateNetworkRequest request = new UpdateNetworkRequest();
269                 
270                 MsoRequest msoReq = new MsoRequest();
271                 
272                 msoReq.setRequestId(MSO_REQUEST_ID);
273                 msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
274                 request.setMsoRequest(msoReq);
275                 request.setCloudSiteId(CLOUDSITE_ID);
276                 request.setTenantId(TENANT_ID);
277                 request.setNetworkId(NETWORK_ID);
278                 request.setNetworkName(NETWORK_NAME);
279                 request.setNetworkType(NETWORK_TYPE);
280                 request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
281                 request.setNetworkStackId(NETWORK_ID);
282                 
283                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
284
285                 mockOpenStackPublicUrlStackByName_200(wireMockServer, wireMockPort);
286                 
287                 mockOpenStackPublicUrlStackByID_200(wireMockServer, wireMockPort);
288                 
289                 mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockServer, wireMockPort);
290
291                 mockOpenStackPutPublicUrlStackByNameAndID_200(wireMockServer);
292
293                 headers.add("Accept", MediaType.APPLICATION_JSON);
294                 
295                 HttpEntity<UpdateNetworkRequest> entity = new HttpEntity<UpdateNetworkRequest>(request, headers);
296                 
297                 ResponseEntity<UpdateNetworkResponse> response = restTemplate.exchange(
298                                 createURLWithPort("/services/rest/v1/networks/da886914-efb2-4917-b335-c8381528d90b"), HttpMethod.PUT, entity, UpdateNetworkResponse.class); 
299                 
300                 UpdateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
301                                 new File("src/test/resources/__files/UpdateNetworkResponse.json"), UpdateNetworkResponse.class);
302                 
303                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
304                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
305         }       
306         
307         @Test
308         public void testCreateNetworkCNRC_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
309                 
310                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
311
312                 mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
313
314                 mockOpenStackGetStackCreatedAppC_200(wireMockServer);
315                 
316                 mockOpenStackGetStackAppC_404(wireMockServer);
317                 
318                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
319                 headers.add("Accept", MediaType.APPLICATION_JSON);
320                 
321                 String request = readJsonFileAsString("src/test/resources/CreateNetwork3.json");
322                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
323
324                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
325                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
326
327                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
328                                 new File("src/test/resources/__files/CreateNetworkResponse3.json"), CreateNetworkResponse.class);
329                 
330                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
331                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
332         }
333         
334         @Test
335         public void testCreateNetworkNC_Shared_JSON() throws JSONException, JsonParseException, JsonMappingException, IOException {
336                 
337                 mockOpenStackResponseAccess(wireMockServer, wireMockPort);
338
339                 mockOpenStackPostPublicUrlWithBodyFile_200(wireMockServer);
340
341                 mockOpenStackGetStackCreatedAppC_200(wireMockServer);
342                 
343                 mockOpenStackGetStackAppC_404(wireMockServer);
344                 
345                 headers.add("Content-Type", MediaType.APPLICATION_JSON);
346                 headers.add("Accept", MediaType.APPLICATION_JSON);
347                 
348                 String request = readJsonFileAsString("src/test/resources/CreateNetwork4.json");
349                 HttpEntity<String> entity = new HttpEntity<String>(request, headers);
350
351                 ResponseEntity<CreateNetworkResponse> response = restTemplate.exchange(
352                                 createURLWithPort("/services/rest/v1/networks"), HttpMethod.POST, entity, CreateNetworkResponse.class);
353
354                 CreateNetworkResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
355                                 new File("src/test/resources/__files/CreateNetworkResponse4.json"), CreateNetworkResponse.class);
356                 
357                 assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
358                 assertThat(response.getBody(), sameBeanAs(expectedResponse));
359         }
360         
361         @Override
362         protected String readJsonFileAsString(String fileLocation) throws JsonParseException, JsonMappingException, IOException{
363                 return new String(Files.readAllBytes(Paths.get(fileLocation)));
364         }
365 }