Query CatalogDB for WorkflowSpecifications
[so.git] / mso-api-handlers / mso-api-handler-infra / src / test / java / org / onap / so / apihandlerinfra / WorkflowSpecificationsHandlerTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
4  * ================================================================================
5  * Copyright (C) 2019 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 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;
24 import static com.github.tomakehurst.wiremock.client.WireMock.get;
25 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;
26 import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
27 import static org.junit.Assert.assertEquals;
28 import static org.junit.Assert.assertThat;
29 import java.io.File;
30 import java.io.IOException;
31 import java.nio.file.Files;
32 import java.nio.file.Paths;
33 import java.text.ParseException;
34 import java.util.ArrayList;
35 import java.util.List;
36 import javax.ws.rs.core.MediaType;
37 import javax.ws.rs.core.Response;
38 import org.json.JSONException;
39 import org.junit.Test;
40 import org.onap.so.apihandlerinfra.workflowspecificationbeans.WorkflowInputParameter;
41 import org.onap.so.apihandlerinfra.workflowspecificationbeans.WorkflowSpecifications;
42 import org.onap.so.db.catalog.beans.ActivitySpec;
43 import org.onap.so.db.catalog.beans.ActivitySpecUserParameters;
44 import org.onap.so.db.catalog.beans.UserParameters;
45 import org.onap.so.db.catalog.beans.Workflow;
46 import org.onap.so.db.catalog.beans.WorkflowActivitySpecSequence;
47 import org.skyscreamer.jsonassert.JSONAssert;
48 import org.springframework.beans.factory.annotation.Autowired;
49 import org.springframework.beans.factory.annotation.Value;
50 import org.springframework.http.HttpEntity;
51 import org.springframework.http.HttpHeaders;
52 import org.springframework.http.HttpMethod;
53 import org.springframework.http.ResponseEntity;
54 import org.springframework.util.ResourceUtils;
55 import org.springframework.web.util.UriComponentsBuilder;
56 import com.fasterxml.jackson.core.JsonParseException;
57 import com.fasterxml.jackson.databind.DeserializationFeature;
58 import com.fasterxml.jackson.databind.JsonMappingException;
59 import com.fasterxml.jackson.databind.ObjectMapper;
60
61 public class WorkflowSpecificationsHandlerTest extends BaseTest {
62     @Autowired
63     WorkflowSpecificationsHandler workflowSpecificationsHandler;
64
65     @Value("${wiremock.server.port}")
66     private String wiremockPort;
67
68     private final String basePath = "onap/so/infra/workflowSpecifications/v1/workflows";
69
70     @Test
71     public void queryWorkflowSpecifications_Test_Success()
72             throws ParseException, JSONException, JsonParseException, JsonMappingException, IOException {
73
74         HttpHeaders headers = new HttpHeaders();
75         headers.set("Accept", MediaType.APPLICATION_JSON);
76         headers.set("Content-Type", MediaType.APPLICATION_JSON);
77         HttpEntity<String> entity = new HttpEntity<String>(null, headers);
78
79         wireMockServer.stubFor(get(urlMatching(
80                 "/workflow/search/findWorkflowByModelUUID[?]vnfResourceModelUUID=b5fa707a-f55a-11e7-a796-005056856d52"))
81                         .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
82                                 .withBody(getWiremockResponseForCatalogdb("WorkflowSpecificationsQuery_Response.json"))
83                                 .withStatus(org.apache.http.HttpStatus.SC_OK)));
84
85         wireMockServer.stubFor(get(urlMatching("/workflow/1/workflowActivitySpecSequence"))
86                 .willReturn(aResponse().withHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
87                         .withBody(getWiremockResponseForCatalogdb("WorkflowActivitySpecSequence_Response.json"))
88                         .withStatus(org.apache.http.HttpStatus.SC_OK)));
89
90         UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(createURLWithPort(basePath))
91                 .queryParam("vnfModelVersionId", "b5fa707a-f55a-11e7-a796-005056856d52");
92
93         ResponseEntity<String> response =
94                 restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class);
95
96         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
97
98         ObjectMapper mapper = new ObjectMapper();
99         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
100
101         WorkflowSpecifications expectedResponse = mapper.readValue(
102                 new String(Files
103                         .readAllBytes(Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecifications.json"))),
104                 WorkflowSpecifications.class);
105         WorkflowSpecifications realResponse = mapper.readValue(response.getBody(), WorkflowSpecifications.class);
106
107         assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value());
108         assertThat(expectedResponse, sameBeanAs(realResponse));
109         assertEquals("application/json", response.getHeaders().get(HttpHeaders.CONTENT_TYPE).get(0));
110         assertEquals("0", response.getHeaders().get("X-MinorVersion").get(0));
111         assertEquals("0", response.getHeaders().get("X-PatchVersion").get(0));
112         assertEquals("1.0.0", response.getHeaders().get("X-LatestVersion").get(0));
113     }
114
115     @Test
116     public void mapWorkflowsToWorkflowSpecifications_Test_Success() throws Exception {
117         List<Workflow> workflows = new ArrayList<Workflow>();
118         Workflow workflow = new Workflow();
119         workflow.setArtifactUUID("ab6478e4-ea33-3346-ac12-ab121484a333");
120         workflow.setArtifactName("inPlaceSoftwareUpdate-1_0.bpmn");
121         workflow.setVersion(1.0);
122         workflow.setDescription("xyz xyz");
123         workflow.setName("inPlaceSoftwareUpdate");
124         workflow.setOperationName("inPlaceSoftwareUpdate");
125         workflow.setSource("sdc");
126         workflow.setResourceTarget("vnf");
127
128         UserParameters userParameter1 = new UserParameters();
129         userParameter1.setLabel("Operations Timeout");
130         userParameter1.setType("text");
131         userParameter1.setIsRequried(true);
132         userParameter1.setMaxLength(50);
133         userParameter1.setAllowableChars("someRegEx");
134         userParameter1.setName("operations_timeout");
135         userParameter1.setPayloadLocation("userParams");
136
137         UserParameters userParameter2 = new UserParameters();
138         userParameter2.setLabel("Existing Software Version");
139         userParameter2.setType("text");
140         userParameter2.setIsRequried(true);
141         userParameter2.setMaxLength(50);
142         userParameter2.setAllowableChars("someRegEx");
143         userParameter2.setName("existing_software_version");
144         userParameter2.setPayloadLocation("userParams");
145
146         UserParameters userParameter3 = new UserParameters();
147         userParameter3.setLabel("Cloud Owner");
148         userParameter3.setType("text");
149         userParameter3.setIsRequried(true);
150         userParameter3.setMaxLength(7);
151         userParameter3.setAllowableChars("someRegEx");
152         userParameter3.setName("cloudOwner");
153         userParameter3.setPayloadLocation("cloudConfiguration");
154
155         UserParameters userParameter4 = new UserParameters();
156         userParameter4.setLabel("Tenant/Project ID");
157         userParameter4.setType("text");
158         userParameter4.setIsRequried(true);
159         userParameter4.setMaxLength(36);
160         userParameter4.setAllowableChars("someRegEx");
161         userParameter4.setName("tenantId");
162         userParameter4.setPayloadLocation("cloudConfiguration");
163
164         UserParameters userParameter5 = new UserParameters();
165         userParameter5.setLabel("New Software Version");
166         userParameter5.setType("text");
167         userParameter5.setIsRequried(true);
168         userParameter5.setMaxLength(50);
169         userParameter5.setAllowableChars("someRegEx");
170         userParameter5.setName("new_software_version");
171         userParameter5.setPayloadLocation("userParams");
172
173         UserParameters userParameter6 = new UserParameters();
174         userParameter6.setLabel("Cloud Region ID");
175         userParameter6.setType("text");
176         userParameter6.setIsRequried(true);
177         userParameter6.setMaxLength(7);
178         userParameter6.setAllowableChars("someRegEx");
179         userParameter6.setName("lcpCloudRegionId");
180         userParameter6.setPayloadLocation("cloudConfiguration");
181
182
183         List<ActivitySpecUserParameters> activitySpecUserParameters = new ArrayList<ActivitySpecUserParameters>();
184
185         ActivitySpecUserParameters activitySpecUserParameter1 = new ActivitySpecUserParameters();
186         activitySpecUserParameter1.setUserParameters(userParameter1);
187         activitySpecUserParameters.add(activitySpecUserParameter1);
188
189         ActivitySpecUserParameters activitySpecUserParameter2 = new ActivitySpecUserParameters();
190         activitySpecUserParameter2.setUserParameters(userParameter2);
191         activitySpecUserParameters.add(activitySpecUserParameter2);
192
193         ActivitySpecUserParameters activitySpecUserParameter3 = new ActivitySpecUserParameters();
194         activitySpecUserParameter3.setUserParameters(userParameter3);
195         activitySpecUserParameters.add(activitySpecUserParameter3);
196
197
198         ActivitySpecUserParameters activitySpecUserParameter4 = new ActivitySpecUserParameters();
199         activitySpecUserParameter4.setUserParameters(userParameter4);
200         activitySpecUserParameters.add(activitySpecUserParameter4);
201
202         ActivitySpecUserParameters activitySpecUserParameter5 = new ActivitySpecUserParameters();
203         activitySpecUserParameter5.setUserParameters(userParameter5);
204         activitySpecUserParameters.add(activitySpecUserParameter5);
205
206         ActivitySpecUserParameters activitySpecUserParameter6 = new ActivitySpecUserParameters();
207         activitySpecUserParameter6.setUserParameters(userParameter6);
208         activitySpecUserParameters.add(activitySpecUserParameter6);
209
210         List<WorkflowActivitySpecSequence> workflowActivitySpecSequences =
211                 new ArrayList<WorkflowActivitySpecSequence>();
212
213         ActivitySpec activitySpec1 = new ActivitySpec();
214         activitySpec1.setName("VNFQuiesceTrafficActivity");
215         activitySpec1.setDescription("Activity to QuiesceTraffic on VNF");
216         activitySpec1.setActivitySpecUserParameters(activitySpecUserParameters);
217         WorkflowActivitySpecSequence workflowActivitySpecSequence1 = new WorkflowActivitySpecSequence();
218         workflowActivitySpecSequence1.setActivitySpec(activitySpec1);
219         workflowActivitySpecSequences.add(workflowActivitySpecSequence1);
220
221         ActivitySpec activitySpec2 = new ActivitySpec();
222         activitySpec2.setName("VNFHealthCheckActivity");
223         activitySpec2.setDescription("Activity to HealthCheck VNF");
224         activitySpec2.setActivitySpecUserParameters(activitySpecUserParameters);
225         WorkflowActivitySpecSequence workflowActivitySpecSequence2 = new WorkflowActivitySpecSequence();
226         workflowActivitySpecSequence2.setActivitySpec(activitySpec2);
227         workflowActivitySpecSequences.add(workflowActivitySpecSequence2);
228
229         ActivitySpec activitySpec3 = new ActivitySpec();
230         activitySpec3.setName("FlowCompleteActivity");
231         activitySpec3.setDescription("Activity to Complete the BPMN Flow");
232         activitySpec3.setActivitySpecUserParameters(activitySpecUserParameters);
233         WorkflowActivitySpecSequence workflowActivitySpecSequence3 = new WorkflowActivitySpecSequence();
234         workflowActivitySpecSequence3.setActivitySpec(activitySpec3);
235         workflowActivitySpecSequences.add(workflowActivitySpecSequence3);
236
237         workflow.setWorkflowActivitySpecSequence(workflowActivitySpecSequences);
238         workflows.add(workflow);
239
240         WorkflowSpecifications workflowSpecifications =
241                 workflowSpecificationsHandler.mapWorkflowsToWorkflowSpecifications(workflows);
242         ObjectMapper mapper = new ObjectMapper();
243
244         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
245         String workflowSpecificationsJson = mapper.writeValueAsString(workflowSpecifications);
246         WorkflowSpecifications expectedResult = mapper.readValue(
247                 new String(Files
248                         .readAllBytes(Paths.get("src/test/resources/__files/catalogdb/WorkflowSpecifications.json"))),
249                 WorkflowSpecifications.class);
250         String expectedResultJson = mapper.writeValueAsString(expectedResult);
251
252         JSONAssert.assertEquals(expectedResultJson, workflowSpecificationsJson, false);
253         assertThat(expectedResult, sameBeanAs(workflowSpecifications).ignoring(WorkflowInputParameter.class));
254     }
255
256     private String getWiremockResponseForCatalogdb(String file) {
257         try {
258             File resource = ResourceUtils.getFile("classpath:__files/catalogdb/" + file);
259             return new String(Files.readAllBytes(resource.toPath())).replaceAll("localhost:8090",
260                     "localhost:" + wiremockPort);
261         } catch (IOException e) {
262             e.printStackTrace();
263             return null;
264         }
265     }
266 }