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