2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.onap.so.bpmn.infrastructure.scripts
23 import static org.mockito.Mockito.*
25 import org.camunda.bpm.engine.delegate.BpmnError
26 import org.camunda.bpm.engine.ProcessEngineServices
27 import org.camunda.bpm.engine.RepositoryService
28 import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
29 import org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl
30 import org.camunda.bpm.engine.repository.ProcessDefinition
31 import org.camunda.bpm.engine.delegate.DelegateExecution;
32 import org.mockito.MockitoAnnotations
33 import org.mockito.runners.MockitoJUnitRunner
34 import org.mockito.internal.debugging.MockitoDebuggerImpl
35 import org.onap.so.bpmn.common.scripts.MsoUtils
36 import org.onap.so.bpmn.core.WorkflowException
37 import org.junit.Before
38 import org.junit.Rule;
40 import org.junit.Ignore
41 import org.junit.runner.RunWith
43 import static org.onap.so.bpmn.mock.StubResponseNetworkAdapter.MockNetworkAdapterRestRollbackDelete;
44 import static org.junit.Assert.*;
46 import com.github.tomakehurst.wiremock.client.WireMock;
47 import com.github.tomakehurst.wiremock.junit.WireMockRule;
49 import java.util.HashMap;
51 import java.util.UUID;
52 import org.apache.commons.lang3.*
55 @RunWith(MockitoJUnitRunner.class)
56 class DoCreateNetworkInstanceRollbackTest {
59 public WireMockRule wireMockRule = new WireMockRule(28090);
61 def utils = new MsoUtils()
62 String Prefix="CRENWKIR_"
65 String rollbackNetworkRequest =
66 """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.onap.so/network">
68 <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
69 <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
71 <networkType>CONTRAIL_EXTERNAL</networkType>
72 <networkCreated>true</networkCreated>
73 <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
74 <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
76 <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
80 </NetworkAdapter:rollbackNetwork>"""
82 String rollbackActivateSDNCRequest =
83 """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
84 xmlns:ns5="http://org.onap/so/request/types/v1"
85 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1">
86 <sdncadapter:RequestHeader>
87 <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
88 <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
89 <sdncadapter:SvcAction>rollback</sdncadapter:SvcAction>
90 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
91 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
92 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
93 </sdncadapter:RequestHeader>
94 <aetgt:SDNCRequestData>
96 <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
97 <request-action>CreateNetworkInstance</request-action>
102 </request-information>
103 <service-information>
104 <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
105 <service-type>MSO-dev-service-type</service-type>
106 <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
107 <subscriber-name>MSO_1610_dev</subscriber-name>
108 </service-information>
109 <network-information>
110 <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
111 <network-type>CONTRAIL_EXTERNAL</network-type>
112 <onap-model-information>
113 <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
114 <model-customization-uuid>customization-uuid</model-customization-uuid>
115 <model-uuid>uuid</model-uuid>
116 <model-version>version</model-version>
117 <model-name>CONTRAIL_EXTERNAL</model-name>
118 </onap-model-information>
119 </network-information>
120 <network-request-information>
121 <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
122 <network-type>CONTRAIL_EXTERNAL</network-type>
123 <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
124 <tenant>7dd5365547234ee8937416c65507d266</tenant>
125 <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
126 </network-request-information>
127 </aetgt:SDNCRequestData>
128 </aetgt:SDNCAdapterWorkflowRequest>"""
130 String rollbackSDNCRequest =
131 """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
132 xmlns:ns5="http://org.onap/so/request/types/v1"
133 xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1">
134 <sdncadapter:RequestHeader>
135 <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
136 <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
137 <sdncadapter:SvcAction>rollback</sdncadapter:SvcAction>
138 <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
139 <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
140 <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
141 </sdncadapter:RequestHeader>
142 <aetgt:SDNCRequestData>
143 <request-information>
144 <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
145 <request-action>CreateNetworkInstance</request-action>
150 </request-information>
151 <service-information>
152 <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
153 <service-type>MSO-dev-service-type</service-type>
154 <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
155 <subscriber-name>MSO_1610_dev</subscriber-name>
156 </service-information>
157 <network-information>
158 <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
159 <network-type>CONTRAIL_EXTERNAL</network-type>
160 <onap-model-information>
161 <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
162 <model-customization-uuid>customization-uuid</model-customization-uuid>
163 <model-uuid>uuid</model-uuid>
164 <model-version>version</model-version>
165 <model-name>CONTRAIL_EXTERNAL</model-name>
166 </onap-model-information>
167 </network-information>
168 <network-request-information>
169 <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
170 <network-type>CONTRAIL_EXTERNAL</network-type>
171 <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
172 <tenant>7dd5365547234ee8937416c65507d266</tenant>
173 <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
174 </network-request-information>
175 </aetgt:SDNCRequestData>
176 </aetgt:SDNCAdapterWorkflowRequest>"""
184 MockitoAnnotations.initMocks(this)
188 public void initializeVariables (DelegateExecution mockExecution) {
190 verify(mockExecution).setVariable(Prefix + "WorkflowException", null)
192 verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
193 verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
194 verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
196 verify(mockExecution).setVariable(Prefix + "rollbackSDNCRequest", null)
197 verify(mockExecution).setVariable(Prefix + "rollbackSDNCResponse", "")
198 verify(mockExecution).setVariable(Prefix + "rollbackSDNCReturnCode", "")
200 verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCRequest", null)
201 verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCResponse", "")
202 verify(mockExecution).setVariable(Prefix + "rollbackActivateSDNCReturnCode", "")
204 verify(mockExecution).setVariable(Prefix + "Success", false)
205 verify(mockExecution).setVariable(Prefix + "fullRollback", false)
206 verify(mockExecution).setVariable(Prefix + "networkId", "")
207 verify(mockExecution).setVariable(Prefix + "urlRollbackPoNetwork", "")
213 public void preProcessRequest() {
215 println "************ preProcessRequest ************* "
217 WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
218 Map<String, String> rollbackData = new HashMap<String, String>();
219 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
220 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
221 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
223 ExecutionEntity mockExecution = setupMock()
224 // Initialize prerequisite variables
225 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
226 when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
227 when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
228 when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
229 when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
231 when(mockExecution.getVariable("mso.adapters.po.auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
232 when(mockExecution.getVariable("mso.msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
234 when(mockExecution.getVariable("mso.adapters.sdnc.endpoint")).thenReturn("http://localhost:28090/SDNCAdapter")
235 when(mockExecution.getVariable("mso.adapters.network.rest.endpoint")).thenReturn("http://localhost:28090/networks/NetworkAdapter")
236 when(mockExecution.getVariable("mso.adapters.sdnc.resource.endpoint")).thenReturn("http://localhost:28090/SDNCAdapterRpc")
239 // preProcessRequest(DelegateExecution execution)
240 DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
241 DoCreateNetworkInstanceRollback.preProcessRequest(mockExecution)
243 // verify(mockExecution).getVariable("isDebugLogEnabled")
244 verify(mockExecution).setVariable("prefix", Prefix)
246 //verify variable initialization
247 initializeVariables(mockExecution)
253 public void callPONetworkAdapter() {
255 MockNetworkAdapterRestRollbackDelete("deleteNetworkResponse_Success.xml","8abc633a-810b-4ca5-8b3a-09511d13a2ce");
257 ExecutionEntity mockExecution = setupMock()
258 // Initialize prerequisite variables
259 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
260 when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
261 when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn( rollbackNetworkRequest)
262 when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn(rollbackSDNCRequest)
263 when(mockExecution.getVariable("mso.adapters.network.rest.endpoint")).thenReturn("http://localhost:28090/networks/NetworkAdapter")
265 // preProcessRequest(DelegateExecution execution)
266 DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
267 DoCreateNetworkInstanceRollback.callPONetworkAdapter(mockExecution)
269 verify(mockExecution, atLeast(1)).setVariable(Prefix + "urlRollbackPoNetwork", "http://localhost:28090/networks/NetworkAdapter/8abc633a-810b-4ca5-8b3a-09511d13a2ce/rollback")
275 public void validateRollbackResponses_Good() {
277 WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed. Error 404.")
278 WorkflowException expectedWorkflowException = new WorkflowException("DoCreateNetworkInstanceRollback", 2500, "AAI Update Contrail Failed. Error 404. + SNDC activate rollback completed. + PO Network rollback completed. + SNDC assign rollback completed.")
280 println "************ validateRollbackResponses_Good() ************* "
281 ExecutionEntity mockExecution = setupMock()
282 // Initialize prerequisite variables
283 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
284 when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
285 when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
286 when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
287 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn("Good")
288 when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
289 when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
290 when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
291 when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
292 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCReturnCode")).thenReturn("200")
293 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCResponse")).thenReturn("GoodResponse")
294 when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(workflowException)
295 when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(false)
297 DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
298 DoCreateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
300 // verify set prefix = Prefix + ""
301 verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
302 verify(mockExecution, atLeast(1)).setVariable("rolledBack", true)
303 verify(mockExecution, atLeast(1)).setVariable("wasDeleted", true)
304 verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
305 //verify(mockExecution).setVariable("WorkflowException", expectedWorkflowException)
310 public void validateRollbackResponses_FullRollback() {
312 Map<String, String> rollbackData = new HashMap<String, String>();
313 rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
314 rollbackData.put("rollbackActivateSDNCRequest", rollbackActivateSDNCRequest)
315 rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
317 println "************ validateRollbackResponses_FullRollback() ************* "
318 ExecutionEntity mockExecution = setupMock()
319 // Initialize prerequisite variables
320 when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
321 when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
322 when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
323 when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
324 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCRequest")).thenReturn("Good")
325 when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
326 when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
327 when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
328 when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
329 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCReturnCode")).thenReturn("200")
330 when(mockExecution.getVariable(Prefix + "rollbackActivateSDNCResponse")).thenReturn("GoodResponse")
331 when(mockExecution.getVariable(Prefix + "workflowException")).thenReturn(null)
332 when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(true)
333 when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
335 DoCreateNetworkInstanceRollback DoCreateNetworkInstanceRollback = new DoCreateNetworkInstanceRollback()
336 DoCreateNetworkInstanceRollback.validateRollbackResponses(mockExecution)
338 // verify set prefix = Prefix + ""
339 verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
340 verify(mockExecution, atLeast(1)).setVariable("rollbackSuccessful", true)
341 verify(mockExecution, atLeast(1)).setVariable("rollbackError", false)
346 private ExecutionEntity setupMock() {
348 ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
349 when(mockProcessDefinition.getKey()).thenReturn("DoCreateNetworkInstanceRollback")
350 RepositoryService mockRepositoryService = mock(RepositoryService.class)
351 when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
352 when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoCreateNetworkInstanceRollback")
353 when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
354 ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
355 when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
357 ExecutionEntity mockExecution = mock(ExecutionEntity.class)
358 // Initialize prerequisite variables
360 when(mockExecution.getId()).thenReturn("100")
361 when(mockExecution.getProcessDefinitionId()).thenReturn("DoCreateNetworkInstanceRollback")
362 when(mockExecution.getProcessInstanceId()).thenReturn("DoCreateNetworkInstanceRollback")
363 when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
364 when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)