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