Merge "Reorder modifiers"
[so.git] / bpmn / MSOInfrastructureBPMN / src / test / java / org / openecomp / mso / bpmn / infrastructure / DoUpdateVfModuleTest.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 \r
24 \r
25 import static com.github.tomakehurst.wiremock.client.WireMock.aResponse;\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.mock.StubResponseAAI.MockAAIVfModule;\r
32 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithDepth;\r
33 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetGenericVnfByIdWithPriority;\r
34 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVfModuleIdNoResponse;\r
35 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockGetVolumeGroupById;\r
36 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchGenericVnf;\r
37 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPatchVfModuleId;\r
38 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutGenericVnf;\r
39 import static org.openecomp.mso.bpmn.mock.StubResponseAAI.MockPutVfModuleIdNoResponse;\r
40 import static org.openecomp.mso.bpmn.mock.StubResponseDatabase.MockGetServiceResourcesCatalogData;\r
41 import static org.openecomp.mso.bpmn.mock.StubResponseSDNCAdapter.mockSDNCAdapter;\r
42 import static org.openecomp.mso.bpmn.mock.StubResponseVNFAdapter.mockVNFPut;\r
43 \r
44 import java.io.IOException;\r
45 import java.util.HashMap;\r
46 import java.util.Map;\r
47 import java.util.UUID;\r
48 \r
49 import org.camunda.bpm.engine.test.Deployment;\r
50 import org.junit.Assert;\r
51 import org.junit.Ignore;\r
52 import org.junit.Test;\r
53 import org.openecomp.mso.bpmn.common.WorkflowTest;\r
54 import org.openecomp.mso.bpmn.mock.FileUtil;\r
55 \r
56 /**\r
57  * Unit tests for DoUpdateVfModule.bpmn.\r
58  */\r
59 public class DoUpdateVfModuleTest extends WorkflowTest {\r
60         \r
61         private final CallbackSet callbacks = new CallbackSet();\r
62 \r
63         public DoUpdateVfModuleTest() throws IOException {\r
64                 callbacks.put("changeassign", FileUtil.readResourceFile(\r
65                         "__files/VfModularity/SDNCTopologyChangeAssignCallback.xml"));\r
66                 callbacks.put("query", FileUtil.readResourceFile(\r
67                         "__files/VfModularity/SDNCTopologyQueryCallback.xml"));\r
68                 callbacks.put("activate", FileUtil.readResourceFile(\r
69                         "__files/VfModularity/SDNCTopologyActivateCallback.xml"));\r
70                 callbacks.put("vnfUpdate", FileUtil.readResourceFile(\r
71                         "__files/VfModularity/VNFAdapterRestUpdateCallback.xml"));\r
72         }\r
73 \r
74         /**\r
75          * Test the happy path through the flow.\r
76          */\r
77         @Test   \r
78         @Ignore\r
79         @Deployment(resources = {\r
80                         "subprocess/DoUpdateVfModule.bpmn",\r
81                         "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
82                         "subprocess/ConfirmVolumeGroupTenant.bpmn",\r
83                         "subprocess/SDNCAdapterV1.bpmn",\r
84                         "subprocess/VnfAdapterRestV1.bpmn",\r
85                         "subprocess/UpdateAAIGenericVnf.bpmn",\r
86                         "subprocess/UpdateAAIVfModule.bpmn"\r
87                 })\r
88         public void happyPath() throws IOException {\r
89                 \r
90                 logStart();\r
91                 \r
92                 String doUpdateVfModuleRequest = FileUtil.readResourceFile("__files/VfModularity/DoUpdateVfModuleRequest.xml");\r
93                 MockGetGenericVnfByIdWithDepth("skask", 1, "VfModularity/GenericVnf.xml");\r
94                 MockGetVfModuleIdNoResponse("skask", "PCRF", "supercool");\r
95                 MockPutVfModuleIdNoResponse("skask", "PCRF", "supercool");\r
96                 MockGetVolumeGroupById("MDTWNJ21", "78987", "VfModularity/VolumeGroup.xml");\r
97                 mockSDNCAdapter("/SDNCAdapter", "SvcAction>query", 200, "VfModularity/StandardSDNCSynchResponse.xml");\r
98                 mockSDNCAdapter("/SDNCAdapter", "SvcInstanceId><", 200, "VfModularity/StandardSDNCSynchResponse.xml");\r
99                 mockVNFPut("skask", "/supercool", 202);\r
100                 MockPutGenericVnf("skask");\r
101                 MockGetGenericVnfByIdWithPriority("skask", "supercool", 200, "VfModularity/VfModule-supercool.xml", 1);\r
102                 //Catalog DB\r
103                 MockGetServiceResourcesCatalogData("aa5256d2-5a33-55df-13ab-12abad84e7ff","InfrastructureFlows/DoCreateServiceInstance_request.json");\r
104                 \r
105                 String businessKey = UUID.randomUUID().toString();\r
106                 Map<String, Object> variables = new HashMap<>();\r
107                 variables.put("mso-request-id", "DEV-VF-0011");\r
108                 variables.put("isDebugLogEnabled","true");\r
109                 variables.put("DoUpdateVfModuleRequest", doUpdateVfModuleRequest);\r
110                 invokeSubProcess("DoUpdateVfModule", businessKey, variables);\r
111                 \r
112                 injectSDNCCallbacks(callbacks, "changeassign, query");\r
113                 injectVNFRestCallbacks(callbacks, "vnfUpdate");\r
114                 injectSDNCCallbacks(callbacks, "activate");\r
115 \r
116                 waitForProcessEnd(businessKey, 10000);\r
117                 \r
118                 Assert.assertTrue(isProcessEnded(businessKey));\r
119                 checkVariable(businessKey, "DoUpdateVfModuleSuccessIndicator", true);\r
120                 \r
121                 String heatStackId = (String) getVariableFromHistory(businessKey, "DOUPVfMod_heatStackId");\r
122                 System.out.println("Heat stack Id from AAI: " + heatStackId);\r
123                 \r
124                 logEnd();\r
125         }\r
126         \r
127         /**\r
128          * Test the happy path through the flow with Building Blocks interface.\r
129          */\r
130         @Test   \r
131         \r
132         @Deployment(resources = {\r
133                         "subprocess/DoUpdateVfModule.bpmn",\r
134                         "subprocess/PrepareUpdateAAIVfModule.bpmn",\r
135                         "subprocess/ConfirmVolumeGroupTenant.bpmn",\r
136                         "subprocess/SDNCAdapterV1.bpmn",\r
137                         "subprocess/VnfAdapterRestV1.bpmn",\r
138                         "subprocess/UpdateAAIGenericVnf.bpmn",\r
139                         "subprocess/UpdateAAIVfModule.bpmn"\r
140                 })\r
141         public void happyPathBB() throws IOException {\r
142                 \r
143                 logStart();\r
144                 \r
145                 MockAAIVfModule();\r
146                 MockPatchGenericVnf("skask");\r
147                 MockPatchVfModuleId("skask", ".*");\r
148                 MockSDNCAdapterVfModule();\r
149                 MockVNFAdapterRestVfModule();\r
150                 //Catalog DB\r
151                 MockGetServiceResourcesCatalogData("aa5256d2-5a33-55df-13ab-12abad84e7ff","InfrastructureFlows/DoCreateServiceInstance_request.json");\r
152                 \r
153                 String businessKey = UUID.randomUUID().toString();\r
154                 Map<String, Object> variables = new HashMap<>();\r
155                 variables.put("mso-request-id", "DEV-VF-0011");\r
156                 variables.put("isDebugLogEnabled","true");\r
157                 variables.put("msoRequestId", "DEV-VF-0011");\r
158                 variables.put("isBaseVfModule", "false");\r
159                 variables.put("isDebugLogEnabled", "true");\r
160                 variables.put("disableRollback", "true");\r
161                 variables.put("serviceInstanceId", "f70e927b-6087-4974-9ef8-c5e4d5847ca4");\r
162                 variables.put("vnfId", "skask");\r
163                 variables.put("vfModuleId", "supercool");\r
164                 variables.put("vnfType", "pcrf-capacity");\r
165                 variables.put("isVidRequest", "true");\r
166                 variables.put("volumeGroupId", "78987");\r
167                 variables.put("usePreload", true);\r
168                 \r
169                 variables.put("sdncVersion", "1702");\r
170                 \r
171                 variables.put("lcpCloudRegionId", "MDTWNJ21");\r
172                 variables.put("tenantId", "fba1bd1e195a404cacb9ce17a9b2b421");\r
173                 \r
174                 String vfModuleModelInfo = "{ "+ "\"modelType\": \"vfModule\"," +\r
175                                 "\"modelInvariantUuid\": \"introvert\"," + \r
176                                 "\"modelUuid\": \"3.14\"," +\r
177                                 "\"modelName\": \"STMTN5MMSC21-MMSC::model-1-0\"," +\r
178                                 "\"modelVersion\": \"1\"," + \r
179                                 "\"modelCustomizationUuid\": \"MODEL-123\"" + "}";\r
180                 variables.put("vfModuleModelInfo", vfModuleModelInfo);\r
181                 \r
182                 String vnfModelInfo = "{ "+ "\"modelType\": \"vnf\"," +\r
183                                 "\"modelInvariantUuid\": \"introvert\"," + \r
184                                 "\"modelUuid\": \"3.14\"," +\r
185                                 "\"modelName\": \"VNF-STMTN5MMSC21-MMSC::model-1-0\"," +\r
186                                 "\"modelVersion\": \"1\"," + \r
187                                 "\"modelCustomizationUuid\": \"VNF-MODEL-123\"" + "}";\r
188         variables.put("vnfModelInfo", vnfModelInfo);\r
189         \r
190         String serviceModelInfo = "{ "+ "\"modelType\": \"service\"," +\r
191                         "\"modelInvariantUuid\": \"aa5256d2-5a33-55df-13ab-12abad84e7ff\"," + \r
192                         "\"modelUuid\": \"bb6478e5-ea33-3346-ac12-ab121484a3fe\"," +\r
193                         "\"modelName\": \"SVC-STMTN5MMSC21-MMSC::model-1-0\"," +\r
194                         "\"modelVersion\": \"1\"," + \r
195                          "}";\r
196         variables.put("serviceModelInfo", serviceModelInfo);\r
197                 \r
198                 invokeSubProcess("DoUpdateVfModule", businessKey, variables);\r
199                 \r
200                 injectSDNCCallbacks(callbacks, "changeassign, query");\r
201                 injectVNFRestCallbacks(callbacks, "vnfUpdate");\r
202                 injectSDNCCallbacks(callbacks, "activate");\r
203 \r
204                 waitForProcessEnd(businessKey, 10000);\r
205                 \r
206                 Assert.assertTrue(isProcessEnded(businessKey));\r
207                 checkVariable(businessKey, "DoUpdateVfModuleSuccessIndicator", true);\r
208                 \r
209                 String heatStackId = (String) getVariableFromHistory(businessKey, "DOUPVfMod_heatStackId");\r
210                 System.out.println("Heat stack Id from AAI: " + heatStackId);\r
211                 \r
212                 logEnd();\r
213         }\r
214         \r
215         // start of mocks used locally and by other VF Module unit tests\r
216         public static void MockSDNCAdapterVfModule() {\r
217                 // simplified the implementation to return "success" for all requests\r
218                 stubFor(post(urlEqualTo("/SDNCAdapter"))\r
219 //                      .withRequestBody(containing("SvcInstanceId><"))\r
220                         .willReturn(aResponse()\r
221                                 .withStatus(200)\r
222                                 .withHeader("Content-Type", "text/xml")\r
223                                 .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
224 //              stubFor(post(urlEqualTo("/SDNCAdapter"))\r
225 //                              .withRequestBody(containing("vnf-type>STMTN"))\r
226 //                              .willReturn(aResponse()\r
227 //                                      .withStatus(200)\r
228 //                                      .withHeader("Content-Type", "text/xml")\r
229 //                                      .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
230 //              stubFor(post(urlEqualTo("/SDNCAdapter"))\r
231 //                              .withRequestBody(containing("SvcAction>query"))\r
232 //                              .willReturn(aResponse()\r
233 //                                      .withStatus(200)\r
234 //                                      .withHeader("Content-Type", "text/xml")\r
235 //                                      .withBodyFile("VfModularity/StandardSDNCSynchResponse.xml")));\r
236         }\r
237 \r
238         public static void MockVNFAdapterRestVfModule() {\r
239                 stubFor(put(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules/supercool"))\r
240                         .willReturn(aResponse()\r
241                                 .withStatus(202)\r
242                                 .withHeader("Content-Type", "application/xml")));\r
243                 stubFor(post(urlMatching("/vnfs/v1/vnfs/.*/vf-modules"))\r
244                                 .willReturn(aResponse()\r
245                                         .withStatus(202)\r
246                                         .withHeader("Content-Type", "application/xml")));\r
247                 stubFor(post(urlEqualTo("/vnfs/v1/vnfs/skask/vf-modules"))\r
248                         .willReturn(aResponse()\r
249                                 .withStatus(202)\r
250                                 .withHeader("Content-Type", "application/xml")));\r
251                 stubFor(put(urlEqualTo("/vnfs/v1/volume-groups/78987"))\r
252                         .willReturn(aResponse()\r
253                                 .withStatus(202)\r
254                                 .withHeader("Content-Type", "application/xml")));\r
255         }\r
256 }\r
257 \r