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)