c0482a52ca4acf43ccf57a7b70a220fcd8d23e55
[so.git] / bpmn / mso-infrastructure-bpmn / src / test / java / org / onap / so / bpmn / common / VnfAdapterRestV1IT.java
1 /*- 
2  * ============LICENSE_START=======================================================
3  * ONAP - SO 
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. 
6  * ================================================================================
7  * Modifications Copyright (c) 2019 Samsung
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.bpmn.common;
24
25 import static org.junit.Assert.assertFalse;
26 import static org.junit.Assert.assertNotNull;
27 import static org.junit.Assert.assertTrue;
28 import static org.onap.so.bpmn.mock.StubResponseVNFAdapter.mockVNFDelete;
29 import static org.onap.so.bpmn.mock.StubResponseVNFAdapter.mockVNFPost;
30 import static org.onap.so.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;
31 import static org.onap.so.bpmn.mock.StubResponseVNFAdapter.mockVNFRollbackDelete;
32
33 import java.io.IOException;
34 import java.util.HashMap;
35 import java.util.Map;
36 import java.util.UUID;
37
38 import org.camunda.bpm.engine.test.Deployment;
39 import org.junit.Ignore;
40 import org.junit.Test;
41 import org.onap.so.BaseIntegrationTest;
42 import org.onap.so.bpmn.core.WorkflowException;
43 import org.slf4j.Logger;
44 import org.slf4j.LoggerFactory;
45
46 /**
47  * Unit tests for VnfAdapterRestV1.
48  */
49
50 public class VnfAdapterRestV1IT extends BaseIntegrationTest {
51         
52         Logger logger = LoggerFactory.getLogger(VnfAdapterRestV1IT.class);
53         
54
55         private static final String EOL = "\n";
56
57         private final CallbackSet callbacks = new CallbackSet();
58
59         private final String CREATE_VF_MODULE_REQUEST =
60                 "<createVfModuleRequest>" + EOL +
61                 "  <cloudSiteId>cloudSiteId</cloudSiteId>" + EOL +
62                 "  <cloudOwner>cloudOwner</cloudOwner>" + EOL +
63                 "  <tenantId>tenantId</tenantId>" + EOL +
64                 "  <vnfId>vnfId</vnfId>" + EOL +
65                 "  <vfModuleName>vfModuleName</vfModuleName>" + EOL +
66                 "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
67                 "  <vnfType>vnfType</vnfType>" + EOL +
68                 "  <vnfVersion>vnfVersion</vnfVersion>" + EOL +
69                 "  <vfModuleType>vfModuleType</vfModuleType>" + EOL +
70                 "  <volumeGroupId>volumeGroupId</volumeGroupId>" + EOL +
71                 "  <volumeGroupStackId>volumeGroupStackId</volumeGroupStackId>" + EOL +
72                 "  <baseVfModuleId>baseVfModuleId</baseVfModuleId>" + EOL +
73                 "  <baseVfModuleStackId>baseVfModuleStackId</baseVfModuleStackId>" + EOL +
74                 "  <skipAAI>true</skipAAI>" + EOL +
75                 "  <backout>false</backout>" + EOL +
76                 "  <failIfExists>true</failIfExists>" + EOL +
77                 "  <vfModuleParams>" + EOL +
78                 "    <entry>" + EOL +
79                 "      <key>key1</key>" + EOL +
80                 "      <value>value1</value>" + EOL +
81                 "    </entry>" + EOL +
82                 "    <entry>" + EOL +
83                 "      <key>key2</key>" + EOL +
84                 "      <value>value2</value>" + EOL +
85                 "    </entry>" + EOL +
86                 "  </vfModuleParams>" + EOL +
87                 "  <msoRequest>" + EOL +
88                 "    <requestId>requestId</requestId>" + EOL +
89                 "    <serviceInstanceId>serviceInstanceId</serviceInstanceId>" + EOL +
90                 "  </msoRequest>" + EOL +
91                 "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
92                 "  <notificationUrl>http://localhost:28080/mso/WorkflowMessage</notificationUrl>" + EOL +
93                 "</createVfModuleRequest>" + EOL;
94
95         private final String UPDATE_VF_MODULE_REQUEST =
96                 "<updateVfModuleRequest>" + EOL +
97                 "  <cloudSiteId>cloudSiteId</cloudSiteId>" + EOL +
98                 "  <cloudOwner>cloudOwner</cloudOwner>" + EOL +
99                 "  <tenantId>tenantId</tenantId>" + EOL +
100                 "  <vnfId>vnfId</vnfId>" + EOL +
101                 "  <vfModuleName>vfModuleName</vfModuleName>" + EOL +
102                 "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
103                 "  <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
104                 "  <vnfType>vnfType</vnfType>" + EOL +
105                 "  <vnfVersion>vnfVersion</vnfVersion>" + EOL +
106                 "  <vfModuleType>vfModuleType</vfModuleType>" + EOL +
107                 "  <volumeGroupId>volumeGroupId</volumeGroupId>" + EOL +
108                 "  <volumeGroupStackId>volumeGroupStackId</volumeGroupStackId>" + EOL +
109                 "  <baseVfModuleId>baseVfModuleId</baseVfModuleId>" + EOL +
110                 "  <baseVfModuleStackId>baseVfModuleStackId</baseVfModuleStackId>" + EOL +
111                 "  <skipAAI>true</skipAAI>" + EOL +
112                 "  <backout>false</backout>" + EOL +
113                 "  <failIfExists>true</failIfExists>" + EOL +
114                 "  <vfModuleParams>" + EOL +
115                 "    <entry>" + EOL +
116                 "      <key>key1</key>" + EOL +
117                 "      <value>value1</value>" + EOL +
118                 "    </entry>" + EOL +
119                 "    <entry>" + EOL +
120                 "      <key>key2</key>" + EOL +
121                 "      <value>value2</value>" + EOL +
122                 "    </entry>" + EOL +
123                 "  </vfModuleParams>" + EOL +
124                 "  <msoRequest>" + EOL +
125                 "    <requestId>requestId</requestId>" + EOL +
126                 "    <serviceInstanceId>serviceInstanceId</serviceInstanceId>" + EOL +
127                 "  </msoRequest>" + EOL +
128                 "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
129                 "  <notificationUrl>http://localhost:28080/mso/WorkflowMessage</notificationUrl>" + EOL +
130                 "</updateVfModuleRequest>" + EOL;
131
132         private final String DELETE_VF_MODULE_REQUEST =
133                 "<deleteVfModuleRequest>" + EOL +
134                 "  <cloudSiteId>cloudSiteId</cloudSiteId>" + EOL +
135                 "  <cloudOwner>cloudOwner</cloudOwner>" + EOL +
136                 "  <tenantId>tenantId</tenantId>" + EOL +
137                 "  <vnfId>vnfId</vnfId>" + EOL +
138                 "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
139                 "  <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
140                 "  <skipAAI>true</skipAAI>" + EOL +
141                 "  <msoRequest>" + EOL +
142                 "    <requestId>requestId</requestId>" + EOL +
143                 "    <serviceInstanceId>serviceInstanceId</serviceInstanceId>" + EOL +
144                 "  </msoRequest>" + EOL +
145                 "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
146                 "  <notificationUrl>http://localhost:28080/mso/WorkflowMessage</notificationUrl>" + EOL +
147                 "</deleteVfModuleRequest>" + EOL;
148
149         private final String ROLLBACK_VF_MODULE_REQUEST =
150                         "<rollbackVfModuleRequest>" + EOL +
151                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
152                         "  <notificationUrl>http://localhost:28080/mso/WorkflowMessage</notificationUrl>" + EOL +
153                         "  <skipAAI>true</skipAAI>" + EOL +
154                         "  <vfModuleRollback>" + EOL +
155                         "    <cloudSiteId>cloudSiteId</cloudSiteId>" + EOL +
156                     "    <cloudOwner>cloudOwner</cloudOwner>" + EOL +
157                         "    <tenantId>tenantId</tenantId>" + EOL +
158                         "    <vnfId>vnfId</vnfId>" + EOL +
159                         "    <vfModuleId>vfModuleId</vfModuleId>" + EOL +
160                         "    <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
161                         "    <msoRequest>" + EOL +
162                         "      <requestId>requestId</requestId>" + EOL +
163                         "      <serviceInstanceId>serviceInstanceId</serviceInstanceId>" + EOL +
164                         "    </msoRequest>" + EOL +
165                         "    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
166                         "    <vfModuleCreated>true</vfModuleCreated>" + EOL +
167                         "  </vfModuleRollback>" + EOL +
168                         "</rollbackVfModuleRequest>" + EOL;
169
170         public VnfAdapterRestV1IT() throws IOException {
171                 callbacks.put("createVfModule",
172                         "<createVfModuleResponse>" + EOL +
173                         "  <vnfId>vnfId</vnfId>" + EOL +
174                         "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
175                         "  <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
176                         "  <vfModuleCreated>true</vfModuleCreated>" + EOL +
177                         "  <vfModuleOutputs>" + EOL +
178                         "    <entry>" + EOL +
179                         "      <key>key1</key>" + EOL +
180                         "      <value>value1</value>" + EOL +
181                         "    </entry>" + EOL +
182                         "    <entry>" + EOL +
183                         "      <key>key2</key>" + EOL +
184                         "      <value>value2</value>" + EOL +
185                         "    </entry>" + EOL +
186                         "  </vfModuleOutputs>" + EOL +
187                         "  <rollback>" + EOL +
188                         "    <vnfId>vnfId</vnfId>" + EOL +
189                         "    <vfModuleId>vfModuleId</vfModuleId>" + EOL +
190                         "    <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
191                         "    <vfModuleCreated>true</vfModuleCreated>" + EOL +
192                         "    <tenantId>tenantId</tenantId>" + EOL +
193                     "    <cloudOwner>cloudOwner</cloudOwner>" + EOL +
194                         "    <cloudSiteId>cloudSiteId</cloudSiteId>" + EOL +
195                         "    <msoRequest>" + EOL +
196                         "      <requestId>requestId</requestId>" + EOL +
197                         "      <serviceInstanceId>serviceInstanceId</serviceInstanceId>" + EOL +
198                         "    </msoRequest>" + EOL +
199                         "    <messageId>messageId</messageId>" + EOL +
200                         "  </rollback>" + EOL +
201                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
202                         "</createVfModuleResponse>" + EOL);
203
204                 callbacks.put("updateVfModule",
205                         "<updateVfModuleResponse>" + EOL +
206                         "  <vnfId>vnfId</vnfId>" + EOL +
207                         "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
208                         "  <vfModuleStackId>vfModuleStackId</vfModuleStackId>" + EOL +
209                         "  <vfModuleOutputs>" + EOL +
210                         "    <entry>" + EOL +
211                         "      <key>key1</key>" + EOL +
212                         "      <value>value1</value>" + EOL +
213                         "    </entry>" + EOL +
214                         "    <entry>" + EOL +
215                         "      <key>key2</key>" + EOL +
216                         "      <value>value2</value>" + EOL +
217                         "    </entry>" + EOL +
218                         "  </vfModuleOutputs>" + EOL +
219                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
220                         "</updateVfModuleResponse>" + EOL);
221
222                 callbacks.put("deleteVfModule",
223                         "<deleteVfModuleResponse>" + EOL +
224                         "  <vnfId>vnfId</vnfId>" + EOL +
225                         "  <vfModuleId>vfModuleId</vfModuleId>" + EOL +
226                         "  <vfModuleDeleted>true</vfModuleDeleted>" + EOL +
227                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
228                         "</deleteVfModuleResponse>" + EOL);
229
230                 callbacks.put("rollbackVfModule",
231                         "<rollbackVfModuleResponse>" + EOL +
232                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
233                         "  <vfModuleRolledback>true</vfModuleRolledback>" + EOL +
234                         "</rollbackVfModuleResponse>" + EOL);
235
236                 callbacks.put("vfModuleException",
237                         "<vfModuleException>" + EOL +
238                         "  <message>message</message>" + EOL +
239                         "  <category>category</category>" + EOL +
240                         "  <rolledBack>false</rolledBack>" + EOL +
241                         "  <messageId>{{MESSAGE-ID}}</messageId>" + EOL +
242                         "</vfModuleException>" + EOL);
243         }
244
245         @Test
246         
247         public void testCreateVfModuleSuccess() throws Exception {
248                 logStart();
249
250                 mockVNFPost(wireMockServer, "", 202, "vnfId");
251
252                 String requestId = "dffbae0e-5588-4bd6-9749-b0f0adb52312";
253                 String messageId = requestId + "-" + System.currentTimeMillis();
254                 String request = CREATE_VF_MODULE_REQUEST.replace("{{MESSAGE-ID}}", messageId);
255
256                 String businessKey = UUID.randomUUID().toString();
257                 Map<String, Object> variables = new HashMap<>();
258                 variables.put("mso-request-id", requestId);
259                 variables.put("isDebugLogEnabled", "true");
260                 variables.put("vnfAdapterRestV1Request", request);
261
262                 invokeSubProcess("vnfAdapterRestV1", businessKey, variables);
263                 injectVNFRestCallbacks(callbacks, "createVfModule");
264                 waitForProcessEnd(businessKey, 10000);
265
266                 String response = (String) getVariableFromHistory(businessKey, "vnfAdapterRestV1Response");
267                 logger.debug("Response:\n{}", response);
268                 assertTrue(response!=null && response.contains("<createVfModuleResponse>"));
269                 assertTrue((boolean) getVariableFromHistory(businessKey, "VNFREST_SuccessIndicator"));
270
271                 logEnd();
272         }
273
274         @Test
275         
276         public void testUpdateVfModuleSuccess() throws Exception {
277                 logStart();
278
279                 mockVNFPut(wireMockServer, "/vfModuleId", 202);
280
281                 String requestId = "dffbae0e-5588-4bd6-9749-b0f0adb52312";
282                 String messageId = requestId + "-" + System.currentTimeMillis();
283                 String request = UPDATE_VF_MODULE_REQUEST.replace("{{MESSAGE-ID}}", messageId);
284
285                 String businessKey = UUID.randomUUID().toString();
286                 Map<String, Object> variables = new HashMap<>();
287                 variables.put("mso-request-id", requestId);
288                 variables.put("isDebugLogEnabled", "true");
289                 variables.put("vnfAdapterRestV1Request", request);
290
291                 invokeSubProcess("vnfAdapterRestV1", businessKey, variables);
292                 injectVNFRestCallbacks(callbacks, "updateVfModule");
293                 waitForProcessEnd(businessKey, 10000);
294
295                 String response = (String) getVariableFromHistory(businessKey, "vnfAdapterRestV1Response");
296                 logger.debug("Response:\n{}", response);
297                 assertTrue(response.contains("<updateVfModuleResponse>"));
298                 assertTrue((boolean) getVariableFromHistory(businessKey, "VNFREST_SuccessIndicator"));
299
300                 logEnd();
301         }
302
303         @Test
304         
305         public void testDeleteVfModuleSuccess() throws Exception {
306                 logStart();
307
308                 mockVNFDelete(wireMockServer, "vnfId", "/vfModuleId", 202);
309
310                 String requestId = "dffbae0e-5588-4bd6-9749-b0f0adb52312";
311                 String messageId = requestId + "-" + System.currentTimeMillis();
312                 String request = DELETE_VF_MODULE_REQUEST.replace("{{MESSAGE-ID}}", messageId);
313
314                 String businessKey = UUID.randomUUID().toString();
315                 Map<String, Object> variables = new HashMap<>();
316                 variables.put("mso-request-id", requestId);
317                 variables.put("isDebugLogEnabled", "true");
318                 variables.put("vnfAdapterRestV1Request", request);
319
320                 invokeSubProcess("vnfAdapterRestV1", businessKey, variables);
321                 injectVNFRestCallbacks(callbacks, "deleteVfModule");
322                 waitForProcessEnd(businessKey, 10000);
323
324                 String response = (String) getVariableFromHistory(businessKey, "vnfAdapterRestV1Response");
325                 logger.debug("Response:\n{}", response);
326                 assertTrue(response.contains("<deleteVfModuleResponse>"));
327                 assertTrue((boolean) getVariableFromHistory(businessKey, "VNFREST_SuccessIndicator"));
328
329                 logEnd();
330         }
331
332         @Test
333         
334         public void testRollbackVfModuleSuccess() throws Exception {
335                 logStart();
336
337                 mockVNFRollbackDelete(wireMockServer, "/vfModuleId", 202);
338
339                 String requestId = "dffbae0e-5588-4bd6-9749-b0f0adb52312";
340                 String messageId = requestId + "-" + System.currentTimeMillis();
341                 String request = ROLLBACK_VF_MODULE_REQUEST.replace("{{MESSAGE-ID}}", messageId);
342
343                 String businessKey = UUID.randomUUID().toString();
344                 Map<String, Object> variables = new HashMap<>();
345                 variables.put("mso-request-id", requestId);
346                 variables.put("isDebugLogEnabled", "true");
347                 variables.put("vnfAdapterRestV1Request", request);
348
349                 invokeSubProcess("vnfAdapterRestV1", businessKey, variables);
350                 injectVNFRestCallbacks(callbacks, "rollbackVfModule");
351                 waitForProcessEnd(businessKey, 10000);
352
353                 String response = (String) getVariableFromHistory(businessKey, "vnfAdapterRestV1Response");
354                 logger.debug("Response:\n{}", response);
355                 assertTrue(response.contains("<rollbackVfModuleResponse>"));
356                 assertTrue((boolean) getVariableFromHistory(businessKey, "VNFREST_SuccessIndicator"));
357
358                 logEnd();
359         }
360
361         @Test
362         
363         public void testCreateVfModuleException() throws Exception {
364                 logStart();
365
366                 mockVNFPost(wireMockServer, "", 202, "vnfId");
367
368                 String requestId = "dffbae0e-5588-4bd6-9749-b0f0adb52312";
369                 String messageId = requestId + "-" + System.currentTimeMillis();
370                 String request = CREATE_VF_MODULE_REQUEST.replace("{{MESSAGE-ID}}", messageId);
371
372                 String businessKey = UUID.randomUUID().toString();
373                 Map<String, Object> variables = new HashMap<>();
374                 variables.put("mso-request-id", requestId);
375                 variables.put("isDebugLogEnabled", "true");
376                 variables.put("vnfAdapterRestV1Request", request);
377
378                 invokeSubProcess("vnfAdapterRestV1", businessKey, variables);
379                 injectVNFRestCallbacks(callbacks, "vfModuleException");
380                 waitForProcessEnd(businessKey, 10000);
381
382                 WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, "WorkflowException");
383                 assertNotNull(wfe);
384                 logger.debug(wfe.toString());
385
386                 String response = (String) getVariableFromHistory(businessKey, "WorkflowResponse");
387                 logger.debug("Response:\n{}", response);
388                 assertTrue(response.contains("<vfModuleException>"));
389                 assertFalse((boolean) getVariableFromHistory(businessKey, "VNFREST_SuccessIndicator"));
390
391                 logEnd();
392         }
393 }
394