false positive on network creates
[so.git] / adapters / mso-openstack-adapters / src / test / java / org / onap / so / adapters / vnf / VnfAdapterRestTest.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.vnf;
22
23 import com.fasterxml.jackson.core.JsonParseException;
24 import com.fasterxml.jackson.databind.JsonMappingException;
25 import com.github.tomakehurst.wiremock.WireMockServer;
26 import org.apache.http.HttpStatus;
27 import org.json.JSONException;
28 import org.junit.Ignore;
29 import org.junit.Test;
30 import org.onap.so.adapters.vnfrest.CreateVfModuleRequest;
31 import org.onap.so.adapters.vnfrest.CreateVfModuleResponse;
32 import org.onap.so.adapters.vnfrest.DeleteVfModuleRequest;
33 import org.onap.so.adapters.vnfrest.DeleteVfModuleResponse;
34 import org.onap.so.adapters.vnfrest.QueryVfModuleResponse;
35 import org.onap.so.adapters.vnfrest.RollbackVfModuleRequest;
36 import org.onap.so.adapters.vnfrest.RollbackVfModuleResponse;
37 import org.onap.so.adapters.vnfrest.UpdateVfModuleRequest;
38 import org.onap.so.adapters.vnfrest.UpdateVfModuleResponse;
39 import org.onap.so.adapters.vnfrest.VfModuleExceptionResponse;
40 import org.onap.so.adapters.vnfrest.VfModuleRollback;
41 import org.onap.so.client.policy.JettisonStyleMapperProvider;
42 import org.onap.so.entity.MsoRequest;
43 import org.springframework.beans.factory.annotation.Autowired;
44 import org.springframework.http.HttpEntity;
45 import org.springframework.http.HttpMethod;
46 import org.springframework.http.ResponseEntity;
47 import javax.ws.rs.core.MediaType;
48 import javax.ws.rs.core.Response;
49 import javax.ws.rs.core.UriBuilder;
50 import java.io.File;
51 import java.io.IOException;
52 import java.util.HashMap;
53 import java.util.Map;
54 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
55 import static com.github.tomakehurst.wiremock.client.WireMock.patch;
56 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
57 import static com.shazam.shazamcrest.MatcherAssert.assertThat;
58 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
59 import static org.junit.Assert.assertEquals;
60 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeletePublicUrlStackByNameAndID_204;
61 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackDeleteStacks;
62 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetPublicUrlStackByNameAndID_200;
63 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_200;
64 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStackVfModule_404;
65 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksBaseStack_200;
66 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksStackId_200;
67 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksStackId_404;
68 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksVUSP_404;
69 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksVfModuleWithLocationHeader_200;
70 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksVfModule_200;
71 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksWithBody_200;
72 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacksWithBody_404;
73 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackGetStacks_404;
74 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPostStacks_200;
75 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackPutStacks_200;
76 import static org.onap.so.bpmn.mock.StubOpenStack.mockOpenStackResponseAccess;
77
78 public class VnfAdapterRestTest extends BaseRestTestUtils {
79
80
81     @Autowired
82     private JettisonStyleMapperProvider jettisonTypeObjectMapper;
83     private static final String MESSAGE_ID = "62265093-277d-4388-9ba6-449838ade586-1517252396874";
84     private static final String AAI_VNF_ID = "c93e0d34-5b63-45de-bbae-b0fe49dd3bd9";
85     private static final String MSO_REQUEST_ID = "62265093-277d-4388-9ba6-449838ade586";
86     private static final String MSO_SERVICE_INSTANCE_ID = "4147e06f-1b89-49c5-b21f-4faf8dc9805a";
87     private static final String CLOUDSITE_ID = "mtn13";
88     private static final String CLOUD_OWNER = "CloudOwner";
89     private static final String TENANT_ID = "0422ffb57ba042c0800a29dc85ca70f8";
90     private static final String VNF_TYPE = "MSOTADevInfra_vSAMP10a_Service/vSAMP10a 1";
91     private static final String VNF_NAME = "MSO-DEV-VNF-1802-it3-pwt3-vSAMP10a-1XXX-Replace";
92     private static final String VNF_VERSION = "1.0";
93     private static final String VF_MODULE_ID = "1d48aaec-b7f3-4c24-ba4a-4e798ed3223c";
94     private static final String VF_MODULE_NAME = "DEV-VF-1802-it3-pwt3-v6-vSAMP10a-addon2-Replace-1001";
95     private static final String VF_MODULE_TYPE = "vSAMP10aDEV::PCM::module-2";
96     private static final String MODEL_CUSTOMIZATION_UUID = "cb82ffd8-252a-11e7-93ae-92361f002671";
97     private static final String BASE_VF_MODULE_ID = "3d7ff7b4-720b-4604-be0a-1974fc58ed96";
98     // vfModuleParams specific variables
99     private static final String NETWORK_NAME = "Dev-vSAMP10a-ntwk-1802-pwt3-v6-Replace-1001";
100     private static final String SERVER_NAME = "Dev-vSAMP10a-addon2-1802-pwt3-v6-Replace-1001";
101     private static final String IMAGE = "ubuntu_14.04_IPv6";
102     private static final String EXN_DIRECT_NET_FQDN = "direct";
103     private static final String EXN_HSL_NET_FQDN = "hsl";
104     private static final String AVAILABILITY_ZONE_0 = "nova";
105     private static final String VF_MODULE_INDEX = "0";
106
107     @Test
108     public void testCreateVfModule() throws JSONException, JsonParseException, JsonMappingException, IOException {
109
110         CreateVfModuleRequest request = populateCreateVfModuleRequest();
111
112         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
113
114         mockOpenStackGetStackVfModule_404(wireMockServer);
115
116         mockOpenStackPostStacks_200(wireMockServer);
117
118         mockOpenStackGetStackVfModule_200(wireMockServer);
119
120         mockUpdateRequestDb(wireMockServer, "62265093-277d-4388-9ba6-449838ade586");
121
122         headers.add("Accept", MediaType.APPLICATION_JSON);
123         HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers);
124
125         ResponseEntity<CreateVfModuleResponse> response =
126                 restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
127                         HttpMethod.POST, entity, CreateVfModuleResponse.class);
128
129         ResponseEntity<CreateVfModuleResponse> responseV2 =
130                 restTemplate.exchange(createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules"),
131                         HttpMethod.POST, entity, CreateVfModuleResponse.class);
132
133         CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
134                 new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class);
135
136         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
137         assertThat(response.getBody(), sameBeanAs(expectedResponse));
138
139         assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value());
140         assertThat(responseV2.getBody(), sameBeanAs(expectedResponse));
141     }
142
143     @Test
144     public void testCreateVfModuleAsyncCall() throws Exception {
145         CreateVfModuleRequest request = populateCreateVfModuleRequest();
146         request.setNotificationUrl(createURLWithPort("/mso/WorkflowMesssage"));
147
148         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
149         mockOpenStackGetStackVfModule_404(wireMockServer);
150         mockOpenStackPostStacks_200(wireMockServer);
151         mockOpenStackGetStackVfModule_200(wireMockServer);
152
153         headers.add("Accept", MediaType.APPLICATION_JSON);
154         HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers);
155
156         ResponseEntity<CreateVfModuleResponse> response =
157                 restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
158                         HttpMethod.POST, entity, CreateVfModuleResponse.class);
159
160         CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
161                 new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class);
162
163         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
164     }
165
166     @Test
167     public void testCreateVfModuleWithEnableBridgeNull()
168             throws JSONException, JsonParseException, JsonMappingException, IOException {
169
170         CreateVfModuleRequest request = new CreateVfModuleRequest();
171         request.setBackout(true);
172         request.setSkipAAI(true);
173         request.setFailIfExists(false);
174         MsoRequest msoReq = new MsoRequest();
175         boolean failIfExists = true;
176         Boolean enableBridge = null;
177         Map<String, Object> vfModuleParams = new HashMap<>();
178
179
180         vfModuleParams.put("vf_module_id", VF_MODULE_ID);
181         vfModuleParams.put("vnf_id", AAI_VNF_ID);
182         vfModuleParams.put("network_name", NETWORK_NAME);
183         vfModuleParams.put("vnf_name", VNF_NAME);
184         vfModuleParams.put("environment_context", "");
185         vfModuleParams.put("server_name", SERVER_NAME);
186         vfModuleParams.put("image", IMAGE);
187         vfModuleParams.put("workload_context", "");
188         vfModuleParams.put("vf_module_index", VF_MODULE_INDEX);
189         vfModuleParams.put("vf_module_name", VF_MODULE_NAME);
190         vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0);
191         vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN);
192         vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN);
193
194         msoReq.setRequestId(MSO_REQUEST_ID);
195         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
196         request.setMsoRequest(msoReq);
197         request.setCloudSiteId(CLOUDSITE_ID);
198         request.setTenantId(TENANT_ID);
199         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
200         request.setVnfId(AAI_VNF_ID);
201         request.setVnfVersion(VNF_VERSION);
202         request.setVfModuleId(VF_MODULE_ID);
203         request.setVfModuleName(VF_MODULE_NAME);
204         request.setBaseVfModuleId(BASE_VF_MODULE_ID);
205         request.setFailIfExists(failIfExists);
206         request.setEnableBridge(enableBridge);
207         request.setVfModuleParams(vfModuleParams);
208         request.setMessageId(MESSAGE_ID);
209
210         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
211
212         mockOpenStackGetStackVfModule_404(wireMockServer);
213
214         mockOpenStackPostStacks_200(wireMockServer);
215
216         mockOpenStackGetStackVfModule_200(wireMockServer);
217
218         mockUpdateRequestDb(wireMockServer, "62265093-277d-4388-9ba6-449838ade586");
219
220
221         headers.add("Accept", MediaType.APPLICATION_JSON);
222         HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers);
223
224         ResponseEntity<CreateVfModuleResponse> response =
225                 restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
226                         HttpMethod.POST, entity, CreateVfModuleResponse.class);
227
228         CreateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
229                 new File("src/test/resources/__files/CreateVfModuleResponse.json"), CreateVfModuleResponse.class);
230
231         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
232         assertThat(response.getBody(), sameBeanAs(expectedResponse));
233     }
234
235     @Test
236     public void testCreateVfModuleFail() throws IOException {
237
238         CreateVfModuleRequest request = new CreateVfModuleRequest();
239         request.setBackout(true);
240         request.setSkipAAI(true);
241         request.setFailIfExists(false);
242         MsoRequest msoReq = new MsoRequest();
243         boolean failIfExists = true;
244         boolean enableBridge = false;
245         Map<String, Object> vfModuleParams = new HashMap<>();
246
247         vfModuleParams.put("vf_module_id", VF_MODULE_ID);
248         vfModuleParams.put("vnf_id", AAI_VNF_ID);
249         vfModuleParams.put("network_name", NETWORK_NAME);
250         vfModuleParams.put("vnf_name", VNF_NAME);
251         vfModuleParams.put("environment_context", "");
252         vfModuleParams.put("server_name", SERVER_NAME);
253         vfModuleParams.put("image", IMAGE);
254         vfModuleParams.put("workload_context", "");
255         vfModuleParams.put("vf_module_index", VF_MODULE_INDEX);
256         vfModuleParams.put("vf_module_name", VF_MODULE_NAME);
257         vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0);
258         vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN);
259         vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN);
260
261         msoReq.setRequestId(MSO_REQUEST_ID);
262         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
263         request.setMsoRequest(msoReq);
264         request.setCloudSiteId(CLOUDSITE_ID);
265         request.setTenantId(TENANT_ID);
266         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
267         request.setVnfId(AAI_VNF_ID);
268         request.setVnfType(VNF_TYPE);
269         request.setVnfVersion(VNF_VERSION);
270         request.setVfModuleId(VF_MODULE_ID);
271         request.setVfModuleName(VF_MODULE_NAME);
272         request.setVfModuleType(VF_MODULE_TYPE);
273         request.setBaseVfModuleStackId(BASE_VF_MODULE_ID);
274         request.setFailIfExists(failIfExists);
275         request.setEnableBridge(enableBridge);
276         request.setVfModuleParams(vfModuleParams);
277         request.setMessageId(MESSAGE_ID);
278
279         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
280
281         mockOpenStackGetStackVfModule_404(wireMockServer);
282
283         mockOpenStackGetStacks_404(wireMockServer);
284
285         mockOpenStackPostStacks_200(wireMockServer);
286
287         mockOpenStackGetStackVfModule_200(wireMockServer);
288
289         headers.add("Accept", MediaType.APPLICATION_JSON);
290         HttpEntity<CreateVfModuleRequest> entity = new HttpEntity<CreateVfModuleRequest>(request, headers);
291
292         ResponseEntity<VfModuleExceptionResponse> response =
293                 restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
294                         HttpMethod.POST, entity, VfModuleExceptionResponse.class);
295
296         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
297
298         mockOpenStackGetStacksWithBody_200(wireMockServer, "DELETE_IN_PROGRESS");
299
300         response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
301                 HttpMethod.POST, entity, VfModuleExceptionResponse.class);
302
303         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
304
305         mockOpenStackGetStacksWithBody_200(wireMockServer, "DELETE_FAILED");
306
307         response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
308                 HttpMethod.POST, entity, VfModuleExceptionResponse.class);
309
310         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
311
312         mockOpenStackGetStacksWithBody_200(wireMockServer, "UPDATE_COMPLETE");
313
314         response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
315                 HttpMethod.POST, entity, VfModuleExceptionResponse.class);
316
317         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
318
319         mockOpenStackGetStacksWithBody_404(wireMockServer);
320
321         response = restTemplate.exchange(createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules"),
322                 HttpMethod.POST, entity, VfModuleExceptionResponse.class);
323
324         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
325
326     }
327
328     @Test
329     public void testDeleteVfModule() throws IOException {
330
331         DeleteVfModuleRequest request = new DeleteVfModuleRequest();
332         MsoRequest msoRequest = new MsoRequest();
333         String vfModuleStackId = "stackId";
334
335         msoRequest.setRequestId(MSO_REQUEST_ID);
336         msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
337         request.setCloudSiteId(CLOUDSITE_ID);
338         request.setTenantId(TENANT_ID);
339         request.setVfModuleId(VF_MODULE_ID);
340         request.setVfModuleStackId(vfModuleStackId);
341         request.setVnfId(AAI_VNF_ID);
342         request.setMsoRequest(msoRequest);
343
344         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
345
346         mockOpenStackPostStacks_200(wireMockServer);
347
348         mockOpenStackGetStacksStackId_404(wireMockServer);
349
350         mockOpenStackGetPublicUrlStackByNameAndID_200(wireMockServer, wireMockPort);
351
352         mockOpenStackDeletePublicUrlStackByNameAndID_204(wireMockServer);
353
354         mockUpdateRequestDb(wireMockServer, "62265093-277d-4388-9ba6-449838ade586");
355
356         headers.add("Accept", MediaType.APPLICATION_JSON);
357         HttpEntity<DeleteVfModuleRequest> entity = new HttpEntity<DeleteVfModuleRequest>(request, headers);
358
359         ResponseEntity<DeleteVfModuleResponse> response = restTemplate.exchange(
360                 createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID),
361                 HttpMethod.DELETE, entity, DeleteVfModuleResponse.class);
362
363         ResponseEntity<DeleteVfModuleResponse> responseV2 = restTemplate.exchange(
364                 createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID),
365                 HttpMethod.DELETE, entity, DeleteVfModuleResponse.class);
366
367
368         DeleteVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
369                 new File("src/test/resources/__files/DeleteVfModuleResponse.json"), DeleteVfModuleResponse.class);
370
371
372         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
373         assertThat(response.getBody(), sameBeanAs(expectedResponse));
374
375         assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value());
376         assertThat(responseV2.getBody(), sameBeanAs(expectedResponse));
377     }
378
379     @Test
380     public void testUpdateVfModule() throws IOException {
381
382         UpdateVfModuleRequest request = new UpdateVfModuleRequest();
383         MsoRequest msoRequest = new MsoRequest();
384         String vfModuleStackId = "vfModuleStackId";
385         Boolean failIfExists = false;
386         Boolean backout = false;
387         msoRequest.setRequestId(MSO_REQUEST_ID);
388         msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
389
390         Map<String, Object> vfModuleParams = new HashMap<>();
391
392         vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN);
393         vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN);
394
395         Map<String, String> vfModuleOutputs = new HashMap<String, String>();
396
397         vfModuleOutputs.put("output name", "output value");
398
399         request.setBackout(backout);
400         request.setCloudSiteId(CLOUDSITE_ID);
401         request.setFailIfExists(failIfExists);
402         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
403         request.setMsoRequest(msoRequest);
404         request.setTenantId(TENANT_ID);
405         request.setVfModuleId(VF_MODULE_ID);
406         request.setVfModuleName(VF_MODULE_NAME);
407         request.setVfModuleStackId(vfModuleStackId);
408         request.setBackout(backout);
409         request.setVfModuleParams(vfModuleParams);
410
411         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
412
413         mockOpenStackGetStacksVfModuleWithLocationHeader_200(wireMockServer, wireMockPort);
414
415         mockOpenStackGetStacksVfModule_200(wireMockServer, wireMockPort);
416
417         mockOpenStackGetStacksBaseStack_200(wireMockServer, wireMockPort);
418
419         mockOpenStackPutStacks_200(wireMockServer);
420
421         UpdateVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
422                 new File("src/test/resources/__files/UpdateVfModuleResponse.json"), UpdateVfModuleResponse.class);
423         expectedResponse.setVfModuleOutputs(vfModuleOutputs);
424
425         headers.add("Accept", MediaType.APPLICATION_JSON);
426         HttpEntity<UpdateVfModuleRequest> entity = new HttpEntity<UpdateVfModuleRequest>(request, headers);
427
428         ResponseEntity<UpdateVfModuleResponse> response = restTemplate.exchange(
429                 createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE),
430                 HttpMethod.PUT, entity, UpdateVfModuleResponse.class);
431
432         ResponseEntity<UpdateVfModuleResponse> responseV2 = restTemplate.exchange(
433                 createURLWithPort("/services/rest/v2/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_TYPE),
434                 HttpMethod.PUT, entity, UpdateVfModuleResponse.class);
435
436         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
437         assertThat(response.getBody(), sameBeanAs(expectedResponse));
438
439         assertEquals(Response.Status.OK.getStatusCode(), responseV2.getStatusCode().value());
440         assertThat(responseV2.getBody(), sameBeanAs(expectedResponse));
441
442     }
443
444     @Test
445     public void testRollbackVfModule() throws IOException {
446
447
448         MsoRequest msoRequest = new MsoRequest();
449         msoRequest.setRequestId(MSO_REQUEST_ID);
450         msoRequest.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
451
452         VfModuleRollback vfModuleRollback = new VfModuleRollback(AAI_VNF_ID, VF_MODULE_ID, "StackId", false, TENANT_ID,
453                 CLOUD_OWNER, CLOUDSITE_ID, msoRequest, "messageId");
454
455         RollbackVfModuleRequest request = new RollbackVfModuleRequest();
456         request.setVfModuleRollback(vfModuleRollback);
457
458         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
459
460         mockOpenStackGetStacksStackId_200(wireMockServer, wireMockPort);
461
462         mockOpenStackDeleteStacks(wireMockServer);
463
464         mockOpenStackGetStacksVUSP_404(wireMockServer);
465
466         headers.add("Accept", MediaType.APPLICATION_JSON);
467         HttpEntity<RollbackVfModuleRequest> entity = new HttpEntity<RollbackVfModuleRequest>(request, headers);
468
469         ResponseEntity<RollbackVfModuleResponse> response = restTemplate.exchange(
470                 createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID + "/rollback"),
471                 HttpMethod.DELETE, entity, RollbackVfModuleResponse.class);
472
473         RollbackVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
474                 new File("src/test/resources/__files/RollbackVfModuleResponse.json"), RollbackVfModuleResponse.class);
475
476         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
477         assertThat(response.getBody(), sameBeanAs(expectedResponse));
478
479     }
480
481     @Ignore
482     @Test
483     public void testQueryVfModule() throws IOException {
484
485         String testUrl = createURLWithPort("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID);
486         String testUri = UriBuilder.fromPath("/services/rest/v1/vnfs/" + AAI_VNF_ID + "/vf-modules/" + VF_MODULE_ID)
487                 .host("localhost").port(wireMockPort).scheme("http")
488                 // .queryParam("cloudSiteId", CLOUDSITE_ID).queryParam("tenantId", TENANT_ID)
489                 .build().toString();
490         System.out.println(testUri);
491
492         mockOpenStackResponseAccess(wireMockServer, wireMockPort);
493
494
495         headers.add("Accept", MediaType.APPLICATION_JSON);
496         // HttpEntity entity = new HttpEntity(null, headers);
497         ResponseEntity<QueryVfModuleResponse> response =
498                 restTemplate.getForEntity(testUri, QueryVfModuleResponse.class);
499         // System.out.println(response);
500
501         QueryVfModuleResponse expectedResponse = jettisonTypeObjectMapper.getMapper().readValue(
502                 new File("src/test/resources/__files/QueryVfModuleResponse.json"), QueryVfModuleResponse.class);
503
504         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
505         assertThat(response.getBody(), sameBeanAs(expectedResponse));
506     }
507
508     private CreateVfModuleRequest populateCreateVfModuleRequest() {
509         CreateVfModuleRequest request = new CreateVfModuleRequest();
510         request.setBackout(true);
511         request.setSkipAAI(true);
512         request.setFailIfExists(false);
513         MsoRequest msoReq = new MsoRequest();
514         boolean failIfExists = true;
515         boolean enableBridge = false;
516         Map<String, Object> vfModuleParams = new HashMap<>();
517
518         vfModuleParams.put("vf_module_id", VF_MODULE_ID);
519         vfModuleParams.put("vnf_id", AAI_VNF_ID);
520         vfModuleParams.put("network_name", NETWORK_NAME);
521         vfModuleParams.put("vnf_name", VNF_NAME);
522         vfModuleParams.put("environment_context", "");
523         vfModuleParams.put("server_name", SERVER_NAME);
524         vfModuleParams.put("image", IMAGE);
525         vfModuleParams.put("workload_context", "");
526         vfModuleParams.put("vf_module_index", VF_MODULE_INDEX);
527         vfModuleParams.put("vf_module_name", VF_MODULE_NAME);
528         vfModuleParams.put("availability_zone_0", AVAILABILITY_ZONE_0);
529         vfModuleParams.put("exn_direct_net_fqdn", EXN_DIRECT_NET_FQDN);
530         vfModuleParams.put("exn_hsl_net_fqdn", EXN_HSL_NET_FQDN);
531
532         msoReq.setRequestId(MSO_REQUEST_ID);
533         msoReq.setServiceInstanceId(MSO_SERVICE_INSTANCE_ID);
534         request.setMsoRequest(msoReq);
535         request.setCloudSiteId(CLOUDSITE_ID);
536         request.setTenantId(TENANT_ID);
537         request.setModelCustomizationUuid(MODEL_CUSTOMIZATION_UUID);
538         request.setVnfId(AAI_VNF_ID);
539         request.setVnfType(VNF_TYPE);
540         request.setVnfVersion(VNF_VERSION);
541         request.setVfModuleId(VF_MODULE_ID);
542         request.setVfModuleName(VF_MODULE_NAME);
543         request.setVfModuleType(VF_MODULE_TYPE);
544         request.setBaseVfModuleId(BASE_VF_MODULE_ID);
545         request.setFailIfExists(failIfExists);
546         request.setEnableBridge(enableBridge);
547         request.setVfModuleParams(vfModuleParams);
548         request.setMessageId(MESSAGE_ID);
549
550         return request;
551     }
552
553     public static void mockUpdateRequestDb(WireMockServer wireMockServer, String requestId) throws IOException {
554         wireMockServer.stubFor(patch(urlPathEqualTo("/infraActiveRequests/" + requestId))
555                 .willReturn(aResponse().withHeader("Content-Type", "application/json").withStatus(HttpStatus.SC_OK)));
556     }
557 }