Containerization feature of SO
[so.git] / bpmn / so-bpmn-infrastructure-flows / src / test / groovy / org / onap / so / bpmn / infrastructure / scripts / DoDeleteNetworkInstanceRollbackTest.groovy
1 /*-
2  * ============LICENSE_START=======================================================
3  * ONAP - SO
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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=========================================================
19  */
20
21 package org.onap.so.bpmn.infrastructure.scripts
22
23
24 import static org.mockito.Mockito.*
25
26 import org.camunda.bpm.engine.delegate.BpmnError
27 import org.camunda.bpm.engine.ProcessEngineServices
28 import org.camunda.bpm.engine.RepositoryService
29 import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
30 import org.camunda.bpm.engine.impl.pvm.process.ProcessDefinitionImpl
31 import org.camunda.bpm.engine.repository.ProcessDefinition
32 import org.camunda.bpm.engine.delegate.DelegateExecution;
33 import org.mockito.MockitoAnnotations
34 import org.mockito.runners.MockitoJUnitRunner
35 import org.mockito.internal.debugging.MockitoDebuggerImpl
36 import org.onap.so.bpmn.common.scripts.MsoUtils
37 import org.onap.so.bpmn.core.WorkflowException
38 import org.junit.Before
39 import org.junit.Rule;
40 import org.junit.Test
41 import org.junit.Ignore
42 import org.junit.runner.RunWith
43
44 import static org.junit.Assert.*;
45
46 import com.github.tomakehurst.wiremock.client.WireMock;
47 import com.github.tomakehurst.wiremock.junit.WireMockRule;
48
49 import java.util.HashMap;
50 import java.util.Map;
51 import java.util.UUID;
52
53 import org.apache.commons.lang3.*
54
55
56 @RunWith(MockitoJUnitRunner.class)
57 class DoDeleteNetworkInstanceRollbackTest  {
58         
59         @Rule
60         public WireMockRule wireMockRule = new WireMockRule(8090);
61         
62                 def utils = new MsoUtils()
63                 String Prefix="DELNWKIR_"
64
65
66                 String rollbackNetworkRequest =
67                 """<NetworkAdapter:rollbackNetwork xmlns:NetworkAdapter="http://org.onap.so/network">
68    <rollback>
69       <networkId>MNS-25180-L-01-dmz_direct_net_1/2c88a3a9-69b9-43a7-ada6-1aca577c3641</networkId>
70       <neutronNetworkId>c4f4e878-cde0-4b15-ae9a-bda857759cea</neutronNetworkId>
71       <networkStackId/>
72       <networkType>CONTRAIL_EXTERNAL</networkType>
73       <networkCreated>true</networkCreated>
74       <tenantId>7dd5365547234ee8937416c65507d266</tenantId>
75       <cloudSiteId>RDM2WAGPLCP</cloudSiteId>
76       <msoRequest>
77          <requestId>1ef47428-cade-45bd-a103-0751e8b2deb0</requestId>
78          <serviceInstanceId/>
79       </msoRequest>
80    </rollback>
81 </NetworkAdapter:rollbackNetwork>"""                    
82                                                                 
83                                         String rollbackDeActivateSDNCRequest =
84                 """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
85                                   xmlns:ns5="http://org.onap/so/request/types/v1"
86                                   xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1">
87    <sdncadapter:RequestHeader>
88       <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
89       <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
90       <sdncadapter:SvcAction>activate</sdncadapter:SvcAction>
91       <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
92       <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
93       <sdncadapter:MsoAction>generic-resource</sdncadapter:MsoAction>
94    </sdncadapter:RequestHeader>
95    <aetgt:SDNCRequestData>
96       <request-information>
97          <request-id>88f65519-9a38-4c4b-8445-9eb4a5a5af56</request-id>
98          <request-action>CreateNetworkInstance</request-action>
99          <source>VID</source>
100          <notification-url/>
101          <order-number/>
102          <order-version/>
103       </request-information>
104       <service-information>
105          <service-id>a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb</service-id>
106          <service-type>MSO-dev-service-type</service-type>
107          <service-instance-id>f70e927b-6087-4974-9ef8-c5e4d5847ca4</service-instance-id>
108          <subscriber-name>MSO_1610_dev</subscriber-name>
109       </service-information>
110       <network-information>
111          <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
112          <network-type>CONTRAIL_EXTERNAL</network-type>
113          <onap-model-information>
114             <model-invariant-uuid>invariant-uuid</model-invariant-uuid>
115             <model-customization-uuid>customization-uuid</model-customization-uuid>
116             <model-uuid>uuid</model-uuid>
117             <model-version>version</model-version>
118             <model-name>CONTRAIL_EXTERNAL</model-name>
119          </onap-model-information>
120       </network-information>
121       <network-request-information>
122          <network-id>8abc633a-810b-4ca5-8b3a-09511d13a2ce</network-id>
123          <network-type>CONTRAIL_EXTERNAL</network-type>
124          <network-name>MNS-25180-L-01-dmz_direct_net_1</network-name>
125          <tenant>7dd5365547234ee8937416c65507d266</tenant>
126          <aic-cloud-region>RDM2WAGPLCP</aic-cloud-region>
127       </network-request-information>
128    </aetgt:SDNCRequestData>
129 </aetgt:SDNCAdapterWorkflowRequest>"""                  
130                 
131                                         String rollbackSDNCRequest =
132                 """<aetgt:SDNCAdapterWorkflowRequest xmlns:aetgt="http://org.onap/so/workflow/schema/v1"
133                                   xmlns:ns5="http://org.onap/so/request/types/v1"
134                                   xmlns:sdncadapter="http://org.onap.so/workflow/sdnc/adapter/schema/v1">
135    <sdncadapter:RequestHeader>
136       <sdncadapter:RequestId>88f65519-9a38-4c4b-8445-9eb4a5a5af56</sdncadapter:RequestId>
137       <sdncadapter:SvcInstanceId>f70e927b-6087-4974-9ef8-c5e4d5847ca4</sdncadapter:SvcInstanceId>
138       <sdncadapter:SvcAction>rollback</sdncadapter:SvcAction>
139       <sdncadapter:SvcOperation>network-topology-operation</sdncadapter:SvcOperation>
140       <sdncadapter:CallbackUrl>sdncCallback</sdncadapter:CallbackUrl>
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>
146          <source>VID</source>
147          <notification-url/>
148          <order-number/>
149          <order-version/>
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>"""                  
177                 
178 // - - - - - - - -
179
180
181             @Before
182                 public void init()
183                 {
184                         MockitoAnnotations.initMocks(this)
185                 }
186                 
187                 public void initializeVariables (DelegateExecution mockExecution) {
188
189                         verify(mockExecution).setVariable(Prefix + "WorkflowException", null)
190                 
191                         verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCRequest", null)
192                         verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCResponse", "")
193                         verify(mockExecution).setVariable(Prefix + "rollbackDeactivateSDNCReturnCode", "")
194         
195                         verify(mockExecution).setVariable(Prefix + "rollbackNetworkRequest", null)
196                         verify(mockExecution).setVariable(Prefix + "rollbackNetworkResponse", "")
197                         verify(mockExecution).setVariable(Prefix + "rollbackNetworkReturnCode", "")
198                                         
199                         verify(mockExecution).setVariable(Prefix + "Success", false)
200                         verify(mockExecution).setVariable(Prefix + "fullRollback", false)
201                         
202                 }
203                 
204                 @Test
205                 //@Ignore  
206                 public void preProcessRequest() {
207                         
208                         println "************ preProcessRequest ************* " 
209                         
210                         WorkflowException workflowException = new WorkflowException("DoCreateNetworkInstance", 2500, "Received error from Network Adapter: JBWEB000065: HTTP Status 500.")
211                         Map<String, String> rollbackData = new HashMap<String, String>();
212                         rollbackData.put("rollbackDeactivateSDNCRequest", rollbackDeActivateSDNCRequest)
213                         rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
214                         rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
215                                         
216                         ExecutionEntity mockExecution = setupMock()
217                         // Initialize prerequisite variables
218                         when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
219                         when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
220                         when(mockExecution.getVariable("WorkflowException")).thenReturn(workflowException)
221                         when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
222                         when(mockExecution.getVariable("sdncVersion")).thenReturn("1702")
223                         
224                         when(mockExecution.getVariable("mso.adapters.po.auth")).thenReturn("3141634BF7E070AA289CF2892C986C0B")
225                         when(mockExecution.getVariable("mso.msoKey")).thenReturn("07a7159d3bf51a0e53be7a8f89699be7")
226                         
227                         when(mockExecution.getVariable("mso.adapters.sdnc.endpoint")).thenReturn("http://localhost:8090/SDNCAdapter")
228                         when(mockExecution.getVariable("mso.adapters.network.rest.endpoint")).thenReturn("http://localhost:8090/networks/NetworkAdapter")
229                         when(mockExecution.getVariable("mso.adapters.sdnc.resource.endpoint")).thenReturn("http://localhost:8090/SDNCAdapterRpc")
230                         
231                         
232                         // preProcessRequest(DelegateExecution execution)                                               
233                         DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
234                         DoDeleteNetworkInstanceRollback.preProcessRequest(mockExecution)
235
236                         //verify variable initialization
237                         initializeVariables(mockExecution)
238                         
239 //                      verify(mockExecution).getVariable("isDebugLogEnabled")
240                         verify(mockExecution).setVariable("prefix", Prefix)
241                                                                 
242                 }
243                 
244
245                 @Test
246                 //@Ignore
247                 public void validateRollbackResponses_Good() {
248                         
249                         WorkflowException workflowException = new WorkflowException("DoDeleteNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404.")
250                         WorkflowException expectedWorkflowException = new WorkflowException("DoDeleteNetworkInstanceRollback", 2500, "AAI Update Contrail Failed.  Error 404. + SNDC deactivate rollback completed. + PO Network rollback completed. + SNDC unassign rollback completed.")
251                                   
252                         println "************ validateRollbackResponses_Good() ************* "
253                         ExecutionEntity mockExecution = setupMock()
254                         // Initialize prerequisite variables
255                         when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
256                         when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
257
258                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")).thenReturn("Good")
259                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCReturnCode")).thenReturn("200")
260                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCResponse")).thenReturn("GoodResponse")
261                         when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
262                         when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
263                         when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
264                         when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
265                         when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
266                         when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
267                         when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(workflowException)
268                         when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(false)
269                                                                         
270                         DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
271                         DoDeleteNetworkInstanceRollback.validateRollbackResponses(mockExecution)
272                         
273                         // verify set prefix = Prefix + ""
274                         verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
275                         verify(mockExecution, atLeast(1)).setVariable("rolledBack", true)
276                         verify(mockExecution, atLeast(1)).setVariable("wasDeleted", true)
277                         verify(mockExecution).setVariable("WorkflowException", refEq(expectedWorkflowException, any(WorkflowException.class)))
278                         //verify(mockExecution).setVariable("WorkflowException", expectedWorkflowException)
279                 }
280                 
281                 @Test
282                 //@Ignore
283                 public void validateRollbackResponses_FullRollback() {
284                         
285                         Map<String, String> rollbackData = new HashMap<String, String>();
286                         rollbackData.put("rollbackDeactivateSDNCRequest", rollbackDeActivateSDNCRequest)
287                         rollbackData.put("rollbackNetworkRequest", rollbackNetworkRequest)
288                         rollbackData.put("rollbackSDNCRequest", rollbackSDNCRequest)
289                                   
290                         println "************ validateRollbackResponses_FullRollback() ************* "
291                         ExecutionEntity mockExecution = setupMock()
292                         // Initialize prerequisite variables
293                         when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn("true")
294                         when(mockExecution.getVariable("prefix")).thenReturn(Prefix + "")
295
296                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCRequest")).thenReturn("Good")
297                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCReturnCode")).thenReturn("200")
298                         when(mockExecution.getVariable(Prefix + "rollbackDeactivateSDNCResponse")).thenReturn("GoodResponse")
299                         when(mockExecution.getVariable(Prefix + "rollbackNetworkRequest")).thenReturn("Good")
300                         when(mockExecution.getVariable(Prefix + "rollbackNetworkReturnCode")).thenReturn("200")
301                         when(mockExecution.getVariable(Prefix + "rollbackNetworkResponse")).thenReturn("GoodResponse")
302                         when(mockExecution.getVariable(Prefix + "rollbackSDNCRequest")).thenReturn("Good")
303                         when(mockExecution.getVariable(Prefix + "rollbackSDNCReturnCode")).thenReturn("200")
304                         when(mockExecution.getVariable(Prefix + "rollbackSDNCResponse")).thenReturn("GoodResponse")
305                         when(mockExecution.getVariable(Prefix + "WorkflowException")).thenReturn(null)
306                         when(mockExecution.getVariable(Prefix + "fullRollback")).thenReturn(true)
307                         when(mockExecution.getVariable("rollbackData")).thenReturn(rollbackData)
308                                                                         
309                         DoDeleteNetworkInstanceRollback DoDeleteNetworkInstanceRollback = new DoDeleteNetworkInstanceRollback()
310                         DoDeleteNetworkInstanceRollback.validateRollbackResponses(mockExecution)
311                         
312                         // verify set prefix = Prefix + ""
313                         verify(mockExecution, atLeast(1)).setVariable("prefix", Prefix)
314                         verify(mockExecution, atLeast(1)).setVariable("rollbackSuccessful", true)
315                         verify(mockExecution, atLeast(1)).setVariable("rollbackError", false)
316                         
317                 }
318                 
319                 
320                 private ExecutionEntity setupMock() {
321                         
322                         ProcessDefinition mockProcessDefinition = mock(ProcessDefinition.class)
323                         when(mockProcessDefinition.getKey()).thenReturn("DoDeleteNetworkInstanceRollback")
324                         RepositoryService mockRepositoryService = mock(RepositoryService.class)
325                         when(mockRepositoryService.getProcessDefinition()).thenReturn(mockProcessDefinition)
326                         when(mockRepositoryService.getProcessDefinition().getKey()).thenReturn("DoDeleteNetworkInstanceRollback")
327                         when(mockRepositoryService.getProcessDefinition().getId()).thenReturn("100")
328                         ProcessEngineServices mockProcessEngineServices = mock(ProcessEngineServices.class)
329                         when(mockProcessEngineServices.getRepositoryService()).thenReturn(mockRepositoryService)
330                         
331                         ExecutionEntity mockExecution = mock(ExecutionEntity.class)
332                         // Initialize prerequisite variables
333                         
334                         when(mockExecution.getId()).thenReturn("100")
335                         when(mockExecution.getProcessDefinitionId()).thenReturn("DoDeleteNetworkInstanceRollback")
336                         when(mockExecution.getProcessInstanceId()).thenReturn("DoDeleteNetworkInstanceRollback")
337                         when(mockExecution.getProcessEngineServices()).thenReturn(mockProcessEngineServices)
338                         when(mockExecution.getProcessEngineServices().getRepositoryService().getProcessDefinition(mockExecution.getProcessDefinitionId())).thenReturn(mockProcessDefinition)
339                         
340                         return mockExecution
341                 }
342                 
343 }