Added default value for when ErrorCode is null in
[so.git] / mso-api-handlers / mso-api-handler-infra / src / test / java / org / onap / so / apihandlerinfra / ServiceInstancesTest.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.apihandlerinfra;
22
23
24 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
25 import static com.github.tomakehurst.wiremock.client.WireMock.get;
26 import static com.github.tomakehurst.wiremock.client.WireMock.post;
27 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
28 import static com.github.tomakehurst.wiremock.client.WireMock.urlPathEqualTo;
29 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
30 import static org.junit.Assert.assertEquals;
31 import static org.junit.Assert.assertFalse;
32 import static org.junit.Assert.assertNotNull;
33 import static org.junit.Assert.assertNull;
34 import static org.junit.Assert.assertThat;
35 import static org.junit.Assert.assertTrue;
36 import static org.onap.so.logger.HttpHeadersConstants.ONAP_REQUEST_ID;
37 import static org.onap.so.logger.HttpHeadersConstants.REQUESTOR_ID;
38 import static org.onap.so.logger.HttpHeadersConstants.TRANSACTION_ID;
39 import static org.onap.so.logger.MdcConstants.CLIENT_ID;
40 import static org.onap.so.logger.MdcConstants.ENDTIME;
41 import static org.onap.so.logger.MdcConstants.INVOCATION_ID;
42 import static org.onap.so.logger.MdcConstants.PARTNERNAME;
43 import static org.onap.so.logger.MdcConstants.RESPONSECODE;
44 import static org.onap.so.logger.MdcConstants.RESPONSEDESC;
45 import static org.onap.so.logger.MdcConstants.SERVICE_NAME;
46 import static org.onap.so.logger.MdcConstants.STATUSCODE;
47 import java.io.File;
48 import java.io.IOException;
49 import java.net.MalformedURLException;
50 import java.net.URL;
51 import java.nio.file.Files;
52 import java.nio.file.Paths;
53 import java.util.List;
54 import java.util.Map;
55 import javax.ws.rs.core.MediaType;
56 import javax.ws.rs.core.Response;
57 import org.apache.http.HttpStatus;
58 import org.junit.Before;
59 import org.junit.Test;
60 import org.mockito.Mockito;
61 import org.onap.logging.ref.slf4j.ONAPLogConstants;
62 import org.onap.so.apihandlerinfra.exceptions.ContactCamundaException;
63 import org.onap.so.apihandlerinfra.exceptions.RequestDbFailureException;
64 import org.onap.so.db.catalog.beans.Service;
65 import org.onap.so.db.catalog.beans.ServiceRecipe;
66 import org.onap.so.db.request.beans.InfraActiveRequests;
67 import org.onap.so.logger.HttpHeadersConstants;
68 import org.onap.so.serviceinstancebeans.CloudConfiguration;
69 import org.onap.so.serviceinstancebeans.ModelInfo;
70 import org.onap.so.serviceinstancebeans.ModelType;
71 import org.onap.so.serviceinstancebeans.RequestDetails;
72 import org.onap.so.serviceinstancebeans.RequestError;
73 import org.onap.so.serviceinstancebeans.RequestInfo;
74 import org.onap.so.serviceinstancebeans.RequestParameters;
75 import org.onap.so.serviceinstancebeans.RequestReferences;
76 import org.onap.so.serviceinstancebeans.ServiceInstancesRequest;
77 import org.onap.so.serviceinstancebeans.ServiceInstancesResponse;
78 import org.springframework.beans.factory.annotation.Autowired;
79 import org.springframework.beans.factory.annotation.Value;
80 import org.springframework.http.HttpEntity;
81 import org.springframework.http.HttpHeaders;
82 import org.springframework.http.HttpMethod;
83 import org.springframework.http.ResponseEntity;
84 import org.springframework.util.ResourceUtils;
85 import org.springframework.web.util.UriComponentsBuilder;
86 import com.fasterxml.jackson.core.JsonParseException;
87 import com.fasterxml.jackson.core.JsonProcessingException;
88 import com.fasterxml.jackson.databind.DeserializationFeature;
89 import com.fasterxml.jackson.databind.JsonMappingException;
90 import com.fasterxml.jackson.databind.ObjectMapper;
91 import com.github.tomakehurst.wiremock.http.Fault;
92 import ch.qos.logback.classic.spi.ILoggingEvent;
93
94 public class ServiceInstancesTest extends BaseTest {
95
96     private final ObjectMapper mapper = new ObjectMapper();
97     private ObjectMapper errorMapper = new ObjectMapper();
98
99     @Autowired
100     private ServiceInstances servInstances;
101
102     @Autowired
103     private RequestHandlerUtils requestHandlerUtils;
104
105     @Value("${wiremock.server.port}")
106     private String wiremockPort;
107
108     private final String servInstanceuri = "/onap/so/infra/serviceInstantiation/";
109     private final String servInstanceUriPrev7 = "/onap/so/infra/serviceInstances/";
110     private String uri;
111     private URL selfLink;
112     private URL initialUrl;
113     private int initialPort;
114     private HttpHeaders headers;
115
116     @Before
117     public void beforeClass() {
118         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
119         errorMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
120         errorMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
121         // set headers
122         headers = new HttpHeaders();
123         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "test_name");
124         headers.set(HttpHeadersConstants.TRANSACTION_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
125         headers.set(ONAP_REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
126         headers.set(ONAPLogConstants.MDCs.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
127         headers.set(CLIENT_ID, "VID");
128         headers.set(REQUESTOR_ID, "xxxxxx");
129         try { // generate one-time port number to avoid RANDOM port number later.
130             initialUrl = new URL(createURLWithPort(Constants.ORCHESTRATION_REQUESTS_PATH));
131             initialPort = initialUrl.getPort();
132         } catch (MalformedURLException e) {
133             e.printStackTrace();
134         }
135         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests.*")).willReturn(aResponse()
136                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_OK)));
137         Mockito.doReturn(null).when(requestsDbClient).getInfraActiveRequestbyRequestId(Mockito.any());
138     }
139
140     public String inputStream(String JsonInput) throws IOException {
141         JsonInput = "src/test/resources/ServiceInstanceTest" + JsonInput;
142         return new String(Files.readAllBytes(Paths.get(JsonInput)));
143     }
144
145     private URL createExpectedSelfLink(String version, String requestId) {
146         System.out.println("createdUrl: " + initialUrl.toString());
147         try {
148             selfLink = new URL(initialUrl.toString().concat("/").concat(version).concat("/").concat(requestId));
149         } catch (MalformedURLException e) {
150             e.printStackTrace();
151         }
152         return selfLink;
153     }
154
155     private String getWiremockResponseForCatalogdb(String file) {
156         try {
157             File resource = ResourceUtils.getFile("classpath:__files/catalogdb/" + file);
158             return new String(Files.readAllBytes(resource.toPath())).replaceAll("localhost:8090",
159                     "localhost:" + wiremockPort);
160         } catch (IOException e) {
161             e.printStackTrace();
162             return null;
163         }
164
165     }
166
167     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod,
168             HttpHeaders headers) {
169
170         if (!headers.containsKey(HttpHeaders.ACCEPT)) {
171             headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON);
172         }
173         if (!headers.containsKey(HttpHeaders.CONTENT_TYPE)) {
174             headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON);
175         }
176
177         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(uriPath, initialPort));
178
179         HttpEntity<String> request = new HttpEntity<>(requestJson, headers);
180
181         return restTemplate.exchange(builder.toUriString(), reqMethod, request, String.class);
182     }
183
184     public ResponseEntity<String> sendRequest(String requestJson, String uriPath, HttpMethod reqMethod) {
185         return sendRequest(requestJson, uriPath, reqMethod, new HttpHeaders());
186     }
187
188     @Test
189     public void createServiceInstanceVIDDefault() throws IOException {
190         TestAppender.events.clear();
191
192         ServiceRecipe serviceRecipe = new ServiceRecipe();
193         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
194         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
195         serviceRecipe.setAction(Action.createInstance.toString());
196         serviceRecipe.setId(1);
197         serviceRecipe.setRecipeTimeout(180);
198         Service defaultService = new Service();
199         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
200
201
202         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
203                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
204                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
205
206         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
207                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
208                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
209
210         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
211                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
212                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
213
214         // expect
215         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
216         RequestReferences requestReferences = new RequestReferences();
217         requestReferences.setInstanceId("1882939");
218         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
219         expectedResponse.setRequestReferences(requestReferences);
220         uri = servInstanceuri + "v5/serviceInstances";
221         ResponseEntity<String> response =
222                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
223
224         // then
225         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
226         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
227         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
228
229
230
231         for (ILoggingEvent logEvent : TestAppender.events)
232             if (logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.jersey.JaxRsFilterLogging")
233                     && logEvent.getMarker() != null && logEvent.getMarker().getName().equals("ENTRY")) {
234                 Map<String, String> mdc = logEvent.getMDCPropertyMap();
235                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
236                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
237                 assertNotNull(mdc.get(INVOCATION_ID));
238                 assertEquals("UNKNOWN", mdc.get(PARTNERNAME));
239                 assertEquals("onap/so/infra/serviceInstantiation/v5/serviceInstances", mdc.get(SERVICE_NAME));
240                 assertEquals("INPROGRESS", mdc.get(STATUSCODE));
241             } else if (logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.jersey.JaxRsFilterLogging")
242                     && logEvent.getMarker() != null && logEvent.getMarker().getName().equals("EXIT")) {
243                 Map<String, String> mdc = logEvent.getMDCPropertyMap();
244                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.ENTRY_TIMESTAMP));
245                 assertNotNull(mdc.get(ENDTIME));
246                 assertNotNull(mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
247                 assertNotNull(mdc.get(INVOCATION_ID));
248                 assertEquals("202", mdc.get(RESPONSECODE));
249                 assertEquals("UNKNOWN", mdc.get(PARTNERNAME));
250                 assertEquals("onap/so/infra/serviceInstantiation/v5/serviceInstances", mdc.get(SERVICE_NAME));
251                 assertEquals("COMPLETE", mdc.get(STATUSCODE));
252                 assertNotNull(mdc.get(RESPONSEDESC));
253                 assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
254                 assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
255                 assertEquals("5.0.0", response.getHeaders().get("X-LatestVersion").get(0));
256             }
257     }
258
259     @Test
260     public void createServiceInstanceServiceInstancesUri() throws IOException {
261         ServiceRecipe serviceRecipe = new ServiceRecipe();
262         serviceRecipe.setOrchestrationUri("/mso/async/services/CreateGenericALaCarteServiceInstance");
263         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
264         serviceRecipe.setAction(Action.createInstance.toString());
265         serviceRecipe.setId(1);
266         serviceRecipe.setRecipeTimeout(180);
267         Service defaultService = new Service();
268         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
269
270         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/CreateGenericALaCarteServiceInstance"))
271                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
272                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
273
274
275         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
276                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
277                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
278
279         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
280                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
281                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
282         // expect
283         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
284         RequestReferences requestReferences = new RequestReferences();
285         requestReferences.setInstanceId("1882939");
286         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
287         expectedResponse.setRequestReferences(requestReferences);
288         uri = servInstanceuri + "v5";
289         ResponseEntity<String> response =
290                 sendRequest(inputStream("/ServiceInstancePrev7.json"), uri, HttpMethod.POST, headers);
291
292         // then
293         assertEquals(404, response.getStatusCode().value());
294         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
295     }
296
297     @Test
298     public void createServiceInstanceBpelStatusError() throws IOException {
299         ServiceRecipe serviceRecipe = new ServiceRecipe();
300         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
301         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
302         serviceRecipe.setAction(Action.createInstance.toString());
303         serviceRecipe.setId(1);
304         serviceRecipe.setRecipeTimeout(180);
305         Service defaultService = new Service();
306         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
307
308
309         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB")).willReturn(aResponse()
310                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
311                 .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_BAD_GATEWAY)));
312
313
314         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
315                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
316                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
317
318         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
319                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
320                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
321
322         uri = servInstanceuri + "v5/serviceInstances";
323         ResponseEntity<String> response =
324                 sendRequest(inputStream("/ServiceInstanceStatusError.json"), uri, HttpMethod.POST);
325
326         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
327     }
328
329     @Test
330     public void createServiceInstanceBadGateway() throws IOException {
331         ServiceRecipe serviceRecipe = new ServiceRecipe();
332         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
333         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
334         serviceRecipe.setAction(Action.createInstance.toString());
335         serviceRecipe.setId(1);
336         serviceRecipe.setRecipeTimeout(180);
337         Service defaultService = new Service();
338         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
339
340         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
341                 .willReturn(aResponse().withStatus(org.apache.http.HttpStatus.SC_BAD_GATEWAY).withBody("{}")));
342
343         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
344                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
345                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
346
347         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
348                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
349                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
350
351         uri = servInstanceuri + "v5/serviceInstances";
352         ResponseEntity<String> response =
353                 sendRequest(inputStream("/ServiceInstanceBadGateway.json"), uri, HttpMethod.POST);
354
355         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
356     }
357
358     @Test
359     public void createServiceInstanceEmptyResponse() throws IOException {
360         ServiceRecipe serviceRecipe = new ServiceRecipe();
361         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
362         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
363         serviceRecipe.setAction(Action.createInstance.toString());
364         serviceRecipe.setId(1);
365         serviceRecipe.setRecipeTimeout(180);
366         Service defaultService = new Service();
367         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
368
369         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
370                 .willReturn(aResponse().withFault(Fault.EMPTY_RESPONSE)));
371
372         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
373                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
374                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
375
376         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
377                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
378                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
379
380         uri = servInstanceuri + "v5/serviceInstances";
381         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceEmpty.json"), uri, HttpMethod.POST);
382
383         assertEquals(Response.Status.BAD_GATEWAY.getStatusCode(), response.getStatusCode().value());
384     }
385
386     @Test
387     public void activateServiceInstanceNoRecipeALaCarte() throws IOException {
388         TestAppender.events.clear();
389         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/activate";
390         HttpHeaders requestIDheaders = new HttpHeaders();
391         requestIDheaders.set(ONAPLogConstants.Headers.REQUEST_ID, "32807a28-1a14-4b88-b7b3-2950918aa76d");
392         ResponseEntity<String> response = sendRequest(inputStream("/ServiceInstanceALaCarteTrueNoRecipe.json"), uri,
393                 HttpMethod.POST, requestIDheaders);
394
395         Service defaultService = new Service();
396         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
397
398         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
399                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
400                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
401
402
403         wireMockServer.stubFor(get(urlMatching(
404                 ".*/serviceRecipe/search/findFirstByServiceModelUUIDAndAction?serviceModelUUID=d88da85c-d9e8-4f73-b837-3a72a431622a&action=activateInstance"))
405                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
406                                 .withStatus(HttpStatus.SC_NOT_FOUND)));
407
408         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value());
409     }
410
411     @Test
412     public void activateServiceInstanceNoRecipe() throws IOException {
413         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/activate";
414         Service defaultService = new Service();
415         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
416         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
417                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
418                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
419
420         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search/.*")).willReturn(aResponse()
421                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).withStatus(HttpStatus.SC_NOT_FOUND)));
422
423         ResponseEntity<String> response =
424                 sendRequest(inputStream("/ServiceInstanceNoRecipe.json"), uri, HttpMethod.POST);
425
426         assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatusCode().value());
427     }
428
429     @Test
430     public void activateServiceInstance() throws IOException {
431         ServiceRecipe serviceRecipe = new ServiceRecipe();
432         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
433         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
434         serviceRecipe.setAction(Action.createInstance.toString());
435         serviceRecipe.setId(1);
436         serviceRecipe.setRecipeTimeout(180);
437         Service defaultService = new Service();
438         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
439
440         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
441                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
442                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
443
444         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
445                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
446                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
447
448         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
449                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
450                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
451         // expected response
452         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
453         RequestReferences requestReferences = new RequestReferences();
454         requestReferences.setInstanceId("1882939");
455         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
456         expectedResponse.setRequestReferences(requestReferences);
457         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/activate";
458         ResponseEntity<String> response =
459                 sendRequest(inputStream("/ServiceInstanceActivate.json"), uri, HttpMethod.POST, headers);
460
461         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
462         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
463         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
464     }
465
466     @Test
467     public void deactivateServiceInstance() throws IOException {
468
469         ServiceRecipe serviceRecipe = new ServiceRecipe();
470         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
471         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
472         serviceRecipe.setAction(Action.createInstance.toString());
473         serviceRecipe.setId(1);
474         serviceRecipe.setRecipeTimeout(180);
475         Service defaultService = new Service();
476         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
477
478         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
479                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
480                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
481
482         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
483                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
484                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
485
486         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
487                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
488                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
489
490         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
491                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
492                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
493
494         // expected response
495         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
496         RequestReferences requestReferences = new RequestReferences();
497         requestReferences.setInstanceId("1882939");
498         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
499         expectedResponse.setRequestReferences(requestReferences);
500         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/deactivate";
501         ResponseEntity<String> response =
502                 sendRequest(inputStream("/ServiceInstanceDeactivate.json"), uri, HttpMethod.POST, headers);
503
504         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
505         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
506         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
507     }
508
509     @Test
510     public void deleteServiceInstance() throws IOException {
511         ServiceRecipe serviceRecipe = new ServiceRecipe();
512         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
513         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
514         serviceRecipe.setAction(Action.createInstance.toString());
515         serviceRecipe.setId(1);
516         serviceRecipe.setRecipeTimeout(180);
517         Service defaultService = new Service();
518         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
519
520         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
521                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
522                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
523
524         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
525                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
526                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
527
528         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
529                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
530                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
531
532         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
533                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
534                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
535         // expected response
536         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
537         RequestReferences requestReferences = new RequestReferences();
538         requestReferences.setInstanceId("1882939");
539         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
540         expectedResponse.setRequestReferences(requestReferences);
541         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a8868/";
542         ResponseEntity<String> response =
543                 sendRequest(inputStream("/ServiceInstanceDelete.json"), uri, HttpMethod.DELETE, headers);
544
545         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
546         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
547         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
548     }
549
550     @Test
551     public void assignServiceInstance() throws IOException {
552         ServiceRecipe serviceRecipe = new ServiceRecipe();
553         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
554         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
555         serviceRecipe.setAction(Action.createInstance.toString());
556         serviceRecipe.setId(1);
557         serviceRecipe.setRecipeTimeout(180);
558         Service defaultService = new Service();
559         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
560
561         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
562                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
563                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
564
565         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
566                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
567                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
568
569         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
570                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
571                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
572
573         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
574                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
575                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
576         // expected response
577         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
578         RequestReferences requestReferences = new RequestReferences();
579         requestReferences.setInstanceId("1882939");
580         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
581         expectedResponse.setRequestReferences(requestReferences);
582         uri = servInstanceuri + "v7" + "/serviceInstances/assign";
583         ResponseEntity<String> response =
584                 sendRequest(inputStream("/ServiceAssign.json"), uri, HttpMethod.POST, headers);
585
586         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
587         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
588         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
589     }
590
591     @Test
592     public void unassignServiceInstance() throws IOException {
593         ServiceRecipe serviceRecipe = new ServiceRecipe();
594         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
595         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
596         serviceRecipe.setAction(Action.createInstance.toString());
597         serviceRecipe.setId(1);
598         serviceRecipe.setRecipeTimeout(180);
599         Service defaultService = new Service();
600         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
601
602         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
603                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
604                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
605
606         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
607                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
608                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
609
610         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
611                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
612                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
613
614         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
615                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
616                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
617         // expected response
618         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
619         RequestReferences requestReferences = new RequestReferences();
620         requestReferences.setInstanceId("1882939");
621         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
622         expectedResponse.setRequestReferences(requestReferences);
623         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/unassign";
624         ResponseEntity<String> response =
625                 sendRequest(inputStream("/ServiceUnassign.json"), uri, HttpMethod.POST, headers);
626
627         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
628         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
629         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
630     }
631
632     @Test
633     public void createPortConfiguration() throws IOException {
634         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
635                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
636                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
637         // expected response
638         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
639         RequestReferences requestReferences = new RequestReferences();
640         requestReferences.setInstanceId("1882939");
641         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
642         expectedResponse.setRequestReferences(requestReferences);
643         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
644         ResponseEntity<String> response =
645                 sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers);
646
647         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
648         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
649         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
650         assertTrue(response.getBody().contains("1882939"));
651     }
652
653     @Test
654     public void createPortConfigurationEmptyProductFamilyId() throws IOException {
655         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
656         ResponseEntity<String> response =
657                 sendRequest(inputStream("/ServiceInstanceParseFail.json"), uri, HttpMethod.POST);
658
659         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
660     }
661
662     @Test
663     public void deletePortConfiguration() throws IOException {
664         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
665                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
666                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
667
668         // expected response
669         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
670         RequestReferences requestReferences = new RequestReferences();
671         requestReferences.setInstanceId("1882939");
672         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
673         expectedResponse.setRequestReferences(requestReferences);
674         uri = servInstanceuri + "v7"
675                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970";
676         ResponseEntity<String> response =
677                 sendRequest(inputStream("/ServiceInstance.json"), uri, HttpMethod.DELETE, headers);
678
679         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
680         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
681         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
682     }
683
684     @Test
685     public void enablePort() throws IOException {
686         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
687                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
688                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
689         // expected response
690         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
691         RequestReferences requestReferences = new RequestReferences();
692         requestReferences.setInstanceId("1882939");
693         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
694         expectedResponse.setRequestReferences(requestReferences);
695         uri = servInstanceuri + "v7"
696                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/enablePort";
697         ResponseEntity<String> response =
698                 sendRequest(inputStream("/ServiceInstanceEnablePort.json"), uri, HttpMethod.POST, headers);
699
700         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
701         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
702         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
703     }
704
705     @Test
706     public void disablePort() throws IOException {
707         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
708                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
709                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
710         // expected response
711         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
712         RequestReferences requestReferences = new RequestReferences();
713         requestReferences.setInstanceId("1882939");
714         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
715         expectedResponse.setRequestReferences(requestReferences);
716         uri = servInstanceuri + "v7"
717                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/disablePort";
718         ResponseEntity<String> response =
719                 sendRequest(inputStream("/ServiceInstanceDisablePort.json"), uri, HttpMethod.POST, headers);
720
721         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
722         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
723         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
724     }
725
726     @Test
727     public void activatePort() throws IOException {
728         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
729                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
730                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
731         // expected response
732         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
733         RequestReferences requestReferences = new RequestReferences();
734         requestReferences.setInstanceId("1882939");
735         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
736         expectedResponse.setRequestReferences(requestReferences);
737         uri = servInstanceuri + "v7"
738                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/activate";
739         ResponseEntity<String> response =
740                 sendRequest(inputStream("/ServiceInstanceActivatePort.json"), uri, HttpMethod.POST, headers);
741
742         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
743         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
744         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
745     }
746
747     @Test
748     public void deactivatePort() throws IOException {
749         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
750                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
751                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
752         // expected response
753         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
754         RequestReferences requestReferences = new RequestReferences();
755         requestReferences.setInstanceId("1882939");
756         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
757         expectedResponse.setRequestReferences(requestReferences);
758         uri = servInstanceuri + "v7"
759                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations/f7ce78bb-423b-11e7-93f8-0050569a7970/deactivate";
760         ResponseEntity<String> response =
761                 sendRequest(inputStream("/ServiceInstanceDeactivatePort.json"), uri, HttpMethod.POST, headers);
762
763         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
764         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
765         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
766     }
767
768     @Test
769     public void addRelationships() throws IOException {
770         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
771                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
772                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
773         // expected response
774         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
775         RequestReferences requestReferences = new RequestReferences();
776         requestReferences.setInstanceId("1882939");
777         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
778         expectedResponse.setRequestReferences(requestReferences);
779         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/addRelationships";
780         ResponseEntity<String> response =
781                 sendRequest(inputStream("/AddRelationships.json"), uri, HttpMethod.POST, headers);
782
783         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
784         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
785         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
786     }
787
788     @Test
789     public void removeRelationships() throws IOException {
790         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
791                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
792                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
793         // expected response
794         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
795         RequestReferences requestReferences = new RequestReferences();
796         requestReferences.setInstanceId("1882939");
797         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
798         expectedResponse.setRequestReferences(requestReferences);
799         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/removeRelationships";
800         ResponseEntity<String> response =
801                 sendRequest(inputStream("/RemoveRelationships.json"), uri, HttpMethod.POST, headers);
802
803         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
804         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
805         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
806     }
807
808     @Test
809     public void createVnfInstanceNoALaCarte() throws IOException {
810         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
811                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
812                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
813
814
815         wireMockServer.stubFor(get(urlMatching(
816                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=68dc9a92-214c-11e7-93ae-92361f002671"))
817                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
818                                 .withBody(getWiremockResponseForCatalogdb(
819                                         "vnfResourceCustomization_ReplaceVnf_Response.json"))
820                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
821
822         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/1/vnfResources"))
823                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
824                         .withBody(getWiremockResponseForCatalogdb("vnfResources_ReplaceVnf_Response.json"))
825                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
826
827         wireMockServer.stubFor(get(urlMatching(
828                 ".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]nfRole=GR-API-DEFAULT&action=createInstance"))
829                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
830                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeReplaceInstance_Response.json"))
831                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
832
833         // expected response
834         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
835         RequestReferences requestReferences = new RequestReferences();
836         requestReferences.setInstanceId("1882939");
837         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
838         expectedResponse.setRequestReferences(requestReferences);
839         uri = servInstanceuri + "v7" + "/serviceInstances/49585b36-2b5a-443a-8b10-c75d34bb5e46/vnfs";
840         ResponseEntity<String> response =
841                 sendRequest(inputStream("/VnfCreateDefault.json"), uri, HttpMethod.POST, headers);
842
843         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
844         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
845         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
846     }
847
848     @Test
849     public void createVnfInstance() throws IOException {
850         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
851                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
852                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
853
854         wireMockServer.stubFor(get(urlMatching(".*/service/5df8b6de-2083-11e7-93ae-92361f002672"))
855                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
856                         .withBody(getWiremockResponseForCatalogdb("serviceVnf_Response.json"))
857                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
858         wireMockServer.stubFor(get(urlMatching(".*/service/5df8b6de-2083-11e7-93ae-92361f002672/vnfCustomizations"))
859                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
860                         .withBody(getWiremockResponseForCatalogdb("vnfResourceCustomizationsList_Response.json"))
861                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
862
863
864         wireMockServer.stubFor(
865                 get(urlMatching(".*/vnfResourceCustomization/68dc9a92-214c-11e7-93ae-92361f002672/vnfResources"))
866                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
867                                 .withBody(getWiremockResponseForCatalogdb("vnfResourcesCreateVnf_Response.json"))
868                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
869
870         wireMockServer.stubFor(get(urlMatching(
871                 ".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]nfRole=GR-API-DEFAULT&action=createInstance"))
872                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
873                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeCreateInstance_Response.json"))
874                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
875
876         // expected response
877         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
878         RequestReferences requestReferences = new RequestReferences();
879         requestReferences.setInstanceId("1882939");
880         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
881         expectedResponse.setRequestReferences(requestReferences);
882         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs";
883         ResponseEntity<String> response =
884                 sendRequest(inputStream("/VnfWithServiceRelatedInstance.json"), uri, HttpMethod.POST, headers);
885
886         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
887         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
888         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
889         assertTrue(response.getBody().contains("1882939"));
890     }
891
892     @Test
893     public void createVnfWithServiceRelatedInstanceFail() throws IOException {
894         uri = servInstanceUriPrev7 + "v6" + "/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs";
895         ResponseEntity<String> response =
896                 sendRequest(inputStream("/VnfWithServiceRelatedInstanceFail.json"), uri, HttpMethod.POST);
897
898         assertEquals(404, response.getStatusCode().value());
899     }
900
901     @Test
902     public void createVnfInstanceInvalidVnfResource() throws IOException {
903         uri = servInstanceuri + "v7" + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs";
904         ResponseEntity<String> response = sendRequest(inputStream("/NoVnfResource.json"), uri, HttpMethod.POST);
905
906         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
907         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
908         assertEquals("No valid vnfResource is specified", realResponse.getServiceException().getText());
909     }
910
911     @Test
912     public void replaceVnfInstance() throws IOException {
913         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
914                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
915                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
916
917         wireMockServer.stubFor(get(urlMatching(
918                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=68dc9a92-214c-11e7-93ae-92361f002671"))
919                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
920                                 .withBody(getWiremockResponseForCatalogdb(
921                                         "vnfResourceCustomization_ReplaceVnf_Response.json"))
922                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
923
924         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/1/vnfResources"))
925                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
926                         .withBody(getWiremockResponseForCatalogdb("vnfResources_ReplaceVnf_Response.json"))
927                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
928
929         wireMockServer.stubFor(get(urlMatching(
930                 ".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]nfRole=GR-API-DEFAULT&action=replaceInstance"))
931                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
932                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeReplaceInstance_Response.json"))
933                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
934         // expected response
935         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
936         RequestReferences requestReferences = new RequestReferences();
937         requestReferences.setInstanceId("1882939");
938         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
939         expectedResponse.setRequestReferences(requestReferences);
940         uri = servInstanceuri + "v7"
941                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
942         ResponseEntity<String> response = sendRequest(inputStream("/ReplaceVnf.json"), uri, HttpMethod.POST, headers);
943
944         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
945         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
946         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
947     }
948
949     @Test
950     public void replaceVnfRecreateInstance() throws IOException {
951         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/RecreateInfraVce"))
952                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
953                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
954
955         wireMockServer.stubFor(get(urlMatching(
956                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=68dc9a92-214c-11e7-93ae-92361f002674"))
957                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
958                                 .withBody(getWiremockResponseForCatalogdb("vnfResourceCustomization_Response.json"))
959                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
960
961         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/4/vnfResources"))
962                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
963                         .withBody(getWiremockResponseForCatalogdb("vnfResources_Response.json"))
964                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
965
966         wireMockServer.stubFor(get(urlMatching(
967                 ".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]nfRole=TEST&action=replaceInstance"))
968                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
969                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipe_Response.json"))
970                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
971
972         // expected response
973         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
974         RequestReferences requestReferences = new RequestReferences();
975         requestReferences.setInstanceId("1882939");
976         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
977         expectedResponse.setRequestReferences(requestReferences);
978         uri = servInstanceuri + "v7"
979                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
980         ResponseEntity<String> response =
981                 sendRequest(inputStream("/ReplaceVnfRecreate.json"), uri, HttpMethod.POST, headers);
982         logger.debug(response.getBody());
983
984         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
985         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
986         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
987     }
988
989     @Test
990     public void recreateVnfInstance() throws IOException {
991         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
992                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
993                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
994
995         wireMockServer.stubFor(get(urlMatching(
996                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=68dc9a92-214c-11e7-93ae-92361f002674"))
997                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
998                                 .withBody(getWiremockResponseForCatalogdb("vnfResourceCustomization_Response"))
999                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1000
1001         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/4/vnfResources"))
1002                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1003                         .withBody(getWiremockResponseForCatalogdb("vnfResources_Response.json"))
1004                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1005
1006         wireMockServer.stubFor(get(urlMatching(
1007                 ".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]nfRole=GR-API-DEFAULT&action=recreateInstance"))
1008                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1009                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipe_ResponseWorkflowAction.json"))
1010                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1011
1012         // expected response
1013         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1014         RequestReferences requestReferences = new RequestReferences();
1015         requestReferences.setInstanceId("1882939");
1016         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1017         expectedResponse.setRequestReferences(requestReferences);
1018         uri = servInstanceuri + "v7"
1019                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/recreate";
1020         ResponseEntity<String> response = sendRequest(inputStream("/VnfRecreate.json"), uri, HttpMethod.POST, headers);
1021         logger.debug(response.getBody());
1022
1023         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1024         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1025         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1026     }
1027
1028     @Test
1029     public void updateVnfInstance() throws IOException {
1030         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1031                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1032                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1033
1034         wireMockServer.stubFor(get(urlMatching(
1035                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=68dc9a92-214c-11e7-93ae-92361f002674"))
1036                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1037                                 .withBody(getWiremockResponseForCatalogdb("vnfResourceCustomization_Response.json"))
1038                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1039
1040         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/4/vnfResources"))
1041                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1042                         .withBody(getWiremockResponseForCatalogdb("vnfResources_Response.json"))
1043                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1044
1045         wireMockServer.stubFor(get(urlMatching(".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction"
1046                 + "[?]nfRole=GR-API-DEFAULT&action=updateInstance"))
1047                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1048                                 .withBody(getWiremockResponseForCatalogdb("UpdateVnfRecipe_Response.json"))
1049                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1050
1051         // expected response
1052         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1053         RequestReferences requestReferences = new RequestReferences();
1054         requestReferences.setInstanceId("1882939");
1055         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1056         expectedResponse.setRequestReferences(requestReferences);
1057         uri = servInstanceuri + "v7"
1058                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1059         ResponseEntity<String> response = sendRequest(inputStream("/UpdateVnf.json"), uri, HttpMethod.PUT, headers);
1060
1061         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1062         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1063         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1064     }
1065
1066     @Test
1067     public void applyUpdatedConfig() throws IOException {
1068         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/VnfConfigUpdate"))
1069                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1070                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1071
1072
1073         wireMockServer.stubFor(get(urlMatching(".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction"
1074                 + "[?]nfRole=GR-API-DEFAULT&action=applyUpdatedConfig"))
1075                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1076                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeApplyUpdatedConfig_Response.json"))
1077                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1078
1079         // expected response
1080         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1081         RequestReferences requestReferences = new RequestReferences();
1082         requestReferences.setInstanceId("1882939");
1083         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1084         expectedResponse.setRequestReferences(requestReferences);
1085         uri = servInstanceuri + "v7"
1086                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/applyUpdatedConfig";
1087         ResponseEntity<String> response =
1088                 sendRequest(inputStream("/ApplyUpdatedConfig.json"), uri, HttpMethod.POST, headers);
1089
1090         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1091         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1092         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1093     }
1094
1095     @Test
1096     public void deleteVnfInstanceV5() throws IOException {
1097         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1098                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1099                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1100
1101         wireMockServer.stubFor(get(urlMatching(".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction"
1102                 + "[?]nfRole=GR-API-DEFAULT&action=deleteInstance"))
1103                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1104                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeDelete_Response.json"))
1105                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1106         // expected response
1107         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1108         RequestReferences requestReferences = new RequestReferences();
1109         requestReferences.setInstanceId("1882939");
1110         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1111         expectedResponse.setRequestReferences(requestReferences);
1112         uri = servInstanceuri + "v5"
1113                 + "/serviceInstances/e446b97d-9c35-437a-95a2-6b4c542c4507/vnfs/49befbfe-fccb-421d-bb4c-0734a43f5ea0";
1114         ResponseEntity<String> response =
1115                 sendRequest(inputStream("/DeleteVnfV5.json"), uri, HttpMethod.DELETE, headers);
1116
1117         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1118         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1119         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1120     }
1121
1122     @Test
1123     public void createVfModuleInstance() throws IOException {
1124         wireMockServer.stubFor(get(urlMatching(
1125                 "/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc\\?MODEL_CUSTOMIZATION_UUID=cb82ffd8-252a-11e7-93ae-92361f002671"))
1126                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1127                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomization_Response.json"))
1128                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1129
1130         wireMockServer.stubFor(get(urlMatching("/vfModule/20c4431c-246d-11e7-93ae-92361f002671"))
1131                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1132                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1133                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1134
1135         wireMockServer.stubFor(get(urlMatching("/vfModuleCustomization/1/vfModule"))
1136                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1137                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1138                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1139
1140         wireMockServer.stubFor(get(urlMatching(
1141                 "/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc\\?MODEL_CUSTOMIZATION_UUID=20c4431c-246d-11e7-93ae-92361f002671"))
1142                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1143                                 .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1144                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1145
1146         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/CreateVfModuleInfra"))
1147                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1148                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1149
1150         wireMockServer.stubFor(get(urlMatching(
1151                 "/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1152                         + "[?]vfModuleModelUUID=20c4431c-246d-11e7-93ae-92361f002671&vnfComponentType=vfModule&action=createInstance"))
1153                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1154                                         .withBody(getWiremockResponseForCatalogdb("vnfComponentRecipe_Response.json"))
1155                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1156         // expected response
1157         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1158         RequestReferences requestReferences = new RequestReferences();
1159         requestReferences.setInstanceId("1882939");
1160         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1161         expectedResponse.setRequestReferences(requestReferences);
1162         uri = servInstanceuri + "v7"
1163                 + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules";
1164         ResponseEntity<String> response =
1165                 sendRequest(inputStream("/VfModuleWithRelatedInstances.json"), uri, HttpMethod.POST, headers);
1166
1167         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1168         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1169         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1170         assertTrue(response.getBody().contains("1882939"));
1171     }
1172
1173     @Test
1174     public void createVfModuleInstanceNoModelCustomization() throws IOException {
1175         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/CreateVfModuleInfra"))
1176                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1177                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1178
1179         wireMockServer.stubFor(get(urlMatching(".*/vnfResource/fe6478e4-ea33-3346-ac12-ab121484a3fe"))
1180                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1181                         .withBody(getWiremockResponseForCatalogdb("vnfResourceForVfModule_Response.json"))
1182                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1183
1184         wireMockServer
1185                 .stubFor(get(urlMatching(".*/vnfResourceCustomization/search/findByModelInstanceNameAndVnfResources"
1186                         + "[?]MODEL_INSTANCE_NAME=test&VNF_RESOURCE_MODEL_UUID=fe6478e4-ea33-3346-ac12-ab121484a3fe"))
1187                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1188                                         .withBody(getWiremockResponseForCatalogdb(
1189                                                 "vnfResourceCustomizationForVfModule_Response.json"))
1190                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1191
1192         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/3/vfModuleCustomizations"))
1193                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1194                         .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationsPCM_Response.json"))
1195                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1196
1197         wireMockServer.stubFor(get(urlMatching(
1198                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDAndVfModuleModelUUIDOrderByCreatedDesc[?]"
1199                         + "MODEL_CUSTOMIZATION_UUID=b4ea86b4-253f-11e7-93ae-92361f002672&MODEL_UUID=066de97e-253e-11e7-93ae-92361f002672"))
1200                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1201                                         .withBody(getWiremockResponseForCatalogdb(
1202                                                 "vfModuleCustomizationPCM_Response.json"))
1203                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1204
1205         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/2/vfModule"))
1206                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1207                         .withBody(getWiremockResponseForCatalogdb("vfModulePCM_Response.json"))
1208                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1209
1210         wireMockServer.stubFor(get(urlMatching(".*/vfModule/066de97e-253e-11e7-93ae-92361f002672"))
1211                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1212                         .withBody(getWiremockResponseForCatalogdb("vfModulePCM_Response.json"))
1213                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1214
1215
1216         wireMockServer.stubFor(
1217                 get(urlMatching(".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVnfComponentTypeAndAction"
1218                         + "[?]vnfComponentType=vfModule&action=createInstance"))
1219                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1220                                         .withBody(getWiremockResponseForCatalogdb(
1221                                                 "vnfComponentRecipeVNF_API_Response.json"))
1222                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1223
1224         // expected response
1225         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1226         RequestReferences requestReferences = new RequestReferences();
1227         requestReferences.setInstanceId("1882939");
1228         requestReferences.setRequestSelfLink(createExpectedSelfLink("v6", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1229         expectedResponse.setRequestReferences(requestReferences);
1230         uri = servInstanceuri + "v6"
1231                 + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules";
1232         ResponseEntity<String> response =
1233                 sendRequest(inputStream("/VfModuleNoModelCustomization.json"), uri, HttpMethod.POST, headers);
1234         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1235         ObjectMapper mapper = new ObjectMapper();
1236         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1237         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1238     }
1239
1240     @Test
1241     public void deleteVfModuleInstanceNoMatchingModelUUD() throws IOException {
1242         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1243                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1244                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1245
1246         wireMockServer.stubFor(get(urlMatching(".*/vnfResource/.*"))
1247                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1248                         .withBody(getWiremockResponseForCatalogdb("vnfResourceForVfModule_Response.json"))
1249                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1250
1251         wireMockServer
1252                 .stubFor(get(urlMatching(".*/vnfResourceCustomization/search/findByModelInstanceNameAndVnfResources.*"))
1253                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1254                                 .withBody(getWiremockResponseForCatalogdb(
1255                                         "vnfResourceCustomizationForVfModule_Response.json"))
1256                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1257
1258         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/3/vfModuleCustomizations"))
1259                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1260                         .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationsPCM_Response.json"))
1261                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1262
1263         wireMockServer.stubFor(get(urlMatching(
1264                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=b4ea86b4-253f-11e7-93ae-92361f002672"))
1265                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1266                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationPCM_Response.json"))
1267                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1268
1269         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/2/vfModule"))
1270                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1271                         .withBody(getWiremockResponseForCatalogdb("vfModulePCM_Response.json"))
1272                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1273
1274         wireMockServer.stubFor(get(urlMatching(".*/vfModule/066de97e-253e-11e7-93ae-92361f002672"))
1275                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1276                         .withBody(getWiremockResponseForCatalogdb("vfModulePCM_Response.json"))
1277                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1278
1279         wireMockServer.stubFor(get(urlMatching(
1280                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1281                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=deleteInstance"))
1282                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1283                                         .withBody(getWiremockResponseForCatalogdb(
1284                                                 "vnfComponentRecipeDeleteVfModule_Response.json"))
1285                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1286
1287         // expected response
1288         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1289         RequestReferences requestReferences = new RequestReferences();
1290         requestReferences.setInstanceId("1882939");
1291         requestReferences.setRequestSelfLink(createExpectedSelfLink("v6", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1292         expectedResponse.setRequestReferences(requestReferences);
1293         uri = servInstanceuri + "v6"
1294                 + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1295         ResponseEntity<String> response =
1296                 sendRequest(inputStream("/VfModuleNoMatchingModelUUID.json"), uri, HttpMethod.DELETE, headers);
1297
1298
1299         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1300         ObjectMapper mapper = new ObjectMapper();
1301         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1302         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1303     }
1304
1305     @Test
1306     public void createVfModuleInstanceNoRecipe() throws IOException {
1307
1308         wireMockServer.stubFor(get(urlMatching(".*/vnfResource/fe6478e4-ea33-3346-ac12-ab121484a3fe"))
1309                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1310                         .withBody(getWiremockResponseForCatalogdb("vnfResourceForVfModule_Response.json"))
1311                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1312
1313         wireMockServer
1314                 .stubFor(get(urlMatching(".*/vnfResourceCustomization/search/findByModelInstanceNameAndVnfResources"
1315                         + "[?]MODEL_INSTANCE_NAME=test&VNF_RESOURCE_MODEL_UUID=fe6478e4-ea33-3346-ac12-ab121484a3fe"))
1316                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1317                                         .withBody(getWiremockResponseForCatalogdb(
1318                                                 "vnfResourceCustomizationForVfModule_Response.json"))
1319                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1320
1321         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/3/vfModuleCustomizations"))
1322                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1323                         .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationsPCM_Response.json"))
1324                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1325
1326         wireMockServer.stubFor(
1327                 get(urlMatching(".*/vfModuleCustomization/search/findByModelCustomizationUUIDAndVfModuleModelUUID[?]"
1328                         + "modelCustomizationUUID=b4ea86b4-253f-11e7-93ae-92361f002672&vfModuleModelUUID=066de97e-253e-11e7-93ae-92361f002672"))
1329                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1330                                         .withBody(getWiremockResponseForCatalogdb(
1331                                                 "vfModuleCustomizationPCM_Response.json"))
1332                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1333
1334         uri = servInstanceuri + "v6"
1335                 + "/serviceInstances/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules";
1336         ResponseEntity<String> response =
1337                 sendRequest(inputStream("/VfModuleInvalid.json"), uri, HttpMethod.POST, headers);
1338
1339         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
1340         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
1341         assertEquals("No valid vfModuleCustomization is specified", realResponse.getServiceException().getText());
1342     }
1343
1344     @Test
1345     public void replaceVfModuleInstance() throws IOException {
1346         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1347                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1348                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1349
1350         wireMockServer
1351                 .stubFor(get(urlMatching(".*/vfModule/search/findFirstVfModuleByModelInvariantUUIDAndModelVersion[?]"
1352                         + "modelInvariantUUID=78ca26d0-246d-11e7-93ae-92361f002671&modelVersion=2"))
1353                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1354                                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1355                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1356
1357         wireMockServer.stubFor(get(urlMatching(
1358                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1359                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=replaceInstance"))
1360                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1361                                         .withBody(getWiremockResponseForCatalogdb(
1362                                                 "vnfComponentRecipeDeleteVfModule_Response.json"))
1363                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1364         // expected response
1365         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1366         RequestReferences requestReferences = new RequestReferences();
1367         requestReferences.setInstanceId("1882939");
1368         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1369         expectedResponse.setRequestReferences(requestReferences);
1370         uri = servInstanceuri + "v7"
1371                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/replace";
1372         ResponseEntity<String> response =
1373                 sendRequest(inputStream("/ReplaceVfModule.json"), uri, HttpMethod.POST, headers);
1374
1375         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1376         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1377         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1378     }
1379
1380     @Test
1381     public void updateVfModuleInstance() throws IOException {
1382         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1383                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1384                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1385
1386         wireMockServer.stubFor(get(urlMatching(
1387                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=cb82ffd8-252a-11e7-93ae-92361f002671"))
1388                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1389                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomization_Response.json"))
1390                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1391
1392         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/1/vfModule"))
1393                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1394                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1395                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1396
1397         wireMockServer.stubFor(get(urlMatching(".*/vfModule/20c4431c-246d-11e7-93ae-92361f002671"))
1398                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1399                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1400                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1401
1402         wireMockServer.stubFor(get(urlMatching(
1403                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1404                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=updateInstance"))
1405                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1406                                         .withBody(getWiremockResponseForCatalogdb(
1407                                                 "vnfComponentRecipe_GRAPI_Response.json"))
1408                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1409
1410         // expected response
1411         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1412         RequestReferences requestReferences = new RequestReferences();
1413         requestReferences.setInstanceId("1882939");
1414         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1415         expectedResponse.setRequestReferences(requestReferences);
1416         uri = servInstanceuri + "v7"
1417                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1418         ResponseEntity<String> response =
1419                 sendRequest(inputStream("/UpdateVfModule.json"), uri, HttpMethod.PUT, headers);
1420         logger.debug(response.getBody());
1421
1422         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1423         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1424         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1425     }
1426
1427     @Test
1428     public void createVfModuleNoModelType() throws IOException {
1429         InfraActiveRequests expectedRecord = new InfraActiveRequests();
1430         expectedRecord.setRequestStatus("FAILED");
1431         expectedRecord.setAction("createInstance");
1432         expectedRecord.setStatusMessage("Error parsing request: No valid modelType is specified");
1433         expectedRecord.setProgress(100L);
1434         expectedRecord.setSource("VID");
1435         expectedRecord.setRequestBody(inputStream("/VfModuleNoModelType.json"));
1436         expectedRecord.setLastModifiedBy("APIH");
1437         expectedRecord.setVfModuleName("testVfModule2");
1438         expectedRecord.setVfModuleModelName("serviceModel");
1439         expectedRecord.setRequestScope("vfModule");
1440         expectedRecord.setRequestAction("createInstance");
1441         expectedRecord.setRequestorId("zz9999");
1442         expectedRecord.setRequestId("32807a28-1a14-4b88-b7b3-2950918aa76d");
1443         // VnfType is not sent in this request, should be blank in db
1444         expectedRecord.setVnfType("");
1445         uri = servInstanceuri
1446                 + "v5/serviceInstances/32807a28-1a14-4b88-b7b3-2950918aa76d/vnfs/32807a28-1a14-4b88-b7b3-2950918aa76d/vfModules";
1447
1448         ResponseEntity<String> response =
1449                 sendRequest(inputStream("/VfModuleNoModelType.json"), uri, HttpMethod.POST, headers);
1450         // ActualRecord
1451         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
1452     }
1453
1454     @Test
1455     public void inPlaceSoftwareUpdate() throws IOException {
1456         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/VnfInPlaceUpdate"))
1457                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1458                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1459
1460         wireMockServer.stubFor(get(urlMatching(".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction[?]"
1461                 + "nfRole=GR-API-DEFAULT&action=inPlaceSoftwareUpdate"))
1462                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1463                                 .withBody(getWiremockResponseForCatalogdb("vnfRecipeInPlaceUpdate_Response.json"))
1464                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1465
1466         // expected response
1467         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1468         RequestReferences requestReferences = new RequestReferences();
1469         requestReferences.setInstanceId("1882939");
1470         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1471         expectedResponse.setRequestReferences(requestReferences);
1472         uri = servInstanceuri + "v7"
1473                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/inPlaceSoftwareUpdate";
1474         ResponseEntity<String> response =
1475                 sendRequest(inputStream("/InPlaceSoftwareUpdate.json"), uri, HttpMethod.POST, headers);
1476
1477         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1478         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1479         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1480     }
1481
1482     @Test
1483     public void deleteVfModuleInstance() throws IOException {
1484         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1485                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1486                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1487
1488         wireMockServer
1489                 .stubFor(get(urlMatching(".*/vfModule/search/findFirstVfModuleByModelInvariantUUIDAndModelVersion[?]"
1490                         + "modelInvariantUUID=78ca26d0-246d-11e7-93ae-92361f002671&modelVersion=2"))
1491                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1492                                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1493                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1494
1495         wireMockServer.stubFor(get(urlMatching(
1496                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1497                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=deleteInstance"))
1498                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1499                                         .withBody(getWiremockResponseForCatalogdb(
1500                                                 "vnfComponentRecipeDeleteVfModule_Response.json"))
1501                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1502
1503         // expected response
1504         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1505         RequestReferences requestReferences = new RequestReferences();
1506         requestReferences.setInstanceId("1882939");
1507         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1508         expectedResponse.setRequestReferences(requestReferences);
1509         uri = servInstanceuri + "v7"
1510                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1511         ResponseEntity<String> response =
1512                 sendRequest(inputStream("/DeleteVfModule.json"), uri, HttpMethod.DELETE, headers);
1513
1514         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1515         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1516         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1517     }
1518
1519     @Test
1520     public void deleteVfModuleNoModelInvariantId() throws IOException {
1521         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1522                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1523                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1524
1525         wireMockServer.stubFor(get(urlMatching(
1526                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1527                         + "[?]vfModuleModelUUID=VNF-API-DEFAULT&vnfComponentType=vfModule&action=deleteInstance"))
1528                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1529                                         .withBody(getWiremockResponseForCatalogdb(
1530                                                 "vnfComponentRecipeDeleteVfModule_Response.json"))
1531                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1532
1533         // expected response
1534         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1535         RequestReferences requestReferences = new RequestReferences();
1536         requestReferences.setInstanceId("1882939");
1537         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1538         expectedResponse.setRequestReferences(requestReferences);
1539         uri = servInstanceuri + "v7"
1540                 + "/serviceInstances/196b4a84-0858-4317-a1f6-497e2e52ae43/vnfs/36e4f902-ec32-451e-8d53-e3edc19e40a4/vfModules/09f3a38d-933f-450a-8784-9e6c4dec3f72";
1541         ResponseEntity<String> response =
1542                 sendRequest(inputStream("/DeleteVfModuleNoModelInvariantId.json"), uri, HttpMethod.DELETE, headers);
1543
1544         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1545         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1546         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1547     }
1548
1549     @Test
1550     public void deactivateAndCloudDeleteVfModuleInstance() throws IOException {
1551         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1552                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1553                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1554
1555         wireMockServer
1556                 .stubFor(get(urlMatching(".*/vfModule/search/findFirstVfModuleByModelInvariantUUIDAndModelVersion[?]"
1557                         + "modelInvariantUUID=78ca26d0-246d-11e7-93ae-92361f002671&modelVersion=2"))
1558                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1559                                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
1560                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1561
1562         wireMockServer.stubFor(get(urlMatching(
1563                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1564                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=deactivateAndCloudDelete"))
1565                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1566                                         .withBody(getWiremockResponseForCatalogdb(
1567                                                 "vnfComponentRecipeDeactivate_Response.json"))
1568                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1569
1570         // expected response
1571         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1572         RequestReferences requestReferences = new RequestReferences();
1573         requestReferences.setInstanceId("1882939");
1574         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1575         expectedResponse.setRequestReferences(requestReferences);
1576         uri = servInstanceuri + "v7"
1577                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/vfModules/ff305d54-75b4-431b-adb2-eb6b9e5ff000/deactivateAndCloudDelete";
1578         ResponseEntity<String> response =
1579                 sendRequest(inputStream("/DeactivateAndCloudDeleteVfModule.json"), uri, HttpMethod.POST, headers);
1580
1581         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1582         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1583         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1584     }
1585
1586     @Test
1587     public void createVolumeGroupInstance() throws IOException {
1588         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1589                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1590                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1591
1592         wireMockServer.stubFor(get(urlMatching(
1593                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=b4ea86b4-253f-11e7-93ae-92361f002671"))
1594                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1595                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationVolGrp_Response.json"))
1596                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1597
1598         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/1/vfModule"))
1599                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1600                         .withBody(getWiremockResponseForCatalogdb("vfModuleVolGroup_Response.json"))
1601                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1602
1603         wireMockServer.stubFor(get(urlMatching(
1604                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1605                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=volumeGroup&action=createInstance"))
1606                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1607                                         .withBody(getWiremockResponseForCatalogdb(
1608                                                 "vnfComponentRecipeVolGrp_GRAPI_Response.json"))
1609                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1610
1611         // expected response
1612         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1613         RequestReferences requestReferences = new RequestReferences();
1614         requestReferences.setInstanceId("1882939");
1615         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1616         expectedResponse.setRequestReferences(requestReferences);
1617         uri = servInstanceuri + "v7"
1618                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups";
1619         ResponseEntity<String> response = sendRequest(inputStream("/VolumeGroup.json"), uri, HttpMethod.POST, headers);
1620
1621         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1622         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1623         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1624         assertTrue(response.getBody().contains("1882939"));
1625     }
1626
1627     @Test
1628     public void updateVolumeGroupInstance() throws IOException {
1629         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1630                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1631                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1632
1633         wireMockServer.stubFor(get(urlMatching(
1634                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=b4ea86b4-253f-11e7-93ae-92361f002671"))
1635                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1636                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationVolGrp_Response.json"))
1637                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1638
1639         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/1/vfModule"))
1640                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1641                         .withBody(getWiremockResponseForCatalogdb("vfModuleVolGroup_Response.json"))
1642                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1643
1644         wireMockServer.stubFor(get(urlMatching(
1645                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1646                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=volumeGroup&action=updateInstance"))
1647                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1648                                         .withBody(getWiremockResponseForCatalogdb(
1649                                                 "vnfComponentRecipeVolGrp_GRAPI_Response.json"))
1650                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1651
1652         // expected response
1653         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1654         RequestReferences requestReferences = new RequestReferences();
1655         requestReferences.setInstanceId("1882939");
1656         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1657         expectedResponse.setRequestReferences(requestReferences);
1658         uri = servInstanceuri + "v7"
1659                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1660         ResponseEntity<String> response =
1661                 sendRequest(inputStream("/UpdateVolumeGroup.json"), uri, HttpMethod.PUT, headers);
1662
1663         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1664         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1665         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1666     }
1667
1668     @Test
1669     public void deleteVolumeGroupInstance() throws IOException {
1670         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1671                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1672                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1673
1674         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1675                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1676                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1677
1678         wireMockServer.stubFor(get(urlMatching(
1679                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=b4ea86b4-253f-11e7-93ae-92361f002671"))
1680                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1681                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomizationVolGrp_Response.json"))
1682                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1683
1684         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/1/vfModule"))
1685                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1686                         .withBody(getWiremockResponseForCatalogdb("vfModuleVolGroup_Response.json"))
1687                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1688
1689         wireMockServer.stubFor(get(urlMatching(
1690                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
1691                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=volumeGroup&action=deleteInstance"))
1692                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1693                                         .withBody(getWiremockResponseForCatalogdb(
1694                                                 "vnfComponentRecipeVolGrp_GRAPI_Response.json"))
1695                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
1696
1697         // expected response
1698         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1699         RequestReferences requestReferences = new RequestReferences();
1700         requestReferences.setInstanceId("1882939");
1701         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1702         expectedResponse.setRequestReferences(requestReferences);
1703         uri = servInstanceuri + "v7"
1704                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/vnfs/ff305d54-75b4-431b-adb2-eb6b9e5ff000/volumeGroups/ff305d54-75b4-431b-adb2-eb6b9e5ff000";
1705         ResponseEntity<String> response =
1706                 sendRequest(inputStream("/DeleteVolumeGroup.json"), uri, HttpMethod.DELETE, headers);
1707
1708         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1709         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1710         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1711     }
1712
1713     @Test
1714     public void createNetworkInstance() throws IOException {
1715         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1716                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1717                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1718
1719         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
1720                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1721                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
1722                         .withStatus(HttpStatus.SC_OK)));
1723
1724         wireMockServer.stubFor(
1725                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
1726                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1727                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
1728                                 .withStatus(HttpStatus.SC_OK)));
1729
1730         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
1731                 + "modelName=GR-API-DEFAULT&action=createInstance"))
1732                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1733                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
1734                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1735
1736         // expected response
1737         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1738         RequestReferences requestReferences = new RequestReferences();
1739         requestReferences.setInstanceId("1882939");
1740         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1741         expectedResponse.setRequestReferences(requestReferences);
1742         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
1743         ResponseEntity<String> response =
1744                 sendRequest(inputStream("/NetworkCreate.json"), uri, HttpMethod.POST, headers);
1745
1746         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1747         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1748         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1749     }
1750
1751     @Test
1752     public void updateNetworkInstance() throws IOException {
1753         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1754                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1755                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1756
1757         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
1758                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1759                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
1760                         .withStatus(HttpStatus.SC_OK)));
1761
1762         wireMockServer.stubFor(
1763                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
1764                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1765                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
1766                                 .withStatus(HttpStatus.SC_OK)));
1767
1768         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
1769                 + "modelName=GR-API-DEFAULT&action=updateInstance"))
1770                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1771                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
1772                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1773         // expected response
1774         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1775         RequestReferences requestReferences = new RequestReferences();
1776         requestReferences.setInstanceId("1882939");
1777         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1778         expectedResponse.setRequestReferences(requestReferences);
1779         uri = servInstanceuri + "v7"
1780                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
1781         ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers);
1782
1783         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1784         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1785         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1786         assertTrue(response.getBody().contains("1882939"));
1787     }
1788
1789     @Test
1790     public void deleteNetworkInstance() throws IOException {
1791         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1792                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1793                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1794
1795         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
1796                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1797                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
1798                         .withStatus(HttpStatus.SC_OK)));
1799
1800         wireMockServer.stubFor(
1801                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
1802                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1803                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
1804                                 .withStatus(HttpStatus.SC_OK)));
1805
1806         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
1807                 + "modelName=VNF-API-DEFAULT&action=deleteInstance"))
1808                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1809                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
1810                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1811
1812         // expected response
1813         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1814         RequestReferences requestReferences = new RequestReferences();
1815         requestReferences.setInstanceId("1882939");
1816         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1817         expectedResponse.setRequestReferences(requestReferences);
1818         uri = servInstanceuri + "v7"
1819                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
1820         ResponseEntity<String> response =
1821                 sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers);
1822
1823         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1824         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1825         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1826     }
1827
1828     @Test
1829     public void deleteNetworkInstanceNoReqParams() throws IOException {
1830         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1831                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1832                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1833
1834         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
1835                 + "modelName=GR-API-DEFAULT&action=deleteInstance"))
1836                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1837                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
1838                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1839
1840
1841         // expected response
1842         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1843         RequestReferences requestReferences = new RequestReferences();
1844         requestReferences.setInstanceId("1882939");
1845         requestReferences.setRequestSelfLink(createExpectedSelfLink("v6", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1846         expectedResponse.setRequestReferences(requestReferences);
1847         uri = servInstanceuri + "v6"
1848                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
1849         ResponseEntity<String> response =
1850                 sendRequest(inputStream("/NetworkInstanceNoReqParams.json"), uri, HttpMethod.DELETE, headers);
1851
1852         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1853         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1854         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1855     }
1856
1857     @Test
1858     public void convertJsonToServiceInstanceRequestFail() throws IOException {
1859         // ExpectedRecord
1860         InfraActiveRequests expectedRecord = new InfraActiveRequests();
1861         expectedRecord.setRequestStatus("FAILED");
1862         expectedRecord.setStatusMessage("Error mapping request: ");
1863         expectedRecord.setProgress(100L);
1864         expectedRecord.setRequestBody(inputStream("/ConvertRequestFail.json"));
1865         expectedRecord.setLastModifiedBy("APIH");
1866         expectedRecord.setRequestScope("network");
1867         expectedRecord.setRequestAction("deleteInstance");
1868         expectedRecord.setRequestId("32807a28-1a14-4b88-b7b3-2950918aa76d");
1869
1870         uri = servInstanceuri + "v6"
1871                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
1872         ResponseEntity<String> response =
1873                 sendRequest(inputStream("/ConvertRequestFail.json"), uri, HttpMethod.DELETE, headers);
1874
1875         // ActualRecord
1876
1877         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
1878     }
1879
1880     @Test
1881     public void convertJsonToServiceInstanceRequestConfigurationFail() throws IOException {
1882         uri = servInstanceuri + "v5"
1883                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/configurations/test/enablePort";
1884         ResponseEntity<String> response = sendRequest(inputStream("/ConvertRequestFail.json"), uri, HttpMethod.POST);
1885
1886         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
1887     }
1888
1889     @Test
1890     public void creatServiceInstanceGRTestApiNoCustomRecipeFound() throws IOException {
1891         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1892                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1893                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1894
1895         ServiceRecipe serviceRecipe = new ServiceRecipe();
1896         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
1897         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
1898         serviceRecipe.setAction(Action.createInstance.toString());
1899         serviceRecipe.setId(1);
1900         serviceRecipe.setRecipeTimeout(180);
1901         Service defaultService = new Service();
1902         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
1903
1904         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
1905                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1906                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
1907
1908         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
1909                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1910                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
1911
1912         uri = servInstanceuri + "v7" + "/serviceInstances";
1913         ResponseEntity<String> response =
1914                 sendRequest(inputStream("/ServiceInstanceMacro.json"), uri, HttpMethod.POST, headers);
1915
1916         // expected response
1917         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1918         RequestReferences requestReferences = new RequestReferences();
1919         requestReferences.setInstanceId("1882939");
1920         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1921         expectedResponse.setRequestReferences(requestReferences);
1922
1923         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1924         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1925         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1926     }
1927
1928     @Test
1929     public void createNetworkInstanceTestApiUndefinedUsePropertiesDefault() throws IOException {
1930         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1931                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1932                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1933
1934         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
1935                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1936                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
1937                         .withStatus(HttpStatus.SC_OK)));
1938
1939         wireMockServer.stubFor(
1940                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
1941                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1942                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
1943                                 .withStatus(HttpStatus.SC_OK)));
1944
1945         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
1946                 + "modelName=GR-API-DEFAULT&action=createInstance"))
1947                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1948                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
1949                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
1950
1951         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
1952         ResponseEntity<String> response =
1953                 sendRequest(inputStream("/NetworkCreateAlternateInstanceName.json"), uri, HttpMethod.POST, headers);
1954
1955         // expected response
1956         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1957         RequestReferences requestReferences = new RequestReferences();
1958         requestReferences.setInstanceId("1882939");
1959         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
1960         expectedResponse.setRequestReferences(requestReferences);
1961
1962         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
1963         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
1964         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
1965     }
1966
1967     @Test
1968     public void createNetworkInstanceTestApiIncorrectUsePropertiesDefault() throws IOException {
1969         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1970                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1971                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1972
1973         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
1974         ResponseEntity<String> response =
1975                 sendRequest(inputStream("/NetworkCreateTestApiIncorrect.json"), uri, HttpMethod.POST);
1976
1977         // expected response
1978         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
1979         RequestReferences requestReferences = new RequestReferences();
1980         requestReferences.setInstanceId("1882939");
1981         expectedResponse.setRequestReferences(requestReferences);
1982
1983         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
1984     }
1985
1986     @Test
1987     public void createNetworkInstanceTestApiGrApi() throws IOException {
1988         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
1989                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1990                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
1991
1992         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
1993                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
1994                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
1995                         .withStatus(HttpStatus.SC_OK)));
1996
1997         wireMockServer.stubFor(
1998                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
1999                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2000                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
2001                                 .withStatus(HttpStatus.SC_OK)));
2002
2003         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
2004                 + "modelName=GR-API-DEFAULT&action=createInstance"))
2005                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2006                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
2007                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2008
2009         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
2010         ResponseEntity<String> response =
2011                 sendRequest(inputStream("/NetworkCreateTestApiGrApi.json"), uri, HttpMethod.POST, headers);
2012
2013         // expected response
2014         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2015         RequestReferences requestReferences = new RequestReferences();
2016         requestReferences.setInstanceId("1882939");
2017         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2018         expectedResponse.setRequestReferences(requestReferences);
2019
2020         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2021         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2022         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2023     }
2024
2025     @Test
2026     public void createNetworkInstanceTestApiVnfApi() throws IOException {
2027         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/CreateNetworkInstance"))
2028                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2029                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2030
2031         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
2032                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2033                         .withBody(getWiremockResponseForCatalogdb("networkResourceCustomization_Response.json"))
2034                         .withStatus(HttpStatus.SC_OK)));
2035
2036         wireMockServer.stubFor(
2037                 get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac/networkResource"))
2038                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2039                                 .withBody(getWiremockResponseForCatalogdb("networkResource_Response.json"))
2040                                 .withStatus(HttpStatus.SC_OK)));
2041
2042         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
2043                 + "modelName=VNF-API-DEFAULT&action=createInstance"))
2044                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2045                                 .withBody(getWiremockResponseForCatalogdb("networkRecipeVNF_API_Response.json"))
2046                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2047
2048         uri = servInstanceuri + "v7" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks";
2049         ResponseEntity<String> response =
2050                 sendRequest(inputStream("/NetworkCreateTestApiVnfApi.json"), uri, HttpMethod.POST, headers);
2051
2052         // expected response
2053         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2054         RequestReferences requestReferences = new RequestReferences();
2055         requestReferences.setInstanceId("1882939");
2056         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2057         expectedResponse.setRequestReferences(requestReferences);
2058
2059         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2060         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2061         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2062     }
2063
2064     @Test
2065     public void activateServiceInstanceRequestStatus() throws IOException {
2066         ServiceRecipe serviceRecipe = new ServiceRecipe();
2067         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2068         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2069         serviceRecipe.setAction(Action.createInstance.toString());
2070         serviceRecipe.setId(1);
2071         serviceRecipe.setRecipeTimeout(180);
2072         Service defaultService = new Service();
2073         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2074
2075         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2076                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2077                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2078
2079         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2080                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2081                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2082
2083         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2084                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2085                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2086
2087         // expect
2088         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2089         RequestReferences requestReferences = new RequestReferences();
2090         requestReferences.setInstanceId("1882939");
2091         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2092         expectedResponse.setRequestReferences(requestReferences);
2093         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7999/activate";
2094         ResponseEntity<String> response =
2095                 sendRequest(inputStream("/ServiceInstancePrev8.json"), uri, HttpMethod.POST, headers);
2096
2097         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2098         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2099         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2100     }
2101
2102     @Test
2103     public void invalidRequestId() throws IOException {
2104         String illegalRequestId = "1234";
2105         HttpHeaders ivalidRequestIdHeaders = new HttpHeaders();
2106         ivalidRequestIdHeaders.set(ONAPLogConstants.Headers.REQUEST_ID, illegalRequestId);
2107         uri = servInstanceuri + "v5/serviceInstances";
2108         ResponseEntity<String> response =
2109                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, ivalidRequestIdHeaders);
2110
2111         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2112         assertTrue(response.getBody().contains("Request Id " + illegalRequestId + " is not a valid UUID"));
2113     }
2114
2115     @Test
2116     public void invalidBPELResponse() throws IOException {
2117
2118         ServiceRecipe serviceRecipe = new ServiceRecipe();
2119         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2120         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2121         serviceRecipe.setAction(Action.createInstance.toString());
2122         serviceRecipe.setId(1);
2123         serviceRecipe.setRecipeTimeout(180);
2124         Service defaultService = new Service();
2125         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2126
2127         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB")).willReturn(aResponse()
2128                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2129                 .withBodyFile("Camunda/TestResponseInvalid2.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2130
2131         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2132                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2133                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2134
2135         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2136                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2137                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2138
2139         uri = servInstanceuri + "v5/serviceInstances";
2140         ResponseEntity<String> response =
2141                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2142
2143         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2144         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2145         assertEquals("Request Failed due to BPEL error with HTTP Status = 202{\"instanceId\": \"1882939\"}",
2146                 realResponse.getServiceException().getText());
2147     }
2148
2149     @Test
2150     public void unauthorizedBPELResponse() throws IOException {
2151
2152         ServiceRecipe serviceRecipe = new ServiceRecipe();
2153         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2154         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2155         serviceRecipe.setAction(Action.createInstance.toString());
2156         serviceRecipe.setId(1);
2157         serviceRecipe.setRecipeTimeout(180);
2158         Service defaultService = new Service();
2159         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2160
2161         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2162                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2163                         .withBodyFile("Camunda/UnauthorizedResponse.json")
2164                         .withStatus(org.apache.http.HttpStatus.SC_UNAUTHORIZED)));
2165
2166         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2167                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2168                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2169
2170         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2171                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2172                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2173
2174         uri = servInstanceuri + "v5/serviceInstances";
2175         ResponseEntity<String> response =
2176                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2177
2178         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2179         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2180         assertEquals("Exception caught mapping Camunda JSON response to object",
2181                 realResponse.getServiceException().getText());
2182     }
2183
2184     @Test
2185     public void invalidBPELResponse2() throws IOException {
2186
2187         ServiceRecipe serviceRecipe = new ServiceRecipe();
2188         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2189         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2190         serviceRecipe.setAction(Action.createInstance.toString());
2191         serviceRecipe.setId(1);
2192         serviceRecipe.setRecipeTimeout(180);
2193         Service defaultService = new Service();
2194         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2195
2196         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB")).willReturn(aResponse()
2197                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2198                 .withBodyFile("Camunda/TestResponseInvalid.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2199
2200         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2201                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2202                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2203
2204         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2205                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2206                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2207         uri = servInstanceuri + "v5/serviceInstances";
2208         ResponseEntity<String> response =
2209                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2210
2211         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2212         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2213         assertTrue(realResponse.getServiceException().getText()
2214                 .contains("<aetgt:ErrorMessage>Exception in create execution list 500"));
2215     }
2216
2217     @Test
2218     public void createMacroServiceInstance() throws IOException {
2219         ServiceRecipe serviceRecipe = new ServiceRecipe();
2220         serviceRecipe.setOrchestrationUri("/mso/async/services/CreateMacroServiceNetworkVnf");
2221         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2222         serviceRecipe.setAction(Action.createInstance.toString());
2223         serviceRecipe.setId(1);
2224         serviceRecipe.setRecipeTimeout(180);
2225         Service defaultService = new Service();
2226         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2227
2228         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/CreateMacroServiceNetworkVnf"))
2229                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2230                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2231
2232         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB")).willReturn(aResponse()
2233                 .withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2234                 .withBodyFile("Camunda/TestResponseInvalid.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2235
2236         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2237                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2238                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2239
2240         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2241                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2242                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2243
2244         // expect
2245         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2246         RequestReferences requestReferences = new RequestReferences();
2247         requestReferences.setInstanceId("1882939");
2248         requestReferences.setRequestSelfLink(createExpectedSelfLink("v5", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2249         expectedResponse.setRequestReferences(requestReferences);
2250         uri = servInstanceuri + "v5";
2251         ResponseEntity<String> response =
2252                 sendRequest(inputStream("/MacroServiceInstance.json"), uri, HttpMethod.POST, headers);
2253
2254         // then
2255         assertEquals(404, response.getStatusCode().value());
2256     }
2257
2258     @Test
2259     public void testUserParams() throws IOException {
2260         ObjectMapper mapper = new ObjectMapper();
2261         ServiceInstancesRequest request =
2262                 mapper.readValue(inputStream("/MacroServiceInstance.json"), ServiceInstancesRequest.class);
2263         RequestParameters requestParameters = request.getRequestDetails().getRequestParameters();
2264         String userParamsTxt = inputStream("/userParams.txt");
2265
2266         List<Map<String, Object>> userParams = servInstances.configureUserParams(requestParameters);
2267         System.out.println(userParams);
2268         assertTrue(userParams.size() > 0);
2269         assertTrue(userParams.get(0).containsKey("name"));
2270         assertTrue(userParams.get(0).containsKey("value"));
2271         assertEquals(userParamsTxt.replaceAll("\\s+", ""), userParams.toString().replaceAll("\\s+", ""));
2272     }
2273
2274     @Test
2275     public void testConfigureCloudConfig() throws IOException {
2276         ObjectMapper mapper = new ObjectMapper();
2277         ServiceInstancesRequest request =
2278                 mapper.readValue(inputStream("/MacroServiceInstance.json"), ServiceInstancesRequest.class);
2279         CloudConfiguration cloudConfig =
2280                 servInstances.configureCloudConfig(request.getRequestDetails().getRequestParameters());
2281
2282         assertEquals("mdt25b", cloudConfig.getLcpCloudRegionId());
2283         assertEquals("aefb697db6524ddebfe4915591b0a347", cloudConfig.getTenantId());
2284     }
2285
2286     @Test
2287     public void testMapToLegacyRequest() throws IOException {
2288         ObjectMapper mapper = new ObjectMapper();
2289         ServiceInstancesRequest request =
2290                 mapper.readValue(inputStream("/MacroServiceInstance.json"), ServiceInstancesRequest.class);
2291         ServiceInstancesRequest expected =
2292                 mapper.readValue(inputStream("/LegacyMacroServiceInstance.json"), ServiceInstancesRequest.class);
2293         servInstances.mapToLegacyRequest(request.getRequestDetails());
2294         System.out.println(mapper.writerWithDefaultPrettyPrinter().writeValueAsString(request));
2295         assertThat(request, sameBeanAs(expected));
2296     }
2297
2298     @Test
2299     public void scaleOutVfModule() throws IOException {
2300         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2301                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2302                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2303
2304         wireMockServer.stubFor(get(urlMatching(
2305                 ".*/vfModuleCustomization/search/findFirstByModelCustomizationUUIDOrderByCreatedDesc[?]MODEL_CUSTOMIZATION_UUID=cb82ffd8-252a-11e7-93ae-92361f002671"))
2306                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2307                                 .withBody(getWiremockResponseForCatalogdb("vfModuleCustomization_Response.json"))
2308                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2309
2310         wireMockServer.stubFor(get(urlMatching(".*/vfModuleCustomization/1/vfModule"))
2311                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2312                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
2313                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
2314
2315         wireMockServer.stubFor(get(urlMatching(".*/vfModule/20c4431c-246d-11e7-93ae-92361f002671"))
2316                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2317                         .withBody(getWiremockResponseForCatalogdb("vfModule_Response.json"))
2318                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
2319
2320
2321         wireMockServer.stubFor(get(urlMatching(
2322                 ".*/vnfComponentsRecipe/search/findFirstVnfComponentsRecipeByVfModuleModelUUIDAndVnfComponentTypeAndAction"
2323                         + "[?]vfModuleModelUUID=GR-API-DEFAULT&vnfComponentType=vfModule&action=scaleOut"))
2324                                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2325                                         .withBody(getWiremockResponseForCatalogdb(
2326                                                 "vnfComponentRecipeVfModuleScaleOut_Response.json"))
2327                                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
2328
2329         wireMockServer.stubFor(get(urlMatching(
2330                 ".*/vfModule/search/findByModelInvariantUUIDOrderByModelVersionDesc[?]modelInvariantUUID=78ca26d0-246d-11e7-93ae-92361f002671"))
2331                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2332                                 .withBody(getWiremockResponseForCatalogdb("vfModulesListByInvariantId_Response.json"))
2333                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2334
2335         // expected response
2336         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2337         RequestReferences requestReferences = new RequestReferences();
2338         requestReferences.setInstanceId("1882939");
2339         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2340         expectedResponse.setRequestReferences(requestReferences);
2341         uri = servInstanceuri + "v7"
2342                 + "/serviceInstances/7a88cbeb-0ec8-4765-a271-4f9e90c3da7b/vnfs/cbba721b-4803-4df7-9347-307c9a955426/vfModules/scaleOut";
2343         ResponseEntity<String> response =
2344                 sendRequest(inputStream("/ScaleOutRequest.json"), uri, HttpMethod.POST, headers);
2345
2346         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2347         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2348         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2349         assertTrue(response.getBody().contains("1882939"));
2350     }
2351
2352     @Test
2353     public void createServiceInstanceBadResponse() throws IOException {
2354         ServiceRecipe serviceRecipe = new ServiceRecipe();
2355         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2356         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2357         serviceRecipe.setAction(Action.createInstance.toString());
2358         serviceRecipe.setId(1);
2359         serviceRecipe.setRecipeTimeout(180);
2360         Service defaultService = new Service();
2361         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2362
2363         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2364                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2365                         .withBodyFile("Camunda/TestBadResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2366
2367         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2368                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2369                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2370
2371         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2372                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2373                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2374
2375         uri = servInstanceuri + "v5/serviceInstances";
2376         ResponseEntity<String> response =
2377                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2378
2379         assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatusCode().value());
2380         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2381         assertEquals("Exception caught mapping Camunda JSON response to object",
2382                 realResponse.getServiceException().getText());
2383     }
2384
2385     @Test
2386     public void createServiceInstanceDuplicateError() throws IOException {
2387         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
2388                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2389                         .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2390
2391         uri = servInstanceuri + "v5/serviceInstances";
2392         ResponseEntity<String> response =
2393                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2394
2395         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2396         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2397         assertEquals(
2398                 "Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2399                 realResponse.getServiceException().getText());
2400     }
2401
2402     @Test
2403     public void createServiceInstanceDuplicateHistoryCheck() throws IOException {
2404         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
2405                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2406                         .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json")
2407                         .withStatus(HttpStatus.SC_ACCEPTED)));
2408         wireMockServer.stubFor(get(
2409                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
2410                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2411                                 .withBodyFile("Camunda/HistoryCheckResponse.json")
2412                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2413
2414         uri = servInstanceuri + "v5/serviceInstances";
2415         ResponseEntity<String> response =
2416                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2417
2418         assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatusCode().value());
2419         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2420         assertEquals(
2421                 "Error: Locked instance - This service (testService9) already has a request being worked with a status of UNLOCKED (RequestId - f0a35706-efc4-4e27-80ea-a995d7a2a40f). The existing request must finish or be cleaned up before proceeding.",
2422                 realResponse.getServiceException().getText());
2423     }
2424
2425     @Test
2426     public void createServiceInstanceDuplicateHistoryCheckException() throws IOException {
2427         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
2428                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2429                         .withBodyFile("InfraActiveRequests/createInfraActiveRequests.json")
2430                         .withStatus(HttpStatus.SC_ACCEPTED)));
2431         wireMockServer.stubFor(get(
2432                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
2433                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2434                                 .withStatus(org.apache.http.HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2435
2436         uri = servInstanceuri + "v5/serviceInstances";
2437         ResponseEntity<String> response =
2438                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2439
2440         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2441         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2442         assertEquals(
2443                 "Unable to get process-instance history from Camunda for requestId: f0a35706-efc4-4e27-80ea-a995d7a2a40f due to error: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2444                 realResponse.getServiceException().getText());
2445     }
2446
2447     @Test
2448     public void createServiceInstanceDuplicate() throws IOException {
2449         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/checkInstanceNameDuplicate"))
2450                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2451                         .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2452
2453         uri = servInstanceuri + "v5/serviceInstances";
2454         ResponseEntity<String> response =
2455                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2456
2457         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2458         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2459         assertEquals(
2460                 "Unable to check for duplicate instance due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2461                 realResponse.getServiceException().getText());
2462     }
2463
2464     @Test
2465     public void createServiceInstanceSaveError() throws IOException {
2466         ServiceRecipe serviceRecipe = new ServiceRecipe();
2467         serviceRecipe.setOrchestrationUri("/mso/async/services/WorkflowActionBB");
2468         serviceRecipe.setServiceModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2469         serviceRecipe.setAction(Action.createInstance.toString());
2470         serviceRecipe.setId(1);
2471         serviceRecipe.setRecipeTimeout(180);
2472         Service defaultService = new Service();
2473         defaultService.setModelUUID("d88da85c-d9e8-4f73-b837-3a72a431622a");
2474         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/"))
2475                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2476                         .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2477         wireMockServer.stubFor(get(urlMatching(".*/service/.*"))
2478                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2479                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2480
2481         wireMockServer.stubFor(get(urlMatching(".*/serviceRecipe/search.*"))
2482                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2483                         .withBody(mapper.writeValueAsString(serviceRecipe)).withStatus(HttpStatus.SC_OK)));
2484
2485         uri = servInstanceuri + "v5/serviceInstances";
2486         ResponseEntity<String> response =
2487                 sendRequest(inputStream("/ServiceInstanceDefault.json"), uri, HttpMethod.POST, headers);
2488
2489         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2490         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2491         assertEquals(
2492                 "Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2493                 realResponse.getServiceException().getText());
2494     }
2495
2496     @Test
2497     public void createPortConfigurationSaveError() throws IOException {
2498         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/"))
2499                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2500                         .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2501         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/ALaCarteOrchestrator"))
2502                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2503                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2504
2505         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
2506         ResponseEntity<String> response =
2507                 sendRequest(inputStream("/ServiceInstancePortConfiguration.json"), uri, HttpMethod.POST, headers);
2508
2509         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2510         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2511         assertEquals(
2512                 "Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2513                 realResponse.getServiceException().getText());
2514     }
2515
2516     @Test
2517     public void createPortConfigDbUpdateError() throws IOException {
2518         wireMockServer.stubFor(post(urlMatching(".*/infraActiveRequests/"))
2519                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2520                         .withStatus(HttpStatus.SC_INTERNAL_SERVER_ERROR)));
2521
2522         uri = servInstanceuri + "v5" + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7968/configurations";
2523         ResponseEntity<String> response =
2524                 sendRequest(inputStream("/ServiceInstanceParseFail.json"), uri, HttpMethod.POST, headers);
2525
2526         assertEquals(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), response.getStatusCode().value());
2527         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2528         assertEquals(
2529                 "Unable to save instance to db due to error contacting requestDb: org.springframework.web.client.HttpServerErrorException$InternalServerError: 500 Server Error",
2530                 realResponse.getServiceException().getText());
2531     }
2532
2533     @Test
2534     public void vnfUpdateWithNetworkInstanceGroup() throws IOException {
2535         TestAppender.events.clear();
2536         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2537                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2538                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2539
2540         wireMockServer.stubFor(get(urlMatching(
2541                 ".*/vnfResourceCustomization/search/findByModelCustomizationUUID[?]MODEL_CUSTOMIZATION_UUID=2ccae1b4-7d9e-46fa-a452-9180ce008d17"))
2542                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2543                                 .withBody(getWiremockResponseForCatalogdb("vnfResourceCustomization_Response.json"))
2544                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2545
2546         wireMockServer.stubFor(get(urlMatching(".*/vnfResourceCustomization/4/vnfResources"))
2547                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2548                         .withBody(getWiremockResponseForCatalogdb("vnfResources_Response.json"))
2549                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
2550
2551         wireMockServer.stubFor(get(urlMatching(".*/vnfRecipe/search/findFirstVnfRecipeByNfRoleAndAction"
2552                 + "[?]nfRole=GR-API-DEFAULT&action=updateInstance"))
2553                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2554                                 .withBody(getWiremockResponseForCatalogdb("UpdateVnfRecipe_Response.json"))
2555                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2556         headers.set(ONAPLogConstants.Headers.PARTNER_NAME, "VID");
2557         // expect
2558         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2559         RequestReferences requestReferences = new RequestReferences();
2560         requestReferences.setInstanceId("1882939");
2561         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2562         expectedResponse.setRequestReferences(requestReferences);
2563         uri = servInstanceuri
2564                 + "v7/serviceInstances/e05864f0-ab35-47d0-8be4-56fd9619ba3c/vnfs/f501ce76-a9bc-4601-9837-74fd9f4d5eca";
2565         ResponseEntity<String> response =
2566                 sendRequest(inputStream("/VnfwithNeteworkInstanceGroup.json"), uri, HttpMethod.PUT, headers);
2567         // then
2568         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2569         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2570         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2571         assertEquals(response.getHeaders().get(TRANSACTION_ID).get(0), "32807a28-1a14-4b88-b7b3-2950918aa76d");
2572
2573         for (ILoggingEvent logEvent : TestAppender.events) {
2574             if (logEvent.getLoggerName().equals("org.onap.so.logging.jaxrs.filter.JaxRsFilterLogging")
2575                     && logEvent.getMarker() != null && logEvent.getMarker().getName().equals("ENTRY")) {
2576                 Map<String, String> mdc = logEvent.getMDCPropertyMap();
2577                 assertEquals("32807a28-1a14-4b88-b7b3-2950918aa76d", mdc.get(ONAPLogConstants.MDCs.REQUEST_ID));
2578                 assertEquals("VID", mdc.get(PARTNERNAME));
2579             }
2580         }
2581     }
2582
2583     @Test
2584     public void createInstanceGroup() throws IOException {
2585         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2586                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2587                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2588
2589         // expect
2590         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2591         RequestReferences requestReferences = new RequestReferences();
2592         requestReferences.setInstanceId("1882939");
2593         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2594         expectedResponse.setRequestReferences(requestReferences);
2595         uri = servInstanceuri + "/v7/instanceGroups";
2596         ResponseEntity<String> response =
2597                 sendRequest(inputStream("/CreateInstanceGroup.json"), uri, HttpMethod.POST, headers);
2598
2599         // then
2600         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2601         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2602         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2603     }
2604
2605     @Test
2606     public void deleteInstanceGroup() throws IOException {
2607         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2608                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2609                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2610
2611         // expect
2612         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2613         RequestReferences requestReferences = new RequestReferences();
2614         requestReferences.setInstanceId("1882939");
2615         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2616         expectedResponse.setRequestReferences(requestReferences);
2617         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
2618         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, headers);
2619
2620         // then
2621         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2622         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2623         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2624     }
2625
2626     @Test
2627     public void deleteInstanceGroupNoRequestIdHeader() throws IOException {
2628         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
2629         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE);
2630         // then
2631         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
2632         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2633         assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-RequestID header is specified");
2634     }
2635
2636     @Test
2637     public void deleteInstanceGroupNoPartnerNameHeader() throws IOException {
2638         HttpHeaders noPartnerHeaders = new HttpHeaders();
2639         noPartnerHeaders.set(ONAPLogConstants.Headers.REQUEST_ID, "eca3a1b1-43ab-457e-ab1c-367263d148b4");
2640         noPartnerHeaders.set(REQUESTOR_ID, "xxxxxx");
2641         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
2642         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noPartnerHeaders);
2643         // then
2644         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
2645         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2646         assertEquals(realResponse.getServiceException().getText(), "No valid X-ONAP-PartnerName header is specified");
2647     }
2648
2649     @Test
2650     public void deleteInstanceGroupNoRquestorIdHeader() throws IOException {
2651         HttpHeaders noRequestorIdHheaders = new HttpHeaders();
2652         noRequestorIdHheaders.set(ONAPLogConstants.Headers.REQUEST_ID, "eca3a1b1-43ab-457e-ab1c-367263d148b4");
2653         noRequestorIdHheaders.set(ONAPLogConstants.Headers.PARTNER_NAME, "eca3a1b1-43ab-457e-ab1c-367263d148b4");
2654         // expect
2655         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2656         RequestReferences requestReferences = new RequestReferences();
2657         requestReferences.setInstanceId("1882939");
2658         expectedResponse.setRequestReferences(requestReferences);
2659         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c";
2660         ResponseEntity<String> response = sendRequest(null, uri, HttpMethod.DELETE, noRequestorIdHheaders);
2661
2662         // then
2663         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
2664         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2665         assertEquals(realResponse.getServiceException().getText(), "No valid X-RequestorID header is specified");
2666     }
2667
2668     @Test
2669     public void addMembers() throws IOException {
2670         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2671                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2672                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2673         // expect
2674         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2675         RequestReferences requestReferences = new RequestReferences();
2676         requestReferences.setInstanceId("1882939");
2677         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2678         expectedResponse.setRequestReferences(requestReferences);
2679         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/addMembers";
2680         ResponseEntity<String> response = sendRequest(inputStream("/AddMembers.json"), uri, HttpMethod.POST, headers);
2681
2682         // then
2683         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2684         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2685         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2686     }
2687
2688     @Test
2689     public void removeMembers() throws IOException {
2690         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2691                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2692                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2693         // expect
2694         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2695         RequestReferences requestReferences = new RequestReferences();
2696         requestReferences.setInstanceId("1882939");
2697         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2698         expectedResponse.setRequestReferences(requestReferences);
2699         uri = servInstanceuri + "/v7/instanceGroups/e05864f0-ab35-47d0-8be4-56fd9619ba3c/removeMembers";
2700         ResponseEntity<String> response =
2701                 sendRequest(inputStream("/RemoveMembers.json"), uri, HttpMethod.POST, headers);
2702
2703         // then
2704         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2705         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2706         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2707     }
2708
2709     @Test
2710     public void deleteNetworkInstanceNoCustomizationEntry() throws IOException {
2711         wireMockServer.stubFor(post(urlPathEqualTo("/mso/async/services/WorkflowActionBB"))
2712                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2713                         .withBodyFile("Camunda/TestResponse.json").withStatus(org.apache.http.HttpStatus.SC_OK)));
2714
2715         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
2716                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2717                         .withStatus(HttpStatus.SC_NOT_FOUND)));
2718
2719         wireMockServer.stubFor(get(urlMatching(".*/networkRecipe/search/findFirstByModelNameAndAction[?]"
2720                 + "modelName=VNF-API-DEFAULT&action=deleteInstance"))
2721                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2722                                 .withBody(getWiremockResponseForCatalogdb("networkRecipe_Response.json"))
2723                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2724
2725         // expected response
2726         ServiceInstancesResponse expectedResponse = new ServiceInstancesResponse();
2727         RequestReferences requestReferences = new RequestReferences();
2728         requestReferences.setInstanceId("1882939");
2729         requestReferences.setRequestSelfLink(createExpectedSelfLink("v7", "32807a28-1a14-4b88-b7b3-2950918aa76d"));
2730         expectedResponse.setRequestReferences(requestReferences);
2731         uri = servInstanceuri + "v7"
2732                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
2733         ResponseEntity<String> response =
2734                 sendRequest(inputStream("/NetworkInstance.json"), uri, HttpMethod.DELETE, headers);
2735
2736         assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatusCode().value());
2737         ServiceInstancesResponse realResponse = mapper.readValue(response.getBody(), ServiceInstancesResponse.class);
2738         assertThat(realResponse, sameBeanAs(expectedResponse).ignoring("requestReferences.requestId"));
2739     }
2740
2741     @Test
2742     public void updateNetworkInstanceNoCustomizationEntry() throws IOException {
2743         wireMockServer.stubFor(get(urlMatching(".*/networkResourceCustomization/3bdbb104-476c-483e-9f8b-c095b3d308ac"))
2744                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2745                         .withStatus(HttpStatus.SC_NOT_FOUND)));
2746
2747         uri = servInstanceuri + "v7"
2748                 + "/serviceInstances/f7ce78bb-423b-11e7-93f8-0050569a7969/networks/1710966e-097c-4d63-afda-e0d3bb7015fb";
2749         ResponseEntity<String> response = sendRequest(inputStream("/UpdateNetwork.json"), uri, HttpMethod.PUT, headers);
2750
2751         assertEquals(Response.Status.BAD_REQUEST.getStatusCode(), response.getStatusCode().value());
2752         RequestError realResponse = errorMapper.readValue(response.getBody(), RequestError.class);
2753         assertEquals(realResponse.getServiceException().getText(),
2754                 "No valid modelCustomizationId for networkResourceCustomization lookup is specified");
2755     }
2756
2757     @Test
2758     public void setServiceTypeTestALaCarte() throws JsonProcessingException {
2759         String requestScope = ModelType.service.toString();
2760         Boolean aLaCarteFlag = true;
2761         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2762         RequestDetails requestDetails = new RequestDetails();
2763         RequestInfo requestInfo = new RequestInfo();
2764         requestInfo.setSource("VID");
2765         requestDetails.setRequestInfo(requestInfo);
2766         sir.setRequestDetails(requestDetails);
2767         Service defaultService = new Service();
2768         defaultService.setServiceType("testServiceTypeALaCarte");
2769
2770         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
2771                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2772                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2773
2774         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
2775         assertEquals(serviceType, "testServiceTypeALaCarte");
2776     }
2777
2778     @Test
2779     public void setServiceTypeTest() throws JsonProcessingException {
2780         String requestScope = ModelType.service.toString();
2781         Boolean aLaCarteFlag = false;
2782         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2783         RequestDetails requestDetails = new RequestDetails();
2784         RequestInfo requestInfo = new RequestInfo();
2785         ModelInfo modelInfo = new ModelInfo();
2786         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
2787         requestInfo.setSource("VID");
2788         requestDetails.setModelInfo(modelInfo);
2789         requestDetails.setRequestInfo(requestInfo);
2790         sir.setRequestDetails(requestDetails);
2791         Service defaultService = new Service();
2792         defaultService.setServiceType("testServiceType");
2793
2794         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
2795                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2796                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2797
2798         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
2799         assertEquals(serviceType, "testServiceType");
2800     }
2801
2802     @Test
2803     public void setServiceTypeTestDefault() throws JsonProcessingException {
2804         String requestScope = ModelType.service.toString();
2805         Boolean aLaCarteFlag = false;
2806         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2807         RequestDetails requestDetails = new RequestDetails();
2808         RequestInfo requestInfo = new RequestInfo();
2809         ModelInfo modelInfo = new ModelInfo();
2810         modelInfo.setModelVersionId("0dd91181-49da-446b-b839-cd959a96f04a");
2811         requestInfo.setSource("VID");
2812         requestDetails.setModelInfo(modelInfo);
2813         requestDetails.setRequestInfo(requestInfo);
2814         sir.setRequestDetails(requestDetails);
2815         Service defaultService = new Service();
2816         defaultService.setServiceType("testServiceType");
2817
2818         wireMockServer.stubFor(get(urlMatching(".*/service/0dd91181-49da-446b-b839-cd959a96f04a"))
2819                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2820                         .withStatus(HttpStatus.SC_NOT_FOUND)));
2821         wireMockServer.stubFor(get(urlMatching(".*/service/search/.*"))
2822                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2823                         .withBody(mapper.writeValueAsString(defaultService)).withStatus(HttpStatus.SC_OK)));
2824
2825         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
2826         assertEquals(serviceType, "testServiceType");
2827     }
2828
2829     @Test
2830     public void setServiceTypeTestNetwork() throws JsonProcessingException {
2831         String requestScope = ModelType.network.toString();
2832         Boolean aLaCarteFlag = null;
2833         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2834         RequestDetails requestDetails = new RequestDetails();
2835         RequestInfo requestInfo = new RequestInfo();
2836         ModelInfo modelInfo = new ModelInfo();
2837         modelInfo.setModelName("networkModelName");
2838         requestInfo.setSource("VID");
2839         requestDetails.setModelInfo(modelInfo);
2840         requestDetails.setRequestInfo(requestInfo);
2841         sir.setRequestDetails(requestDetails);
2842
2843         String serviceType = requestHandlerUtils.getServiceType(requestScope, sir, aLaCarteFlag);
2844         assertEquals(serviceType, "networkModelName");
2845     }
2846
2847     @Test
2848     public void setServiceInstanceIdInstanceGroupTest() throws JsonParseException, JsonMappingException, IOException {
2849         String requestScope = "instanceGroup";
2850         ServiceInstancesRequest sir =
2851                 mapper.readValue(inputStream("/CreateInstanceGroup.json"), ServiceInstancesRequest.class);
2852         assertEquals("ddcbbf3d-f2c1-4ca0-8852-76a807285efc",
2853                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
2854     }
2855
2856     @Test
2857     public void setServiceInstanceIdTest() {
2858         String requestScope = "vnf";
2859         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2860         sir.setServiceInstanceId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
2861         assertEquals("f0a35706-efc4-4e27-80ea-a995d7a2a40f",
2862                 requestHandlerUtils.setServiceInstanceId(requestScope, sir));
2863     }
2864
2865     @Test
2866     public void setServiceInstanceIdReturnNullTest() {
2867         String requestScope = "vnf";
2868         ServiceInstancesRequest sir = new ServiceInstancesRequest();
2869         assertNull(requestHandlerUtils.setServiceInstanceId(requestScope, sir));
2870     }
2871
2872     @Test
2873     public void camundaHistoryCheckTest() throws ContactCamundaException, RequestDbFailureException {
2874         wireMockServer.stubFor(get(
2875                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
2876                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2877                                 .withBodyFile("Camunda/HistoryCheckResponse.json")
2878                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2879
2880         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
2881         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
2882         boolean inProgress = false;
2883         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
2884         assertTrue(inProgress);
2885     }
2886
2887     @Test
2888     public void camundaHistoryCheckNoneFoundTest() throws ContactCamundaException, RequestDbFailureException {
2889         wireMockServer.stubFor(get(
2890                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
2891                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2892                                 .withBody("[]").withStatus(org.apache.http.HttpStatus.SC_OK)));
2893
2894         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
2895         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
2896         boolean inProgress = false;
2897         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
2898         assertFalse(inProgress);
2899     }
2900
2901     @Test
2902     public void camundaHistoryCheckNotInProgressTest() throws ContactCamundaException, RequestDbFailureException {
2903         wireMockServer.stubFor(get(
2904                 ("/sobpmnengine/history/process-instance?variables=mso-request-id_eq_f0a35706-efc4-4e27-80ea-a995d7a2a40f"))
2905                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
2906                                 .withBodyFile("Camunda/HistoryCheckResponseCompleted.json")
2907                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
2908
2909         InfraActiveRequests duplicateRecord = new InfraActiveRequests();
2910         duplicateRecord.setRequestId("f0a35706-efc4-4e27-80ea-a995d7a2a40f");
2911         boolean inProgress = false;
2912         inProgress = requestHandlerUtils.camundaHistoryCheck(duplicateRecord, null);
2913         assertFalse(inProgress);
2914     }
2915
2916     @Test
2917     public void handleReplaceInstance_Test() throws JsonParseException, JsonMappingException, IOException {
2918         String replaceVfModule = inputStream("/ReplaceVfModule.json");
2919         ObjectMapper mapper = new ObjectMapper();
2920         ServiceInstancesRequest sir = mapper.readValue(replaceVfModule, ServiceInstancesRequest.class);
2921         Actions action = servInstances.handleReplaceInstance(Action.replaceInstance, sir);
2922         assertEquals(Action.replaceInstance, action);
2923     }
2924
2925     @Test
2926     public void handleReplaceInstance_retainAssignments_Test()
2927             throws JsonParseException, JsonMappingException, IOException {
2928         String replaceVfModule = inputStream("/ReplaceVfModuleRetainAssignments.json");
2929         ObjectMapper mapper = new ObjectMapper();
2930         ServiceInstancesRequest sir = mapper.readValue(replaceVfModule, ServiceInstancesRequest.class);
2931         Actions action = servInstances.handleReplaceInstance(Action.replaceInstance, sir);
2932         assertEquals(Action.replaceInstanceRetainAssignments, action);
2933     }
2934 }
2935