552d2046c09dc2c485b3cc3afdb7b7210558727d
[so.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Modifications Copyright (c) 2020 Nordix
8  * ================================================================================
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  * ============LICENSE_END=========================================================
21  */
22
23 package org.onap.so.apihandlerinfra;
24
25 import com.fasterxml.jackson.databind.DeserializationFeature;
26 import com.fasterxml.jackson.databind.JsonMappingException;
27 import com.fasterxml.jackson.databind.ObjectMapper;
28 import org.json.JSONException;
29 import org.junit.Test;
30 import org.onap.so.apihandlerinfra.workflowspecificationbeans.WorkflowInputParameter;
31 import org.onap.so.apihandlerinfra.workflowspecificationbeans.WorkflowSpecifications;
32 import org.onap.so.db.catalog.beans.*;
33 import org.skyscreamer.jsonassert.JSONAssert;
34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.beans.factory.annotation.Value;
36 import org.springframework.http.HttpEntity;
37 import org.springframework.http.HttpHeaders;
38 import org.springframework.http.HttpMethod;
39 import org.springframework.http.ResponseEntity;
40 import org.springframework.util.ResourceUtils;
41 import org.springframework.web.util.UriComponentsBuilder;
42 import javax.ws.rs.core.MediaType;
43 import javax.ws.rs.core.Response;
44 import java.io.File;
45 import java.io.IOException;
46 import java.nio.file.Files;
47 import java.nio.file.Paths;
48 import java.util.ArrayList;
49 import java.util.List;
50 import static com.github.tomakehurst.wiremock.client.WireMock.*;
51 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
52 import static org.junit.Assert.assertEquals;
53 import static org.junit.Assert.assertThat;
54
55 public class WorkflowSpecificationsHandlerTest extends BaseTest {
56     @Autowired
57     WorkflowSpecificationsHandler workflowSpecificationsHandler;
58
59     @Autowired
60     ObjectMapper mapper;
61
62     @Value("${wiremock.server.port}")
63     private String wiremockPort;
64
65     private final String basePath = "/onap/so/infra/workflowSpecifications";
66
67     @Test
68     public void queryWorkflowSpecificationsByVnfModelUUID_Test_Success()
69             throws JSONException, JsonMappingException, IOException {
70
71         final String urlPath = basePath + "/v1/workflows";
72         HttpHeaders headers = new HttpHeaders();
73         headers.set("Accept", MediaType.APPLICATION_JSON);
74         headers.set("Content-Type", MediaType.APPLICATION_JSON);
75         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
76
77         wireMockServer.stubFor(get(urlMatching(
78                 "/workflow/search/findWorkflowByVnfModelUUID[?]vnfResourceModelUUID=b5fa707a-f55a-11e7-a796-005056856d52"))
79                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
80                                 .withBody(getWiremockResponseForCatalogdb("WorkflowSpecificationsQuery_Response.json"))
81                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
82
83         wireMockServer.stubFor(get(urlMatching("/workflow/1/workflowActivitySpecSequence"))
84                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
85                         .withBody(getWiremockResponseForCatalogdb("WorkflowActivitySpecSequence_Response.json"))
86                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
87
88         wireMockServer.stubFor(get(urlMatching("/workflowActivitySpecSequence/1/activitySpec"))
89                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
90                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecSequence1_Response.json"))
91                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
92
93         wireMockServer.stubFor(get(urlMatching("/workflowActivitySpecSequence/2/activitySpec"))
94                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
95                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecSequence2_Response.json"))
96                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
97
98         wireMockServer.stubFor(get(urlMatching("/workflowActivitySpecSequence/3/activitySpec"))
99                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
100                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecSequence3_Response.json"))
101                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
102
103         wireMockServer.stubFor(get(urlMatching("/activitySpec/1/activitySpecUserParameters"))
104                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
105                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecUserParameters1_Response.json"))
106                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
107
108         wireMockServer.stubFor(get(urlMatching("/activitySpec/2/activitySpecUserParameters"))
109                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
110                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecUserParameters2_Response.json"))
111                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
112
113         wireMockServer.stubFor(get(urlMatching("/activitySpec/3/activitySpecUserParameters"))
114                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
115                         .withBody(getWiremockResponseForCatalogdb("ActivitySpecUserParameters3_Response.json"))
116                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
117
118         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/1/userParameters"))
119                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
120                         .withBody(getWiremockResponseForCatalogdb("UserParameters1_Response.json"))
121                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
122
123         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/2/userParameters"))
124                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
125                         .withBody(getWiremockResponseForCatalogdb("UserParameters2_Response.json"))
126                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
127
128         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/3/userParameters"))
129                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
130                         .withBody(getWiremockResponseForCatalogdb("UserParameters3_Response.json"))
131                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
132
133         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/4/userParameters"))
134                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
135                         .withBody(getWiremockResponseForCatalogdb("UserParameters4_Response.json"))
136                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
137
138         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/5/userParameters"))
139                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
140                         .withBody(getWiremockResponseForCatalogdb("UserParameters5_Response.json"))
141                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
142
143         wireMockServer.stubFor(get(urlMatching("/activitySpecUserParameters/6/userParameters"))
144                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
145                         .withBody(getWiremockResponseForCatalogdb("UserParameters6_Response.json"))
146                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
147
148         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(urlPath))
149                 .queryParam("vnfModelVersionId", "b5fa707a-f55a-11e7-a796-005056856d52");
150
151         ResponseEntity<String> response =
152                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
153
154         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
155
156         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
157
158         WorkflowSpecifications expectedResponse = mapper.readValue(
159                 new String(Files
160                         .readAllBytes(Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecifications.json"))),
161                 WorkflowSpecifications.class);
162         WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
163
164         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
165         assertThat(expectedResponse, sameBeanAs(realResponse));
166         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
167         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
168         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
169         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
170     }
171
172     @Test
173     public void mapWorkflowsToWorkflowSpecifications_Test_Success() throws Exception {
174         List<Workflow> workflows = new ArrayList<>();
175         Workflow workflow = new Workflow();
176         workflow.setArtifactUUID("ab6478e4-ea33-3346-ac12-ab121484a333");
177         workflow.setArtifactName("inPlaceSoftwareUpdate-1_0.bpmn");
178         workflow.setVersion(1.0);
179         workflow.setDescription("xyz xyz");
180         workflow.setName("inPlaceSoftwareUpdate");
181         workflow.setOperationName("inPlaceSoftwareUpdate");
182         workflow.setSource("sdc");
183         workflow.setResourceTarget("vnf");
184
185         UserParameters userParameter1 = new UserParameters();
186         userParameter1.setLabel("Operations Timeout");
187         userParameter1.setType("text");
188         userParameter1.setIsRequried(true);
189         userParameter1.setMaxLength(50);
190         userParameter1.setAllowableChars("someRegEx");
191         userParameter1.setName("operations_timeout");
192         userParameter1.setPayloadLocation("userParams");
193
194         UserParameters userParameter2 = new UserParameters();
195         userParameter2.setLabel("Existing Software Version");
196         userParameter2.setType("text");
197         userParameter2.setIsRequried(true);
198         userParameter2.setMaxLength(50);
199         userParameter2.setAllowableChars("someRegEx");
200         userParameter2.setName("existing_software_version");
201         userParameter2.setPayloadLocation("userParams");
202
203         UserParameters userParameter3 = new UserParameters();
204         userParameter3.setLabel("Cloud Owner");
205         userParameter3.setType("text");
206         userParameter3.setIsRequried(true);
207         userParameter3.setMaxLength(7);
208         userParameter3.setAllowableChars("someRegEx");
209         userParameter3.setName("cloudOwner");
210         userParameter3.setPayloadLocation("cloudConfiguration");
211
212         UserParameters userParameter4 = new UserParameters();
213         userParameter4.setLabel("Tenant/Project ID");
214         userParameter4.setType("text");
215         userParameter4.setIsRequried(true);
216         userParameter4.setMaxLength(36);
217         userParameter4.setAllowableChars("someRegEx");
218         userParameter4.setName("tenantId");
219         userParameter4.setPayloadLocation("cloudConfiguration");
220
221         UserParameters userParameter5 = new UserParameters();
222         userParameter5.setLabel("New Software Version");
223         userParameter5.setType("text");
224         userParameter5.setIsRequried(true);
225         userParameter5.setMaxLength(50);
226         userParameter5.setAllowableChars("someRegEx");
227         userParameter5.setName("new_software_version");
228         userParameter5.setPayloadLocation("userParams");
229
230         UserParameters userParameter6 = new UserParameters();
231         userParameter6.setLabel("Cloud Region ID");
232         userParameter6.setType("text");
233         userParameter6.setIsRequried(true);
234         userParameter6.setMaxLength(7);
235         userParameter6.setAllowableChars("someRegEx");
236         userParameter6.setName("lcpCloudRegionId");
237         userParameter6.setPayloadLocation("cloudConfiguration");
238
239
240         List<ActivitySpecUserParameters> activitySpecUserParameters = new ArrayList<ActivitySpecUserParameters>();
241
242         ActivitySpecUserParameters activitySpecUserParameter1 = new ActivitySpecUserParameters();
243         activitySpecUserParameter1.setUserParameters(userParameter1);
244         activitySpecUserParameters.add(activitySpecUserParameter1);
245
246         ActivitySpecUserParameters activitySpecUserParameter2 = new ActivitySpecUserParameters();
247         activitySpecUserParameter2.setUserParameters(userParameter2);
248         activitySpecUserParameters.add(activitySpecUserParameter2);
249
250         ActivitySpecUserParameters activitySpecUserParameter3 = new ActivitySpecUserParameters();
251         activitySpecUserParameter3.setUserParameters(userParameter3);
252         activitySpecUserParameters.add(activitySpecUserParameter3);
253
254
255         ActivitySpecUserParameters activitySpecUserParameter4 = new ActivitySpecUserParameters();
256         activitySpecUserParameter4.setUserParameters(userParameter4);
257         activitySpecUserParameters.add(activitySpecUserParameter4);
258
259         ActivitySpecUserParameters activitySpecUserParameter5 = new ActivitySpecUserParameters();
260         activitySpecUserParameter5.setUserParameters(userParameter5);
261         activitySpecUserParameters.add(activitySpecUserParameter5);
262
263         ActivitySpecUserParameters activitySpecUserParameter6 = new ActivitySpecUserParameters();
264         activitySpecUserParameter6.setUserParameters(userParameter6);
265         activitySpecUserParameters.add(activitySpecUserParameter6);
266
267         List<WorkflowActivitySpecSequence> workflowActivitySpecSequences = new ArrayList<>();
268
269         ActivitySpec activitySpec1 = new ActivitySpec();
270         activitySpec1.setName("VNFQuiesceTrafficActivity");
271         activitySpec1.setDescription("Activity to QuiesceTraffic on VNF");
272         activitySpec1.setActivitySpecUserParameters(activitySpecUserParameters);
273         WorkflowActivitySpecSequence workflowActivitySpecSequence1 = new WorkflowActivitySpecSequence();
274         workflowActivitySpecSequence1.setActivitySpec(activitySpec1);
275         workflowActivitySpecSequences.add(workflowActivitySpecSequence1);
276
277         ActivitySpec activitySpec2 = new ActivitySpec();
278         activitySpec2.setName("VNFHealthCheckActivity");
279         activitySpec2.setDescription("Activity to HealthCheck VNF");
280         activitySpec2.setActivitySpecUserParameters(activitySpecUserParameters);
281         WorkflowActivitySpecSequence workflowActivitySpecSequence2 = new WorkflowActivitySpecSequence();
282         workflowActivitySpecSequence2.setActivitySpec(activitySpec2);
283         workflowActivitySpecSequences.add(workflowActivitySpecSequence2);
284
285         ActivitySpec activitySpec3 = new ActivitySpec();
286         activitySpec3.setName("FlowCompleteActivity");
287         activitySpec3.setDescription("Activity to Complete the BPMN Flow");
288         activitySpec3.setActivitySpecUserParameters(activitySpecUserParameters);
289         WorkflowActivitySpecSequence workflowActivitySpecSequence3 = new WorkflowActivitySpecSequence();
290         workflowActivitySpecSequence3.setActivitySpec(activitySpec3);
291         workflowActivitySpecSequences.add(workflowActivitySpecSequence3);
292
293         workflow.setWorkflowActivitySpecSequence(workflowActivitySpecSequences);
294         workflows.add(workflow);
295
296         Workflow workflowNative = new Workflow();
297         workflowNative.setArtifactUUID("da6478e4-ea33-3346-ac12-ab121284a333");
298         workflowNative.setArtifactName("VnfInPlaceUpdate.bpmn");
299         workflowNative.setVersion(1.0);
300         workflowNative.setDescription("native workflow");
301         workflowNative.setName("VnfInPlaceUpdate");
302         workflowNative.setOperationName("inPlaceSoftwareUpdate");
303         workflowNative.setSource("native");
304         workflowNative.setResourceTarget("vnf");
305         workflows.add(workflowNative);
306
307         WorkflowSpecifications workflowSpecifications =
308                 workflowSpecificationsHandler.mapWorkflowsToWorkflowSpecifications(workflows);
309
310         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
311         String workflowSpecificationsJson = mapper.writeValueAsString(workflowSpecifications);
312         WorkflowSpecifications expectedResult = mapper.readValue(
313                 new String(Files
314                         .readAllBytes(Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecifications.json"))),
315                 WorkflowSpecifications.class);
316         String expectedResultJson = mapper.writeValueAsString(expectedResult);
317
318         JSONAssert.assertEquals(expectedResultJson, workflowSpecificationsJson, false);
319         assertThat(expectedResult, sameBeanAs(workflowSpecifications).ignoring(WorkflowInputParameter.class));
320     }
321
322     @Test
323     public void queryWorkflowSpecificationsByPnfModelUUID_Test_Success() throws JSONException, IOException {
324
325         final String urlPath = basePath + "/v1/workflows";
326         HttpHeaders headers = new HttpHeaders();
327         headers.set("Accept", MediaType.APPLICATION_JSON);
328         headers.set("Content-Type", MediaType.APPLICATION_JSON);
329         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
330
331         wireMockServer.stubFor(get(urlMatching(
332                 "/workflow/search/findWorkflowByPnfModelUUID[?]pnfResourceModelUUID=f2d1f2b2-88bb-49da-b716-36ae420ccbff"))
333                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
334                                 .withBody(getWiremockResponseForCatalogdb(
335                                         "WorkflowSpecificationsForPnfQuery_Response.json"))
336                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
337
338         wireMockServer.stubFor(get(urlMatching("/workflow/4/workflowActivitySpecSequence"))
339                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
340                         .withBody(getWiremockResponseForCatalogdb("Empty_workflowActivitySpecSequence_Response.json"))
341                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
342
343         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(urlPath))
344                 .queryParam("pnfModelVersionId", "f2d1f2b2-88bb-49da-b716-36ae420ccbff");
345
346         ResponseEntity<String> response =
347                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
348
349         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
350
351         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
352
353         WorkflowSpecifications expectedResponse = mapper.readValue(
354                 new String(Files.readAllBytes(
355                         Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json"))),
356                 WorkflowSpecifications.class);
357         WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
358
359         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
360         assertThat(expectedResponse, sameBeanAs(realResponse));
361         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
362         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
363         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
364         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
365     }
366
367     @Test
368     public void queryWorkflowSpecificationsByResourceTarget_Test_Success() throws JSONException, IOException {
369
370         String URL_PATH = basePath + "/v1/workflows";
371         HttpHeaders headers = new HttpHeaders();
372         headers.set("Accept", MediaType.APPLICATION_JSON);
373         headers.set("Content-Type", MediaType.APPLICATION_JSON);
374         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
375         String WORKFLOW_QUERY = "/workflow/search/findByResourceTarget[?]resourceTarget=service";
376         String WORKFLOW_SPEC_QUERY = "/workflow/5/workflowActivitySpecSequence";
377         String JSON_FILE_PATH = "src/test/resources/__files/catalogdb/WorkflowSpecificationsForService.json";
378         String MOCK_RESP_FILE = "WorkflowSpecificationsForServiceWorkflows_Response.json";
379         String MOCK_RESP_SPEC_FILE = "Empty_workflowActivitySpecSequence_Response.json";
380
381         wireMockServer.stubFor(get(urlMatching(WORKFLOW_QUERY))
382                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
383                         .withBody(getWiremockResponseForCatalogdb(MOCK_RESP_FILE))
384                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
385
386         wireMockServer.stubFor(get(urlMatching(WORKFLOW_SPEC_QUERY))
387                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
388                         .withBody(getWiremockResponseForCatalogdb(MOCK_RESP_SPEC_FILE))
389                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
390
391         UriComponentsBuilder builder =
392                 UriComponentsBuilder.fromHttpUrl(createURLWithPort(URL_PATH)).queryParam("resourceTarget", "service");
393
394         ResponseEntity<String> response =
395                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
396
397         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
398
399         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
400
401         WorkflowSpecifications expectedResponse = mapper
402                 .readValue(new String(Files.readAllBytes(Paths.get(JSON_FILE_PATH))), WorkflowSpecifications.class);
403         WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
404
405         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
406         assertThat(expectedResponse, sameBeanAs(realResponse));
407         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
408         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
409         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
410         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
411     }
412
413     @Test
414     public void testWorkflowSpecificationsForPnf_Success() throws JSONException, IOException {
415
416         final String urlPath = basePath + "/v1/pnfWorkflows";
417         HttpHeaders headers = new HttpHeaders();
418         headers.set("Accept", MediaType.APPLICATION_JSON);
419         headers.set("Content-Type", MediaType.APPLICATION_JSON);
420         HttpEntity<String> entity = new HttpEntity(null, headers);
421
422         wireMockServer.stubFor(get(urlMatching("/workflow/search/findByResourceTarget[?]resourceTarget=pnf"))
423                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
424                         .withBody(
425                                 getWiremockResponseForCatalogdb("WorkflowSpecificationsForPnfWorkflows_Response.json"))
426                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
427
428         wireMockServer.stubFor(get(urlMatching("/infraActiveRequests.*"))
429                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
430                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
431
432         wireMockServer.stubFor(get(urlMatching("/workflow/1/workflowActivitySpecSequence"))
433                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
434                         .withBody(getWiremockResponseForCatalogdb("Empty_workflowActivitySpecSequence_Response.json"))
435                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
436
437         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(urlPath));
438
439         ResponseEntity<String> response =
440                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
441
442         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
443
444         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
445
446         WorkflowSpecifications expectedResponse = mapper.readValue(
447                 new String(Files.readAllBytes(
448                         Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecificationsForPnf.json"))),
449                 WorkflowSpecifications.class);
450         WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
451
452         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
453         assertThat(expectedResponse, sameBeanAs(realResponse));
454         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
455         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
456         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
457         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
458     }
459
460     private String getWiremockResponseForCatalogdb(String file) {
461         try {
462             File resource = ResourceUtils.getFile("classpath:__files/catalogdb/" + file);
463             return new String(Files.readAllBytes(resource.toPath())).replaceAll("localhost:8090",
464                     "localhost:" + wiremockPort);
465         } catch (IOException e) {
466             e.printStackTrace();
467             return null;
468         }
469     }
470 }