e3ecf30f7aa3ac0637225a1b8d654d2bead44493
[so.git] /
1 /*- \r
2  * ============LICENSE_START======================================================= \r
3  * ONAP - SO \r
4  * ================================================================================ \r
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. \r
6  * ================================================================================ \r
7  * Licensed under the Apache License, Version 2.0 (the "License"); \r
8  * you may not use this file except in compliance with the License. \r
9  * You may obtain a copy of the License at \r
10  * \r
11  *      http://www.apache.org/licenses/LICENSE-2.0 \r
12  * \r
13  * Unless required by applicable law or agreed to in writing, software \r
14  * distributed under the License is distributed on an "AS IS" BASIS, \r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. \r
16  * See the License for the specific language governing permissions and \r
17  * limitations under the License. \r
18  * ============LICENSE_END========================================================= \r
19  */\r
20 \r
21 package org.openecomp.mso.bpmn.infrastructure;\r
22 \r
23 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;\r
24 import static com.github.tomakehurst.wiremock.client.WireMock.containing;\r
25 import static com.github.tomakehurst.wiremock.client.WireMock.delete;\r
26 import static com.github.tomakehurst.wiremock.client.WireMock.post;\r
27 import static com.github.tomakehurst.wiremock.client.WireMock.put;\r
28 import static com.github.tomakehurst.wiremock.client.WireMock.stubFor;\r
29 import static com.github.tomakehurst.wiremock.client.WireMock.urlEqualTo;\r
30 import static com.github.tomakehurst.wiremock.client.WireMock.urlMatching;\r
31 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteGenericVnf;\r
32 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteVfModule;\r
33 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;\r
34 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;\r
35 \r
36 import java.io.IOException;\r
37 import java.util.HashMap;\r
38 import java.util.Map;\r
39 import java.util.UUID;\r
40 \r
41 import org.camunda.bpm.engine.test.Deployment;\r
42 import org.junit.Assert;\r
43 import org.junit.Test;\r
44 import org.openecomp.mso.bpmn.common.WorkflowTest;\r
45 import org.openecomp.mso.bpmn.core.WorkflowException;\r
46 import org.openecomp.mso.bpmn.mock.FileUtil;\r
47 \r
48 /**\r
49  * Unit test for DoDeleteVfModule.bpmn.\r
50  */\r
51 public class DoDeleteVfModuleTest extends WorkflowTest {\r
52     private final CallbackSet callbacks = new CallbackSet();\r
53 \r
54     private static final String EOL = "\n";\r
55 \r
56     private final String vnfAdapterDeleteCallback =\r
57             "<deleteVfModuleResponse>" + EOL +\r
58                     "    <vnfId>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnfId>" + EOL +\r
59                     "    <vfModuleId>973ed047-d251-4fb9-bf1a-65b8949e0a73</vfModuleId>" + EOL +\r
60                     "    <vfModuleDeleted>true</vfModuleDeleted>" + EOL +\r
61                     "    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +\r
62                     "</deleteVfModuleResponse>" + EOL;\r
63 \r
64     private final String vnfAdapterDeleteCallbackFail =\r
65             "<vfModuleException>" + EOL +\r
66                     "    <message>Error processing request to VNF-Async. Not Found.</message>" + EOL +\r
67                     "    <category>INTERNAL</category>" + EOL +\r
68                     "    <rolledBack>false</rolledBack>" + EOL +\r
69                     "    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +\r
70                     "</vfModuleException>" + EOL;\r
71 \r
72     private final String sdncAdapterDeleteCallback =\r
73             "<output xmlns=\"org:onap:sdnctl:l3api\">" + EOL +\r
74                     "  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +\r
75                     "  <ack-final-indicator>Y</ack-final-indicator>" + EOL +\r
76                     "</output>" + EOL;\r
77 \r
78     public DoDeleteVfModuleTest() throws IOException {\r
79         callbacks.put("sdncChangeDelete", sdncAdapterDeleteCallback);\r
80         callbacks.put("sdncDelete", sdncAdapterDeleteCallback);\r
81         callbacks.put("vnfDelete", FileUtil.readResourceFile(\r
82                 "__files/DeleteVfModuleCallbackResponse.xml"));\r
83         callbacks.put("vnfDeleteFail", vnfAdapterDeleteCallbackFail);\r
84     }\r
85 \r
86     private final String wfeString = "WorkflowException";\r
87 \r
88     @Test\r
89     @Deployment(resources = {\r
90             "subprocess/DoDeleteVfModule.bpmn",\r
91             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
92             "subprocess/UpdateAAIVfModule.bpmn",\r
93             "subprocess/UpdateAAIGenericVnf.bpmn",\r
94             "subprocess/DeleteAAIVfModule.bpmn",\r
95             "subprocess/SDNCAdapterV1.bpmn",\r
96             "subprocess/VnfAdapterRestV1.bpmn"\r
97     })\r
98     public void TestDoDeleteVfModuleSuccess() {\r
99         // delete the Base Module and Generic Vnf\r
100         // vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73\r
101         String request =\r
102                 "<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +\r
103                         "  <request-info>" + EOL +\r
104                         "    <action>DELETE_VF_MODULE</action>" + EOL +\r
105                         "    <source>PORTAL</source>" + EOL +\r
106                         "  </request-info>" + EOL +\r
107                         "  <vnf-inputs>" + EOL +\r
108                         "    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +\r
109                         "    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +\r
110                         "    <vnf-type>asc_heat-int</vnf-type>" + EOL +\r
111                         "    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +\r
112                         "    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +\r
113                         "    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +\r
114                         "    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +\r
115                         "    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +\r
116                         "    <orchestration-status>pending-delete</orchestration-status>" + EOL +\r
117                         "    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +\r
118                         "  </vnf-inputs>" + EOL +\r
119                         "  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +\r
120                         "</vnf-request>" + EOL;\r
121         logStart();\r
122         MockDoDeleteVfModule_SDNCSuccess();\r
123         MockDoDeleteVfModule_DeleteVNFSuccess();\r
124         MockAAIGenericVnfSearch();\r
125         MockAAIVfModulePUT(false);\r
126         MockAAIDeleteGenericVnf();\r
127         MockAAIDeleteVfModule();\r
128         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
129 \r
130         String businessKey = UUID.randomUUID().toString();\r
131         Map<String, Object> variables = new HashMap<>();\r
132         variables.put("isDebugLogEnabled", "true");\r
133         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
134         variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
135         variables.put("DoDeleteVfModuleRequest", request);\r
136         variables.put("isVidRequest", "true");\r
137         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
138 \r
139         // "changedelete" operation not required for deleting a Vf Module\r
140 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete");\r
141         injectVNFRestCallbacks(callbacks, "vnfDelete");\r
142         waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
143         injectSDNCCallbacks(callbacks, "sdncDelete");\r
144 \r
145         waitForProcessEnd(businessKey, 10000);\r
146         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
147         checkVariable(businessKey, wfeString, null);\r
148         if (wfe != null) {\r
149             System.out.println("TestDoDeleteVfModuleSuccess: ErrorCode=" + wfe.getErrorCode() +\r
150                     ", ErrorMessage=" + wfe.getErrorMessage());\r
151         }\r
152         logEnd();\r
153     }\r
154 \r
155     @Test\r
156     @Deployment(resources = {\r
157             "subprocess/DoDeleteVfModule.bpmn",\r
158             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
159             "subprocess/UpdateAAIVfModule.bpmn",\r
160             "subprocess/UpdateAAIGenericVnf.bpmn",\r
161             "subprocess/DeleteAAIVfModule.bpmn",\r
162             "subprocess/SDNCAdapterV1.bpmn",\r
163             "subprocess/VnfAdapterRestV1.bpmn"\r
164     })\r
165     public void TestDoDeleteVfModule_Building_Block_Success() {\r
166         logStart();\r
167         MockDoDeleteVfModule_SDNCSuccess();\r
168         MockDoDeleteVfModule_DeleteVNFSuccess();\r
169         MockAAIGenericVnfSearch();\r
170         MockAAIVfModulePUT(false);\r
171         MockAAIDeleteGenericVnf();\r
172         MockAAIDeleteVfModule();\r
173         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
174 \r
175         String businessKey = UUID.randomUUID().toString();\r
176         Map<String, Object> variables = new HashMap<>();\r
177 \r
178         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
179         variables.put("requestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
180         variables.put("isDebugLogEnabled", "true");\r
181         variables.put("vnfId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
182         variables.put("vfModuleId", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
183         variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
184         variables.put("vfModuleName", "STMTN5MMSC21-MMSC::module-0-0");\r
185         variables.put("sdncVersion", "1610");\r
186         variables.put("isVidRequest", "true");\r
187         variables.put("retainResources", false);\r
188         String vfModuleModelInfo = "{" + "\"modelType\": \"vnf\"," +\r
189                 "\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +\r
190                 "\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +\r
191                 "\"modelName\": \"vSAMP12\"," +\r
192                 "\"modelVersion\": \"1.0\"," +\r
193                 "\"modelCustomizationUuid\": \"MODEL-ID-1234\"," +\r
194                 "}";\r
195         variables.put("vfModuleModelInfo", vfModuleModelInfo);\r
196 \r
197         String cloudConfiguration = "{" +\r
198                 "\"lcpCloudRegionId\": \"RDM2WAGPLCP\"," +\r
199                 "\"tenantId\": \"fba1bd1e195a404cacb9ce17a9b2b421\"" + "}";\r
200         variables.put("cloudConfiguration", cloudConfiguration);\r
201 \r
202 \r
203         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
204 \r
205         // "changedelete" operation not required for deleting a Vf Module\r
206 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete");\r
207         injectVNFRestCallbacks(callbacks, "vnfDelete");\r
208         waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
209         injectSDNCCallbacks(callbacks, "sdncDelete");\r
210 \r
211         waitForProcessEnd(businessKey, 10000);\r
212         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
213         checkVariable(businessKey, wfeString, null);\r
214         if (wfe != null) {\r
215             System.out.println("TestDoDeleteVfModule_Building_Block_Success: ErrorCode=" + wfe.getErrorCode() +\r
216                     ", ErrorMessage=" + wfe.getErrorMessage());\r
217         }\r
218         logEnd();\r
219     }\r
220 \r
221 \r
222     @Test\r
223     @Deployment(resources = {\r
224             "subprocess/DoDeleteVfModule.bpmn",\r
225             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
226             "subprocess/UpdateAAIVfModule.bpmn",\r
227             "subprocess/UpdateAAIGenericVnf.bpmn",\r
228             "subprocess/DeleteAAIVfModule.bpmn",\r
229             "subprocess/SDNCAdapterV1.bpmn",\r
230             "subprocess/VnfAdapterRestV1.bpmn"\r
231     })\r
232     public void TestDoDeleteVfModuleSDNCFailure() {\r
233         // delete the Base Module and Generic Vnf - SDNCAdapter failure\r
234         // vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73\r
235         String request =\r
236                 "<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +\r
237                         "  <request-info>" + EOL +\r
238                         "    <action>DELETE_VF_MODULE</action>" + EOL +\r
239                         "    <source>PORTAL</source>" + EOL +\r
240                         "  </request-info>" + EOL +\r
241                         "  <vnf-inputs>" + EOL +\r
242                         "    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +\r
243                         "    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +\r
244                         "    <vnf-type>asc_heat-int</vnf-type>" + EOL +\r
245                         "    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +\r
246                         "    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +\r
247                         "    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +\r
248                         "    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +\r
249                         "    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +\r
250                         "    <orchestration-status>pending-delete</orchestration-status>" + EOL +\r
251                         "    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +\r
252                         "  </vnf-inputs>" + EOL +\r
253                         "  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +\r
254                         "</vnf-request>" + EOL;\r
255 \r
256         logStart();\r
257         MockDoDeleteVfModule_SDNCFailure();\r
258         MockDoDeleteVfModule_DeleteVNFSuccess();\r
259         MockAAIGenericVnfSearch();\r
260         MockAAIVfModulePUT(false);\r
261         MockAAIDeleteGenericVnf();\r
262         MockAAIDeleteVfModule();\r
263         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
264 \r
265         String businessKey = UUID.randomUUID().toString();\r
266         Map<String, Object> variables = new HashMap<>();\r
267         variables.put("isDebugLogEnabled", "true");\r
268         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
269         variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
270         variables.put("DoDeleteVfModuleRequest", request);\r
271         variables.put("isVidRequest", "true");\r
272         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
273 \r
274         // "changedelete" operation not required for deleting a Vf Module\r
275 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete");\r
276         injectVNFRestCallbacks(callbacks, "vnfDelete");\r
277         waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
278         // cause a failure by not injecting a callback\r
279 //              injectSDNCCallbacks(callbacks, "sdncDelete");\r
280 \r
281         waitForProcessEnd(businessKey, 10000);\r
282         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
283         Assert.assertNotNull(wfe);\r
284         if (wfe != null) {\r
285             System.out.println("TestDoDeleteVfModuleSDNCFailure: ErrorCode=" + wfe.getErrorCode() +\r
286                     ", ErrorMessage=" + wfe.getErrorMessage());\r
287             Assert.assertTrue(wfe.getErrorCode() == 7000);\r
288             Assert.assertTrue(wfe.getErrorMessage().startsWith("Could not communicate"));\r
289         }\r
290         logEnd();\r
291     }\r
292 \r
293     @Test\r
294     @Deployment(resources = {\r
295             "subprocess/DoDeleteVfModule.bpmn",\r
296             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
297             "subprocess/UpdateAAIVfModule.bpmn",\r
298             "subprocess/UpdateAAIGenericVnf.bpmn",\r
299             "subprocess/DeleteAAIVfModule.bpmn",\r
300             "subprocess/SDNCAdapterV1.bpmn",\r
301             "subprocess/VnfAdapterRestV1.bpmn"\r
302     })\r
303     public void TestDoDeleteVfModuleSDNCCallbackFailure() {\r
304         // delete the Base Module and Generic Vnf - SDNCAdapter Callback failure\r
305         // vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73\r
306         String request =\r
307                 "<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +\r
308                         "  <request-info>" + EOL +\r
309                         "    <action>DELETE_VF_MODULE</action>" + EOL +\r
310                         "    <source>PORTAL</source>" + EOL +\r
311                         "  </request-info>" + EOL +\r
312                         "  <vnf-inputs>" + EOL +\r
313                         "    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +\r
314                         "    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +\r
315                         "    <vnf-type>asc_heat-int</vnf-type>" + EOL +\r
316                         "    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +\r
317                         "    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +\r
318                         "    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +\r
319                         "    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +\r
320                         "    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +\r
321                         "    <orchestration-status>pending-delete</orchestration-status>" + EOL +\r
322                         "    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +\r
323                         "  </vnf-inputs>" + EOL +\r
324                         "  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +\r
325                         "</vnf-request>" + EOL;\r
326 \r
327         logStart();\r
328         MockDoDeleteVfModule_SDNCSuccess();\r
329         MockDoDeleteVfModule_DeleteVNFSuccess();\r
330         MockAAIGenericVnfSearch();\r
331         MockAAIVfModulePUT(false);\r
332         MockAAIDeleteGenericVnf();\r
333         MockAAIDeleteVfModule();\r
334         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
335 \r
336         String businessKey = UUID.randomUUID().toString();\r
337         Map<String, Object> variables = new HashMap<>();\r
338         variables.put("isDebugLogEnabled", "true");\r
339         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
340         variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
341         variables.put("DoDeleteVfModuleRequest", request);\r
342         variables.put("isVidRequest", "true");\r
343         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
344 \r
345         // "changedelete" operation not required for deleting a Vf Module\r
346 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete:ERR");\r
347         injectVNFRestCallbacks(callbacks, "vnfDelete");\r
348         waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
349         // return a failure in the callback\r
350         injectSDNCCallbacks(callbacks, "sdncDelete:ERR");\r
351 \r
352         waitForProcessEnd(businessKey, 10000);\r
353         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
354         Assert.assertNotNull(wfe);\r
355         if (wfe != null) {\r
356             System.out.println("TestDoDeleteVfModuleSDNCCallbackFailure: ErrorCode=" + wfe.getErrorCode() +\r
357                     ", ErrorMessage=" + wfe.getErrorMessage());\r
358             Assert.assertTrue(wfe.getErrorCode() == 5310);\r
359             Assert.assertTrue(wfe.getErrorMessage().startsWith("Received error from SDN-C"));\r
360         }\r
361         logEnd();\r
362     }\r
363 \r
364     @Test\r
365     @Deployment(resources = {\r
366             "subprocess/DoDeleteVfModule.bpmn",\r
367             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
368             "subprocess/UpdateAAIVfModule.bpmn",\r
369             "subprocess/UpdateAAIGenericVnf.bpmn",\r
370             "subprocess/DeleteAAIVfModule.bpmn",\r
371             "subprocess/SDNCAdapterV1.bpmn",\r
372             "subprocess/VnfAdapterRestV1.bpmn"\r
373     })\r
374     public void TestDoDeleteVfModuleVNFFailure() {\r
375         // delete the Base Module and Generic Vnf - VNFAdapter failure\r
376         // vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73\r
377         String request =\r
378                 "<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +\r
379                         "  <request-info>" + EOL +\r
380                         "    <action>DELETE_VF_MODULE</action>" + EOL +\r
381                         "    <source>PORTAL</source>" + EOL +\r
382                         "  </request-info>" + EOL +\r
383                         "  <vnf-inputs>" + EOL +\r
384                         "    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +\r
385                         "    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +\r
386                         "    <vnf-type>asc_heat-int</vnf-type>" + EOL +\r
387                         "    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +\r
388                         "    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +\r
389                         "    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +\r
390                         "    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +\r
391                         "    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +\r
392                         "    <orchestration-status>pending-delete</orchestration-status>" + EOL +\r
393                         "    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +\r
394                         "  </vnf-inputs>" + EOL +\r
395                         "  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +\r
396                         "</vnf-request>" + EOL;\r
397 \r
398         logStart();\r
399         MockDoDeleteVfModule_SDNCSuccess();\r
400         MockDoDeleteVfModule_DeleteVNFFailure();\r
401         MockAAIGenericVnfSearch();\r
402         MockAAIVfModulePUT(false);\r
403         MockAAIDeleteGenericVnf();\r
404         MockAAIDeleteVfModule();\r
405         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
406 \r
407         String businessKey = UUID.randomUUID().toString();\r
408         Map<String, Object> variables = new HashMap<>();\r
409         variables.put("isDebugLogEnabled", "true");\r
410         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
411         variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
412         variables.put("DoDeleteVfModuleRequest", request);\r
413         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
414 \r
415         // "changedelete" operation not required for deleting a Vf Module\r
416 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete");\r
417         // cause a failure by not injecting a callback\r
418 //              injectVNFRestCallbacks(callbacks, "vnfDelete");\r
419 //              waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
420 //              injectSDNCCallbacks(callbacks, "sdncDelete");\r
421 \r
422         waitForProcessEnd(businessKey, 10000);\r
423         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
424         Assert.assertNotNull(wfe);\r
425         if (wfe != null) {\r
426             System.out.println("TestDoDeleteVfModuleVNFFailure: ErrorCode=" + wfe.getErrorCode() +\r
427                     ", ErrorMessage=" + wfe.getErrorMessage());\r
428             Assert.assertTrue(wfe.getErrorCode() == 7020);\r
429             Assert.assertTrue(wfe.getErrorMessage().startsWith("Received error from VnfAdapter"));\r
430         }\r
431         logEnd();\r
432     }\r
433 \r
434     @Test\r
435     @Deployment(resources = {\r
436             "subprocess/DoDeleteVfModule.bpmn",\r
437             "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
438             "subprocess/UpdateAAIVfModule.bpmn",\r
439             "subprocess/UpdateAAIGenericVnf.bpmn",\r
440             "subprocess/DeleteAAIVfModule.bpmn",\r
441             "subprocess/SDNCAdapterV1.bpmn",\r
442             "subprocess/VnfAdapterRestV1.bpmn"\r
443     })\r
444     public void TestDoDeleteVfModuleVNFCallbackFailure() {\r
445         // delete the Base Module and Generic Vnf - VNFAdapter Callback failure\r
446         // vnf-id=a27ce5a9-29c4-4c22-a017-6615ac73c721, vf-module-id=973ed047-d251-4fb9-bf1a-65b8949e0a73\r
447         String request =\r
448                 "<vnf-request xmlns=\"http://openecomp.org/mso/infra/vnf-request/v1\">" + EOL +\r
449                         "  <request-info>" + EOL +\r
450                         "    <action>DELETE_VF_MODULE</action>" + EOL +\r
451                         "    <source>PORTAL</source>" + EOL +\r
452                         "  </request-info>" + EOL +\r
453                         "  <vnf-inputs>" + EOL +\r
454                         "    <vnf-id>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnf-id>" + EOL +\r
455                         "    <vnf-name>STMTN5MMSC21</vnf-name>" + EOL +\r
456                         "    <vnf-type>asc_heat-int</vnf-type>" + EOL +\r
457                         "    <vf-module-id>973ed047-d251-4fb9-bf1a-65b8949e0a73</vf-module-id>" + EOL +\r
458                         "    <vf-module-name>STMTN5MMSC21-MMSC::module-0-0</vf-module-name>" + EOL +\r
459                         "    <service-id>00000000-0000-0000-0000-000000000000</service-id>" + EOL +\r
460                         "    <service-type>SDN-ETHERNET-INTERNET</service-type>" + EOL +\r
461                         "    <tenant-id>fba1bd1e195a404cacb9ce17a9b2b421</tenant-id>" + EOL +\r
462                         "    <orchestration-status>pending-delete</orchestration-status>" + EOL +\r
463                         "    <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>" + EOL +\r
464                         "  </vnf-inputs>" + EOL +\r
465                         "  <vnf-params xmlns:tns=\"http://openecomp.org/mso/infra/vnf-request/v1\"/>" + EOL +\r
466                         "</vnf-request>" + EOL;\r
467 \r
468         logStart();\r
469         MockDoDeleteVfModule_SDNCSuccess();\r
470         MockDoDeleteVfModule_DeleteVNFSuccess();\r
471         MockAAIGenericVnfSearch();\r
472         MockAAIVfModulePUT(false);\r
473         MockAAIDeleteGenericVnf();\r
474         MockAAIDeleteVfModule();\r
475         MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
476 \r
477         String businessKey = UUID.randomUUID().toString();\r
478         Map<String, Object> variables = new HashMap<>();\r
479         variables.put("isDebugLogEnabled", "true");\r
480         variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
481         variables.put("mso-service-instance-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
482         variables.put("DoDeleteVfModuleRequest", request);\r
483         invokeSubProcess("DoDeleteVfModule", businessKey, variables);\r
484 \r
485         // "changedelete" operation not required for deleting a Vf Module\r
486 //              injectSDNCCallbacks(callbacks, "sdncChangeDelete");\r
487         injectVNFRestCallbacks(callbacks, "vnfDeleteFail");\r
488         waitForRunningProcessCount("vnfAdapterDeleteV1", 0, 120000);\r
489 //              injectSDNCCallbacks(callbacks, "sdncDelete");\r
490 \r
491         waitForProcessEnd(businessKey, 10000);\r
492         WorkflowException wfe = (WorkflowException) getVariableFromHistory(businessKey, wfeString);\r
493         Assert.assertNotNull(wfe);\r
494         if (wfe != null) {\r
495             System.out.println("TestDoDeleteVfModuleVNFCallbackFailure: ErrorCode=" + wfe.getErrorCode() +\r
496                     ", ErrorMessage=" + wfe.getErrorMessage());\r
497             Assert.assertTrue(wfe.getErrorCode() == 7020);\r
498             Assert.assertTrue(wfe.getErrorMessage().startsWith("Received vfModuleException from VnfAdapter"));\r
499         }\r
500         logEnd();\r
501     }\r
502 \r
503     // start of mocks used locally and by other VF Module unit tests\r
504     public static void MockAAIVfModulePUT(boolean isCreate) {\r
505         stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))\r
506                 .withRequestBody(containing("MMSC"))\r
507                 .willReturn(aResponse()\r
508                         .withStatus(isCreate ? 201 : 200)));\r
509         stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))\r
510                 .withRequestBody(containing("PCRF"))\r
511                 .willReturn(aResponse()\r
512                         .withStatus(500)\r
513                         .withHeader("Content-Type", "text/xml")\r
514                         .withBodyFile("aaiFault.xml")));\r
515         stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))\r
516                 .willReturn(aResponse()\r
517                         .withStatus(200)));\r
518     }\r
519 \r
520     public static void MockDoDeleteVfModule_SDNCSuccess() {\r
521         stubFor(post(urlEqualTo("/SDNCAdapter"))\r
522                 .withRequestBody(containing("SvcAction>changedelete"))\r
523                 .willReturn(aResponse()\r
524                         .withStatus(200)\r
525                         .withHeader("Content-Type", "text/xml")\r
526                         .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));\r
527         stubFor(post(urlEqualTo("/SDNCAdapter"))\r
528                 .withRequestBody(containing("SvcAction>delete"))\r
529                 .willReturn(aResponse()\r
530                         .withStatus(200)\r
531                         .withHeader("Content-Type", "text/xml")\r
532                         .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));\r
533     }\r
534 \r
535     public static void MockDoDeleteVfModule_SDNCFailure() {\r
536         stubFor(post(urlEqualTo("/SDNCAdapter"))\r
537                 .withRequestBody(containing("SvcAction>changedelete"))\r
538                 .willReturn(aResponse()\r
539                         .withStatus(500)));\r
540         stubFor(post(urlEqualTo("/SDNCAdapter"))\r
541                 .withRequestBody(containing("SvcAction>delete"))\r
542                 .willReturn(aResponse()\r
543                         .withStatus(500)));\r
544     }\r
545 \r
546     public static void MockDoDeleteVfModule_DeleteVNFSuccess() {\r
547         stubFor(delete(urlMatching("/vnfs/v1/vnfs/.*/vf-modules/.*"))\r
548                 .willReturn(aResponse()\r
549                         .withStatus(202)\r
550                         .withHeader("Content-Type", "application/xml")));\r
551         stubFor(delete(urlMatching("/vnfs/v1/volume-groups/78987"))\r
552                 .willReturn(aResponse()\r
553                         .withStatus(202)\r
554                         .withHeader("Content-Type", "application/xml")));\r
555     }\r
556 \r
557     public static void MockDoDeleteVfModule_DeleteVNFFailure() {\r
558         stubFor(delete(urlMatching("/vnfs/v1/vnfs/.*/vf-modules/.*"))\r
559                 .willReturn(aResponse()\r
560                         .withStatus(500)\r
561                         .withHeader("Content-Type", "application/xml")));\r
562     }\r
563 }\r
564 \r