Merge "Reorder modifiers"
[so.git] / bpmn / MSOInfrastructureBPMN / src / test / java / org / openecomp / mso / bpmn / infrastructure / DoDeleteVnfAndModulesTest.java
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.junit.Assert.assertEquals;\r
32 import static org.junit.Assert.assertNotEquals;\r
33 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteGenericVnf;\r
34 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIDeleteVfModule;\r
35 import static org.openecomp.mso.bpmn.common.DeleteAAIVfModuleTest.MockAAIGenericVnfSearch;\r
36 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockDeleteGenericVnf;\r
37 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfById;\r
38 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;\r
39 import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.mockUpdateRequestDB;\r
40 import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;\r
41 \r
42 import java.io.IOException;\r
43 import java.util.HashMap;\r
44 import java.util.Map;\r
45 import java.util.UUID;\r
46 \r
47 import org.camunda.bpm.engine.test.Deployment;\r
48 import org.junit.Assert;\r
49 import org.junit.Ignore;\r
50 import org.junit.Test;\r
51 import org.openecomp.mso.bpmn.common.BPMNUtil;\r
52 import org.openecomp.mso.bpmn.common.WorkflowTest;\r
53 import org.openecomp.mso.bpmn.mock.FileUtil;\r
54 import org.openecomp.mso.bpmn.core.domain.ModelInfo;\r
55 import org.openecomp.mso.bpmn.core.domain.ModuleResource;\r
56 import org.openecomp.mso.bpmn.core.domain.ServiceDecomposition;\r
57 import org.openecomp.mso.bpmn.core.domain.VnfResource;\r
58 \r
59 public class DoDeleteVnfAndModulesTest extends WorkflowTest {\r
60         private final CallbackSet callbacks = new CallbackSet();\r
61         private static final String EOL = "\n";\r
62         private final String vnfAdapterDeleteCallback = \r
63                         "<deleteVfModuleResponse>" + EOL +\r
64                         "    <vnfId>a27ce5a9-29c4-4c22-a017-6615ac73c721</vnfId>" + EOL +\r
65                         "    <vfModuleId>973ed047-d251-4fb9-bf1a-65b8949e0a73</vfModuleId>" + EOL +\r
66                         "    <vfModuleDeleted>true</vfModuleDeleted>" + EOL +\r
67                         "    <messageId>{{MESSAGE-ID}}</messageId>" + EOL +\r
68                         "</deleteVfModuleResponse>" + EOL;\r
69         private final String sdncAdapterDeleteCallback =\r
70                         "<output xmlns=\"org:openecomp:sdnctl:l3api\">" + EOL +\r
71                         "  <svc-request-id>{{REQUEST-ID}}</svc-request-id>" + EOL +\r
72                         "  <ack-final-indicator>Y</ack-final-indicator>" + EOL +\r
73                         "</output>" + EOL;\r
74 \r
75         public DoDeleteVnfAndModulesTest () throws IOException {\r
76                 callbacks.put("deactivate", FileUtil.readResourceFile(\r
77                                 "__files/VfModularity/SDNCTopologyActivateCallback.xml"));\r
78                 callbacks.put("unassign", FileUtil.readResourceFile(\r
79                                 "__files/VfModularity/SDNCTopologyActivateCallback.xml"));\r
80                 callbacks.put("vnfDelete", vnfAdapterDeleteCallback);\r
81                 callbacks.put("sdncDelete", sdncAdapterDeleteCallback);\r
82 \r
83         }\r
84 \r
85         @Test\r
86         @Deployment(resources = {"subprocess/DoDeleteVnfAndModules.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn", "subprocess/DoDeleteVfModule.bpmn"})\r
87         public void testDoDeleteVnfAndModules_successVnfOnly() throws Exception{\r
88                 MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");\r
89                 MockDeleteGenericVnf("testVnfId123", "testReVer123");\r
90                 mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");\r
91                 mockSDNCAdapter(200);\r
92 \r
93                 String businessKey = UUID.randomUUID().toString();\r
94                 Map<String, Object> variables = new HashMap<>();\r
95                 setVariablesVnfOnly(variables);\r
96                 invokeSubProcess("DoDeleteVnfAndModules", businessKey, variables);\r
97                 \r
98                 injectSDNCCallbacks(callbacks, "deactivate");\r
99                 injectSDNCCallbacks(callbacks, "unassign");\r
100 \r
101                 waitForProcessEnd(businessKey, 10000);\r
102 \r
103                 Assert.assertTrue(isProcessEnded(businessKey));         \r
104 \r
105                 String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnfAndModules", "WorkflowException");\r
106                 \r
107                 assertEquals(null, workflowException);\r
108         }\r
109 \r
110         \r
111         private void setVariablesVnfOnly(Map<String, Object> variables) {\r
112                 variables.put("mso-request-id", "testRequestId123");            \r
113                 variables.put("isDebugLogEnabled", "true");\r
114                 variables.put("vnfId","testVnfId123");\r
115                 variables.put("serviceInstanceId", "MIS%2F1604%2F0026%2FSW_INTERNET");\r
116                 //variables.put("vnfName", "testVnfName123");\r
117                 variables.put("disableRollback", "true");\r
118                 variables.put("msoRequestId", "testVnfId123");\r
119                 variables.put("testVnfId","testVnfId123");\r
120                 //variables.put("vnfType", "STMTN");\r
121                 variables.put("productFamilyId", "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb");\r
122                 String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +\r
123                                 "\"modelInvariantUuid\": \"ff5256d2-5a33-55df-13ab-12abad84e7ff\"," +\r
124                                 "\"modelUuid\": \"fe6478e5-ea33-3346-ac12-ab121484a3fe\"," +\r
125                                 "\"modelName\": \"vSAMP12\"," +\r
126                                 "\"modelVersion\": \"1.0\"," +\r
127                                 "\"modelCustomizationUuid\": \"MODEL-ID-1234\"," +\r
128                                 "}";\r
129                 //variables.put("vnfModelInfo", vnfModelInfo);\r
130 \r
131                 variables.put("lcpCloudRegionId", "mdt1");\r
132                 variables.put("tenantId", "88a6ca3ee0394ade9403f075db23167e");          \r
133                 \r
134                 String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +\r
135                                 "\"modelInvariantUuid\": \"995256d2-5a33-55df-13ab-12abad84e7ff\"," +\r
136                                 "\"modelUuid\": \"ab6478e5-ea33-3346-ac12-ab121484a3fe\"," +\r
137                                 "\"modelName\": \"ServicevSAMP12\"," +\r
138                                 "\"modelVersion\": \"1.0\"," +\r
139                                 "}";\r
140                 //variables.put("serviceModelInfo", serviceModelInfo);\r
141                 variables.put("globalSubscriberId", "MSO-1610");\r
142                 variables.put("sdncVersion", "1707");\r
143                 \r
144         }\r
145         \r
146         @Test   \r
147         @Deployment(resources = {"subprocess/DoDeleteVnfAndModules.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn", "subprocess/DoDeleteVfModuleFromVnf.bpmn", "subprocess/VnfAdapterRestV1.bpmn", "subprocess/DeleteAAIVfModule.bpmn"})\r
148         public void testDoDeleteVnfAndModules_successVnfAndModules() throws Exception{\r
149                 MockAAIGenericVnfSearch();\r
150                 MockGetGenericVnfById("testVnfId123.*", "GenericFlows/getGenericVnfByNameResponse.xml");\r
151                 MockDeleteGenericVnf("testVnfId123", "testReVer123");\r
152                 mockUpdateRequestDB(200, "Database/DBUpdateResponse.xml");\r
153                 mockSDNCAdapter(200);\r
154                 MockDoDeleteVfModule_SDNCSuccess();\r
155                 MockDoDeleteVfModule_DeleteVNFSuccess();\r
156                 MockAAIDeleteVfModule();\r
157 \r
158                 String businessKey = UUID.randomUUID().toString();\r
159                 Map<String, Object> variables = new HashMap<>();\r
160                 setVariablesVnfAndModules(variables);\r
161                 invokeSubProcess("DoDeleteVnfAndModules", businessKey, variables);\r
162                 \r
163                 injectSDNCCallbacks(callbacks, "deactivate");\r
164                 injectSDNCCallbacks(callbacks, "deactivate");\r
165                 injectVNFRestCallbacks(callbacks, "vnfDelete");\r
166                 injectSDNCCallbacks(callbacks, "unassign");\r
167                 MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");\r
168                 injectSDNCCallbacks(callbacks, "unassign");\r
169                 //MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");\r
170 \r
171                 waitForProcessEnd(businessKey, 10000);\r
172 \r
173                 Assert.assertTrue(isProcessEnded(businessKey));         \r
174 \r
175                 String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnfAndModules", "WorkflowException");\r
176                 \r
177                 assertEquals(null, workflowException);\r
178         }\r
179 \r
180         \r
181         private void setVariablesVnfAndModules(Map<String, Object> variables) {\r
182                 variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");                \r
183                 variables.put("isDebugLogEnabled", "true");\r
184                 variables.put("vnfId","a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
185                 variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
186                                 \r
187                 variables.put("msoRequestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
188                 //variables.put("testVnfId","testVnfId123");\r
189                 \r
190                 variables.put("lcpCloudRegionId", "RDM2WAGPLCP");\r
191                 variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");\r
192                 \r
193                 variables.put("sdncVersion", "1707");\r
194                 \r
195                 \r
196                 ServiceDecomposition sd = new ServiceDecomposition();           \r
197                 ModelInfo serviceModel = new ModelInfo();\r
198                 serviceModel.setModelName("servicewithVNFs");\r
199                 sd.setModelInfo(serviceModel);                  \r
200                 VnfResource vr = new VnfResource();\r
201                 ModelInfo mvr = new ModelInfo();\r
202                 mvr.setModelName("vSAMP12");\r
203                 mvr.setModelInstanceName("v123");\r
204                 mvr.setModelInvariantUuid("");\r
205                 mvr.setModelVersion("1.0");\r
206                 mvr.setModelCustomizationUuid("MODEL-ID-1234");\r
207                 vr.setModelInfo(mvr);\r
208                 vr.constructVnfType("vnf1");                    \r
209                 vr.setNfType("somenftype");\r
210                 vr.setNfRole("somenfrole");\r
211                 vr.setNfFunction("somenffunction");\r
212                 vr.setNfNamingCode("somenamingcode");   \r
213                 ModuleResource mr = new ModuleResource();\r
214                 ModelInfo mvmr = new ModelInfo();\r
215                 mvmr.setModelInvariantUuid("ff5256d2-5a33-55df-13ab-12abad84e7ff");\r
216                 mvmr.setModelName("STMTN5MMSC21-MMSC::model-1-0");\r
217                 mvmr.setModelUuid("1.0");\r
218                 mvmr.setModelCustomizationUuid("MODEL-123");\r
219                 mr.setModelInfo(mvmr);\r
220                 mr.setIsBase(true);\r
221                 mr.setVfModuleLabel("MODULELABEL");\r
222                 vr.addVfModule(mr);\r
223                 sd.addVnfResource(vr);                  \r
224                 variables.put("serviceDecomposition", sd);\r
225                 \r
226         }\r
227         \r
228         @Test   \r
229         @Deployment(resources = {"subprocess/DoDeleteVnfAndModules.bpmn", "subprocess/SDNCAdapterV1.bpmn", "subprocess/GenericGetVnf.bpmn", "subprocess/GenericDeleteVnf.bpmn", "subprocess/DoDeleteVnf.bpmn", "subprocess/DoDeleteVfModule.bpmn", "subprocess/UpdateAAIVfModule.bpmn", "subprocess/PrepareUpdateAAIVfModule.bpmn", "subprocess/DoDeleteVfModuleFromVnf.bpmn", "subprocess/VnfAdapterRestV1.bpmn", "subprocess/DeleteAAIVfModule.bpmn"})\r
230         public void testDoDeleteVnfAndModulesDirectDelete_successVnfAndModules() throws Exception{\r
231                 MockDoDeleteVfModule_SDNCSuccess();\r
232                 MockDoDeleteVfModule_DeleteVNFSuccess();\r
233                 mockSDNCAdapter(200);\r
234                 MockAAIGenericVnfSearch();\r
235                 MockAAIVfModulePUT(false);\r
236                 MockAAIDeleteGenericVnf();\r
237                 MockAAIDeleteVfModule();\r
238                 MockPatchVfModuleId("a27ce5a9-29c4-4c22-a017-6615ac73c721", "973ed047-d251-4fb9-bf1a-65b8949e0a73");\r
239 \r
240                 String businessKey = UUID.randomUUID().toString();\r
241                 Map<String, Object> variables = new HashMap<>();\r
242                 setVariablesVnfAndModulesDirectDelete(variables);\r
243                 invokeSubProcess("DoDeleteVnfAndModules", businessKey, variables);\r
244                 \r
245                 injectVNFRestCallbacks(callbacks, "vnfDelete");         \r
246                 injectSDNCCallbacks(callbacks, "sdncDelete");\r
247                 MockGetGenericVnfById("a27ce5a9-29c4-4c22-a017-6615ac73c721", "GenericFlows/getGenericVnfByNameResponse.xml");                          \r
248 \r
249                 waitForProcessEnd(businessKey, 10000);\r
250 \r
251                 Assert.assertTrue(isProcessEnded(businessKey));         \r
252 \r
253                 String workflowException = BPMNUtil.getVariable(processEngineRule, "DoDeleteVnfAndModules", "WorkflowException");\r
254                 \r
255                 // WorkflowException is expected here, since empty VNF cannot be simulated here\r
256                 assertNotEquals(null, workflowException);\r
257         }\r
258 \r
259         \r
260         private void setVariablesVnfAndModulesDirectDelete(Map<String, Object> variables) {\r
261                 variables.put("mso-request-id", "a27ce5a9-29c4-4c22-a017-6615ac73c721");                \r
262                 variables.put("isDebugLogEnabled", "true");\r
263                 variables.put("vnfId","a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
264                 variables.put("serviceInstanceId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
265                                 \r
266                 variables.put("msoRequestId", "a27ce5a9-29c4-4c22-a017-6615ac73c721");\r
267                 //variables.put("testVnfId","testVnfId123");\r
268                 \r
269                 variables.put("lcpCloudRegionId", "RDM2WAGPLCP");\r
270                 variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");\r
271                 \r
272                 variables.put("sdncVersion", "1702");\r
273                 \r
274                 \r
275                 ServiceDecomposition sd = new ServiceDecomposition();           \r
276                 ModelInfo serviceModel = new ModelInfo();\r
277                 serviceModel.setModelName("servicewithVNFs");\r
278                 sd.setModelInfo(serviceModel);                  \r
279                 VnfResource vr = new VnfResource();\r
280                 ModelInfo mvr = new ModelInfo();\r
281                 mvr.setModelName("vSAMP12");\r
282                 mvr.setModelInstanceName("v123");\r
283                 mvr.setModelInvariantUuid("");\r
284                 mvr.setModelVersion("1.0");\r
285                 mvr.setModelCustomizationUuid("MODEL-ID-1234");\r
286                 vr.setModelInfo(mvr);\r
287                 vr.constructVnfType("vnf1");                    \r
288                 vr.setNfType("somenftype");\r
289                 vr.setNfRole("somenfrole");\r
290                 vr.setNfFunction("somenffunction");\r
291                 vr.setNfNamingCode("somenamingcode");   \r
292                 ModuleResource mr = new ModuleResource();\r
293                 ModelInfo mvmr = new ModelInfo();\r
294                 mvmr.setModelInvariantUuid("ff5256d2-5a33-55df-13ab-12abad84e7ff");\r
295                 mvmr.setModelName("STMTN5MMSC21-MMSC::model-1-0");\r
296                 mvmr.setModelUuid("1.0");\r
297                 mvmr.setModelCustomizationUuid("MODEL-123");\r
298                 mr.setModelInfo(mvmr);\r
299                 mr.setIsBase(true);\r
300                 mr.setVfModuleLabel("MODULELABEL");\r
301                 vr.addVfModule(mr);\r
302                 sd.addVnfResource(vr);                  \r
303                 variables.put("serviceDecomposition", sd);\r
304                 \r
305         }\r
306         \r
307         public static void MockAAIVfModulePUT(boolean isCreate){\r
308                 stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))\r
309                                 .withRequestBody(containing("MMSC"))\r
310                                 .willReturn(aResponse()\r
311                                                 .withStatus(isCreate ? 201 : 200)));\r
312                 stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/.*/vf-modules/vf-module/.*"))\r
313                                 .withRequestBody(containing("PCRF"))\r
314                                 .willReturn(aResponse()\r
315                                                 .withStatus(500)\r
316                                                 .withHeader("Content-Type", "text/xml")\r
317                                                 .withBodyFile("aaiFault.xml")));\r
318                 stubFor(put(urlMatching("/aai/v[0-9]+/network/generic-vnfs/generic-vnf/a27ce5a9-29c4-4c22-a017-6615ac73c721"))                          \r
319                                 .willReturn(aResponse()\r
320                                         .withStatus(200)));\r
321         }\r
322         \r
323 \r
324         \r
325 \r
326         public static void MockDoDeleteVfModule_SDNCSuccess() {\r
327                 stubFor(post(urlEqualTo("/SDNCAdapter"))\r
328                                   .withRequestBody(containing("SvcAction>deactivate"))\r
329                                   .willReturn(aResponse()\r
330                                   .withStatus(200)\r
331                                   .withHeader("Content-Type", "text/xml")\r
332                                   .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));\r
333                 stubFor(post(urlEqualTo("/SDNCAdapter"))\r
334                                   .withRequestBody(containing("SvcAction>unassign"))\r
335                                   .willReturn(aResponse()\r
336                                   .withStatus(200)\r
337                                   .withHeader("Content-Type", "text/xml")\r
338                                   .withBodyFile("DeleteGenericVNFV1/sdncAdapterResponse.xml")));\r
339         }\r
340 \r
341         \r
342         public static void MockDoDeleteVfModule_DeleteVNFSuccess() {\r
343                 stubFor(delete(urlMatching("/vnfs/v1/vnfs/.*/vf-modules/.*"))\r
344                                 .willReturn(aResponse()\r
345                                 .withStatus(202)\r
346                                 .withHeader("Content-Type", "application/xml")));\r
347                 stubFor(delete(urlMatching("/vnfs/v1/volume-groups/78987"))\r
348                                 .willReturn(aResponse()\r
349                                 .withStatus(202)\r
350                                 .withHeader("Content-Type", "application/xml")));\r
351         }\r
352 }\r