2  * ============LICENSE_START=======================================================
 
   4  * ================================================================================
 
   5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
 
   6  * ================================================================================
 
   7  * Modifications Copyright (c) 2019 Samsung
 
   8  * ================================================================================
 
   9  * Licensed under the Apache License, Version 2.0 (the "License");
 
  10  * you may not use this file except in compliance with the License.
 
  11  * You may obtain a copy of the License at
 
  13  *      http://www.apache.org/licenses/LICENSE-2.0
 
  15  * Unless required by applicable law or agreed to in writing, software
 
  16  * distributed under the License is distributed on an "AS IS" BASIS,
 
  17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
  18  * See the License for the specific language governing permissions and
 
  19  * limitations under the License.
 
  20  * ============LICENSE_END=========================================================
 
  23 package org.onap.so.bpmn.vcpe.scripts
 
  25 import org.camunda.bpm.engine.delegate.BpmnError
 
  26 import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
 
  28 import org.mockito.MockitoAnnotations
 
  29 import org.onap.so.bpmn.core.UrnPropertiesReader
 
  30 import org.onap.so.bpmn.core.WorkflowException
 
  31 import org.onap.so.bpmn.mock.FileUtil
 
  32 import org.onap.so.client.aai.AAIObjectType
 
  33 import org.onap.so.client.aai.AAIResourcesClient
 
  34 import org.onap.so.client.aai.entities.uri.AAIUriFactory
 
  36 import javax.ws.rs.core.UriBuilder
 
  38 import static org.junit.Assert.*
 
  39 import static org.mockito.Mockito.*
 
  40 import static org.onap.so.bpmn.mock.StubResponseAAI.MockGetAllottedResource
 
  41 import static org.onap.so.bpmn.mock.StubResponseAAI.MockPatchAllottedResource
 
  42 import static org.onap.so.bpmn.mock.StubResponseAAI.MockPutAllottedResource
 
  43 import static org.onap.so.bpmn.mock.StubResponseAAI.MockPutAllottedResource_500
 
  45 import org.onap.so.bpmn.core.RollbackData
 
  47 import com.github.tomakehurst.wiremock.junit.WireMockRule
 
  49 class DoCreateAllottedResourceTXCTest extends GroovyTestBase {
 
  52     public WireMockRule wireMockRule = new WireMockRule(PORT)
 
  54     String Prefix = "DCARTXC_"
 
  57     public static void setUpBeforeClass() {
 
  58         aaiUriPfx = UrnPropertiesReader.getVariable("aai.endpoint")
 
  63         MockitoAnnotations.initMocks(this)
 
  66     public DoCreateAllottedResourceTXCTest() {
 
  67         super("DoCreateAllottedResourceTXC")
 
  70     // ***** preProcessRequest *****
 
  72     public void preProcessRequest() {
 
  73         ExecutionEntity mex = setupMock()
 
  76         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
  77         DoCreateAllottedResourceTXC.preProcessRequest(mex)
 
  79         verify(mex).setVariable("prefix", Prefix)
 
  81         assertTrue(checkMissingPreProcessRequest("mso.workflow.sdncadapter.callback"))
 
  82         assertTrue(checkMissingPreProcessRequest("mso.workflow.sdnc.replication.delay"))
 
  83         assertTrue(checkMissingPreProcessRequest("serviceInstanceId"))
 
  84         assertTrue(checkMissingPreProcessRequest("parentServiceInstanceId"))
 
  85         assertTrue(checkMissingPreProcessRequest("allottedResourceModelInfo"))
 
  86         assertTrue(checkMissingPreProcessRequest("brgWanMacAddress"))
 
  87         assertTrue(checkMissingPreProcessRequest("allottedResourceRole"))
 
  88         assertTrue(checkMissingPreProcessRequest("allottedResourceType"))
 
  91     // ***** getAaiAR *****
 
  95     public void getAaiAR() {
 
  96         MockGetAllottedResource(wireMockRule, CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 
  98         ExecutionEntity mex = setupMock()
 
 101         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 102         DoCreateAllottedResourceTXC.getAaiAR(mex)
 
 104         verify(mex).setVariable("foundActiveAR", true)
 
 109     public void getAaiAR_Duplicate() {
 
 110         MockGetAllottedResource(wireMockRule, CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 
 112         ExecutionEntity mex = setupMock()
 
 116         when(mex.getVariable("failExists")).thenReturn("true")
 
 118         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 120         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.getAaiAR(mex) }))
 
 124     public void getAaiAR_NotActive() {
 
 125         MockGetAllottedResource(wireMockRule, CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 
 127         ExecutionEntity mex = setupMock()
 
 131         when(mex.getVariable("aaiAROrchStatus")).thenReturn("not-active")
 
 133         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 135         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.getAaiAR(mex) }))
 
 140     public void getAaiAR_NoStatus() {
 
 141         MockGetAllottedResource(wireMockRule, CUST, SVC, INST, ARID, "VCPE/DoCreateAllottedResourceTXC/getArTxc.xml")
 
 143         ExecutionEntity mex = setupMock()
 
 146         when(mex.getVariable("aaiAROrchStatus")).thenReturn(null)
 
 148         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 149         DoCreateAllottedResourceTXC.getAaiAR(mex)
 
 151         verify(mex, never()).setVariable("foundActiveAR", true)
 
 154     // ***** createAaiAR *****
 
 157     public void createAaiAR() {
 
 158         ExecutionEntity mex = setupMock()
 
 160         when(mex.getVariable("PSI_resourceLink")).thenReturn(AAIUriFactory.createResourceFromExistingURI(AAIObjectType.SERVICE_INSTANCE, UriBuilder.fromPath("/aai/v9/business/customers/customer/" + CUST + "/service-subscriptions/service-subscription/" + SVC + "/service-instances/service-instance/" + INST).build()))
 
 161         when(mex.getVariable("CSI_resourceLink")).thenReturn("/aai/v9/business/customers/customer/" + CUST + "/service-subscriptions/service-subscription/" + SVC + "/service-instances/service-instance/" + INST)
 
 162         when(mex.getVariable("allottedResourceModelInfo")).thenReturn("{\n" +
 
 163                 "  \"modelInvariantUuid\":\"modelInvariantUuid\",\n" +
 
 164                 "  \"modelUuid\" : \"modelUuid\"\n" +
 
 166         AAIResourcesClient client = mock(AAIResourcesClient.class)
 
 167         DoCreateAllottedResourceTXC doCreateAllottedResourceTXC = spy(DoCreateAllottedResourceTXC.class)
 
 168         when(doCreateAllottedResourceTXC.getAAIClient()).thenReturn(client)
 
 169         doCreateAllottedResourceTXC.createAaiAR(mex)
 
 174     public void createAaiAR_MissingPsiLink() {
 
 175         ExecutionEntity mex = setupMock()
 
 178         when(mex.getVariable("PSI_resourceLink")).thenReturn(null)
 
 180         MockPutAllottedResource(wireMockRule, CUST, SVC, INST, ARID)
 
 182         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 184         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.createAaiAR(mex) }))
 
 188     public void createAaiAR_HttpFailed() {
 
 189         ExecutionEntity mex = setupMock()
 
 192         MockPutAllottedResource_500(wireMockRule, CUST, SVC, INST, ARID)
 
 194         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 196         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.createAaiAR(mex) }))
 
 200     public void createAaiAR_BpmnError() {
 
 201         ExecutionEntity mex = setupMock()
 
 204         when(mex.getVariable("aai.endpoint")).thenThrow(new BpmnError("expected exception"))
 
 206         MockPutAllottedResource(wireMockRule, CUST, SVC, INST, ARID)
 
 208         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 210         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.createAaiAR(mex) }))
 
 214     public void createAaiAR_Ex() {
 
 215         ExecutionEntity mex = setupMock()
 
 218         when(mex.getVariable("aai.endpoint")).thenThrow(new RuntimeException("expected exception"))
 
 220         MockPutAllottedResource(wireMockRule, CUST, SVC, INST, ARID)
 
 222         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 224         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.createAaiAR(mex) }))
 
 227     // ***** buildSDNCRequest *****
 
 230     public void buildSDNCRequest() {
 
 231         ExecutionEntity mex = setupMock()
 
 232         initBuildSDNCRequest(mex)
 
 234         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 236         String result = DoCreateAllottedResourceTXC.buildSDNCRequest(mex, "myact", "myreq")
 
 238         assertTrue(result.indexOf("<sdncadapter:RequestId>myreq</") >= 0)
 
 239         assertTrue(result.indexOf("<sdncadapter:SvcAction>myact</") >= 0)
 
 240         assertTrue(result.indexOf("<allotted-resource-id>ari</") >= 0)
 
 241         assertTrue(result.indexOf("<sdncadapter:SvcInstanceId>sii</") >= 0)
 
 242         assertTrue(result.indexOf("<service-instance-id>sii</") >= 0)
 
 243         assertTrue(result.indexOf("<parent-service-instance-id>psii</") >= 0)
 
 244         assertTrue(result.indexOf("<subscription-service-type>sst</") >= 0)
 
 245         assertTrue(result.indexOf("<global-customer-id>gci</") >= 0)
 
 246         assertTrue(result.indexOf("<sdncadapter:CallbackUrl>scu</") >= 0)
 
 247         assertTrue(result.indexOf("<request-id>mri</") >= 0)
 
 248         assertTrue(result.indexOf("<model-invariant-uuid/>") >= 0)
 
 249         assertTrue(result.indexOf("<model-uuid/>") >= 0)
 
 250         assertTrue(result.indexOf("<model-customization-uuid/>") >= 0)
 
 251         assertTrue(result.indexOf("<model-version/>") >= 0)
 
 252         assertTrue(result.indexOf("<model-name/>") >= 0)
 
 256     public void buildSDNCRequest_Ex() {
 
 257         ExecutionEntity mex = setupMock()
 
 258         initBuildSDNCRequest(mex)
 
 260         when(mex.getVariable("allottedResourceId")).thenThrow(new RuntimeException("expected exception"))
 
 262         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 264         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.buildSDNCRequest(mex, "myact", "myreq") }))
 
 267     // ***** preProcessSDNCAssign *****
 
 270     public void preProcessSDNCAssign() {
 
 271         ExecutionEntity mex = setupMock()
 
 272         def map = setupMap(mex)
 
 273         def data = initPreProcessSDNC(mex)
 
 275         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 276         DoCreateAllottedResourceTXC.preProcessSDNCAssign(mex)
 
 278         def req = map.get("sdncAssignRequest")
 
 281         assertEquals(data, map.get("rollbackData"))
 
 283         def rbreq = data.get(Prefix, "sdncAssignRollbackReq")
 
 285         assertTrue(req.indexOf("<sdncadapter:SvcAction>assign</") >= 0)
 
 286         assertTrue(req.indexOf("<request-action>CreateTunnelXConnInstance</") >= 0)
 
 287         assertTrue(req.indexOf("<sdncadapter:RequestId>") >= 0)
 
 289         assertTrue(rbreq.indexOf("<sdncadapter:SvcAction>unassign</") >= 0)
 
 290         assertTrue(rbreq.indexOf("<request-action>DeleteTunnelXConnInstance</") >= 0)
 
 291         assertTrue(rbreq.indexOf("<sdncadapter:RequestId>") >= 0)
 
 295     public void preProcessSDNCAssign_BpmnError() {
 
 296         ExecutionEntity mex = setupMock()
 
 297         initPreProcessSDNC(mex)
 
 299         when(mex.getVariable("rollbackData")).thenThrow(new BpmnError("expected exception"))
 
 301         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 303         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCAssign(mex) }))
 
 307     public void preProcessSDNCAssign_Ex() {
 
 308         ExecutionEntity mex = setupMock()
 
 309         initPreProcessSDNC(mex)
 
 311         when(mex.getVariable("rollbackData")).thenThrow(new RuntimeException("expected exception"))
 
 313         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 315         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCAssign(mex) }))
 
 318     // ***** preProcessSDNCCreate *****
 
 321     public void preProcessSDNCCreate() {
 
 322         ExecutionEntity mex = setupMock()
 
 323         def map = setupMap(mex)
 
 324         def data = initPreProcessSDNC(mex)
 
 326         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 327         DoCreateAllottedResourceTXC.preProcessSDNCCreate(mex)
 
 329         def req = map.get("sdncCreateRequest")
 
 332         assertEquals(data, map.get("rollbackData"))
 
 334         def rbreq = data.get(Prefix, "sdncCreateRollbackReq")
 
 336         assertTrue(req.indexOf("<sdncadapter:SvcAction>create</") >= 0)
 
 337         assertTrue(req.indexOf("<request-action>CreateTunnelXConnInstance</") >= 0)
 
 338         assertTrue(req.indexOf("<sdncadapter:RequestId>") >= 0)
 
 340         assertTrue(rbreq.indexOf("<sdncadapter:SvcAction>delete</") >= 0)
 
 341         assertTrue(rbreq.indexOf("<request-action>DeleteTunnelXConnInstance</") >= 0)
 
 342         assertTrue(rbreq.indexOf("<sdncadapter:RequestId>") >= 0)
 
 347     public void preProcessSDNCCreate_BpmnError() {
 
 348         ExecutionEntity mex = setupMock()
 
 349         initPreProcessSDNC(mex)
 
 351         when(mex.getVariable("rollbackData")).thenThrow(new BpmnError("expected exception"))
 
 353         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 355         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCCreate(mex) }))
 
 359     public void preProcessSDNCCreate_Ex() {
 
 360         ExecutionEntity mex = setupMock()
 
 361         initPreProcessSDNC(mex)
 
 363         when(mex.getVariable("rollbackData")).thenThrow(new RuntimeException("expected exception"))
 
 365         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 367         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCCreate(mex) }))
 
 370     // ***** preProcessSDNCActivate *****
 
 373     public void preProcessSDNCActivate() {
 
 374         ExecutionEntity mex = setupMock()
 
 375         def map = setupMap(mex)
 
 376         def data = initPreProcessSDNC(mex)
 
 378         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 379         DoCreateAllottedResourceTXC.preProcessSDNCActivate(mex)
 
 381         def req = map.get("sdncActivateRequest")
 
 384         assertEquals(data, map.get("rollbackData"))
 
 386         def rbreq = data.get(Prefix, "sdncActivateRollbackReq")
 
 388         assertTrue(req.indexOf("<sdncadapter:SvcAction>activate</") >= 0)
 
 389         assertTrue(req.indexOf("<request-action>CreateTunnelXConnInstance</") >= 0)
 
 390         assertTrue(req.indexOf("<sdncadapter:RequestId>") >= 0)
 
 392         assertTrue(rbreq.indexOf("<sdncadapter:SvcAction>deactivate</") >= 0)
 
 393         assertTrue(rbreq.indexOf("<request-action>DeleteTunnelXConnInstance</") >= 0)
 
 394         assertTrue(rbreq.indexOf("<sdncadapter:RequestId>") >= 0)
 
 399     public void preProcessSDNCActivate_BpmnError() {
 
 400         ExecutionEntity mex = setupMock()
 
 401         initPreProcessSDNC(mex)
 
 403         when(mex.getVariable("rollbackData")).thenThrow(new BpmnError("expected exception"))
 
 405         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 407         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCActivate(mex) }))
 
 411     public void preProcessSDNCActivate_Ex() {
 
 412         ExecutionEntity mex = setupMock()
 
 413         initPreProcessSDNC(mex)
 
 415         when(mex.getVariable("rollbackData")).thenThrow(new RuntimeException("expected exception"))
 
 417         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 419         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCActivate(mex) }))
 
 422     // ***** validateSDNCResp *****
 
 425     public void validateSDNCResp() {
 
 426         ExecutionEntity mex = setupMock()
 
 427         def map = setupMap(mex)
 
 428         def data = initValidateSDNCResp(mex)
 
 429         def resp = initValidateSDNCResp_Resp()
 
 431         when(mex.getVariable(Prefix + "sdncResponseSuccess")).thenReturn(true)
 
 433         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 435         DoCreateAllottedResourceTXC.validateSDNCResp(mex, resp, "create")
 
 437         verify(mex).getVariable("WorkflowException")
 
 438         verify(mex).getVariable("SDNCA_SuccessIndicator")
 
 439         verify(mex).getVariable("rollbackData")
 
 441         assertEquals(data, map.get("rollbackData"))
 
 443         assertEquals("true", data.get(Prefix, "rollback" + "SDNCcreate"))
 
 448     public void validateSDNCResp_Get() {
 
 449         ExecutionEntity mex = setupMock()
 
 450         initValidateSDNCResp(mex)
 
 451         def resp = initValidateSDNCResp_Resp()
 
 453         when(mex.getVariable(Prefix + "sdncResponseSuccess")).thenReturn(true)
 
 455         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 457         DoCreateAllottedResourceTXC.validateSDNCResp(mex, resp, "get")
 
 459         verify(mex).getVariable("WorkflowException")
 
 460         verify(mex).getVariable("SDNCA_SuccessIndicator")
 
 462         verify(mex, never()).getVariable("rollbackData")
 
 466     public void validateSDNCResp_Unsuccessful() {
 
 467         ExecutionEntity mex = setupMock()
 
 468         initValidateSDNCResp(mex)
 
 469         def resp = initValidateSDNCResp_Resp()
 
 472         when(mex.getVariable(Prefix + "sdncResponseSuccess")).thenReturn(false)
 
 474         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 476         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.validateSDNCResp(mex, resp, "create") }))
 
 480     public void validateSDNCResp_BpmnError() {
 
 481         ExecutionEntity mex = setupMock()
 
 482         initValidateSDNCResp(mex)
 
 483         def resp = initValidateSDNCResp_Resp()
 
 485         when(mex.getVariable("WorkflowException")).thenThrow(new BpmnError("expected exception"))
 
 487         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 489         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.validateSDNCResp(mex, resp, "create") }))
 
 493     public void validateSDNCResp_Ex() {
 
 494         ExecutionEntity mex = setupMock()
 
 495         initValidateSDNCResp(mex)
 
 496         def resp = initValidateSDNCResp_Resp()
 
 498         when(mex.getVariable("WorkflowException")).thenThrow(new RuntimeException("expected exception"))
 
 500         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 502         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.validateSDNCResp(mex, resp, "create") }))
 
 505     // ***** preProcessSDNCGet *****
 
 508     public void preProcessSDNCGet_FoundAR() {
 
 509         ExecutionEntity mex = setupMock()
 
 510         def map = setupMap(mex)
 
 511         initPreProcessSDNCGet(mex)
 
 513         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 514         DoCreateAllottedResourceTXC.preProcessSDNCGet(mex)
 
 516         String req = map.get("sdncGetRequest")
 
 518         assertTrue(req.indexOf("<sdncadapter:RequestId>") >= 0)
 
 519         assertTrue(req.indexOf("<sdncadapter:SvcInstanceId>sii</") >= 0)
 
 520         assertTrue(req.indexOf("<sdncadapter:SvcOperation>arlink</") >= 0)
 
 521         assertTrue(req.indexOf("<sdncadapter:CallbackUrl>myurl</") >= 0)
 
 526     public void preProcessSDNCGet_NotFoundAR() {
 
 527         ExecutionEntity mex = setupMock()
 
 528         def map = setupMap(mex)
 
 529         initPreProcessSDNCGet(mex)
 
 531         when(mex.getVariable("foundActiveAR")).thenReturn(false)
 
 533         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 534         DoCreateAllottedResourceTXC.preProcessSDNCGet(mex)
 
 536         String req = map.get("sdncGetRequest")
 
 538         assertTrue(req.indexOf("<sdncadapter:RequestId>") >= 0)
 
 539         assertTrue(req.indexOf("<sdncadapter:SvcInstanceId>sii</") >= 0)
 
 540         assertTrue(req.indexOf("<sdncadapter:SvcOperation>assignlink</") >= 0)
 
 541         assertTrue(req.indexOf("<sdncadapter:CallbackUrl>myurl</") >= 0)
 
 546     public void preProcessSDNCGet_Ex() {
 
 547         ExecutionEntity mex = setupMock()
 
 548         initPreProcessSDNCGet(mex)
 
 550         when(mex.getVariable("foundActiveAR")).thenThrow(new RuntimeException("expected exception"))
 
 552         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 554         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessSDNCGet(mex) }))
 
 557     // ***** updateAaiAROrchStatus *****
 
 561     public void updateAaiAROrchStatus() {
 
 562         MockPatchAllottedResource(wireMockRule, CUST, SVC, INST, ARID)
 
 564         ExecutionEntity mex = setupMock()
 
 565         initUpdateAaiAROrchStatus(mex)
 
 567         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 568         DoCreateAllottedResourceTXC.updateAaiAROrchStatus(mex, "success")
 
 571     // ***** generateOutputs *****
 
 574     public void generateOutputs() {
 
 575         ExecutionEntity mex = setupMock()
 
 576         def txctop = FileUtil.readResourceFile("__files/VCPE/DoCreateAllottedResourceTXC/SDNCTopologyQueryCallback.xml")
 
 578         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 579         when(mex.getVariable("enhancedCallbackRequestData")).thenReturn(txctop)
 
 581         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 582         DoCreateAllottedResourceTXC.generateOutputs(mex)
 
 584         verify(mex).setVariable("allotedResourceName", "namefromrequest")
 
 585         verify(mex).setVariable("vni", "my-vni")
 
 586         verify(mex).setVariable("vgmuxBearerIP", "my-bearer-ip")
 
 587         verify(mex).setVariable("vgmuxLanIP", "my-lan-ip")
 
 592     public void generateOutputs_BadXml() {
 
 593         ExecutionEntity mex = setupMock()
 
 595         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 596         when(mex.getVariable("enhancedCallbackRequestData")).thenReturn("invalid xml")
 
 598         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 599         DoCreateAllottedResourceTXC.generateOutputs(mex)
 
 601         verify(mex, never()).setVariable(anyString(), anyString())
 
 606     public void generateOutputs_BpmnError() {
 
 607         ExecutionEntity mex = setupMock()
 
 609         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 610         when(mex.getVariable("enhancedCallbackRequestData")).thenThrow(new BpmnError("expected exception"))
 
 612         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 614         DoCreateAllottedResourceTXC.generateOutputs(mex)
 
 615         verify(mex, never()).setVariable(anyString(), anyString())
 
 620     public void generateOutputs_Ex() {
 
 621         ExecutionEntity mex = setupMock()
 
 623         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 624         when(mex.getVariable("enhancedCallbackRequestData")).thenThrow(new RuntimeException("expected exception"))
 
 626         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 628         DoCreateAllottedResourceTXC.generateOutputs(mex)
 
 629         verify(mex, never()).setVariable(anyString(), anyString())
 
 633     // ***** preProcessRollback *****
 
 636     public void preProcessRollback() {
 
 637         ExecutionEntity mex = setupMock()
 
 638         WorkflowException wfe = mock(WorkflowException.class)
 
 640         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 641         when(mex.getVariable("WorkflowException")).thenReturn(wfe)
 
 643         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 644         DoCreateAllottedResourceTXC.preProcessRollback(mex)
 
 646         verify(mex).setVariable("prevWorkflowException", wfe)
 
 651     public void preProcessRollback_NotWFE() {
 
 652         ExecutionEntity mex = setupMock()
 
 654         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 655         when(mex.getVariable("WorkflowException")).thenReturn("I'm not a WFE")
 
 657         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 658         DoCreateAllottedResourceTXC.preProcessRollback(mex)
 
 660         verify(mex, never()).setVariable(eq("prevWorkflowException"), any())
 
 665     public void preProcessRollback_BpmnError() {
 
 666         ExecutionEntity mex = setupMock()
 
 668         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 669         when(mex.getVariable("WorkflowException")).thenThrow(new BpmnError("expected exception"))
 
 671         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 673         DoCreateAllottedResourceTXC.preProcessRollback(mex)
 
 678     public void preProcessRollback_Ex() {
 
 679         ExecutionEntity mex = setupMock()
 
 681         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 682         when(mex.getVariable("WorkflowException")).thenThrow(new RuntimeException("expected exception"))
 
 684         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 686         DoCreateAllottedResourceTXC.preProcessRollback(mex)
 
 690     // ***** postProcessRollback *****
 
 693     public void postProcessRollback() {
 
 694         ExecutionEntity mex = setupMock()
 
 695         WorkflowException wfe = mock(WorkflowException.class)
 
 697         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 698         when(mex.getVariable("prevWorkflowException")).thenReturn(wfe)
 
 700         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 701         DoCreateAllottedResourceTXC.postProcessRollback(mex)
 
 703         verify(mex).setVariable("WorkflowException", wfe)
 
 704         verify(mex).setVariable("rollbackData", null)
 
 709     public void postProcessRollback_NotWFE() {
 
 710         ExecutionEntity mex = setupMock()
 
 712         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 713         when(mex.getVariable("prevWorkflowException")).thenReturn("I'm not a WFE")
 
 715         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 716         DoCreateAllottedResourceTXC.postProcessRollback(mex)
 
 718         verify(mex, never()).setVariable(eq("WorkflowException"), any())
 
 719         verify(mex).setVariable("rollbackData", null)
 
 724     public void postProcessRollback_BpmnError() {
 
 725         ExecutionEntity mex = setupMock()
 
 727         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 728         when(mex.getVariable("prevWorkflowException")).thenThrow(new BpmnError("expected exception"))
 
 730         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 732         assertTrue(doBpmnError({ _ -> DoCreateAllottedResourceTXC.postProcessRollback(mex) }))
 
 733         verify(mex, never()).setVariable("rollbackData", null)
 
 738     public void postProcessRollback_Ex() {
 
 739         ExecutionEntity mex = setupMock()
 
 741         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 742         when(mex.getVariable("prevWorkflowException")).thenThrow(new RuntimeException("expected exception"))
 
 744         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 746         DoCreateAllottedResourceTXC.postProcessRollback(mex)
 
 747         verify(mex, never()).setVariable("rollbackData", null)
 
 751     private boolean checkMissingPreProcessRequest(String fieldnm) {
 
 752         ExecutionEntity mex = setupMock()
 
 755         DoCreateAllottedResourceTXC DoCreateAllottedResourceTXC = new DoCreateAllottedResourceTXC()
 
 757         when(mex.getVariable(fieldnm)).thenReturn("")
 
 759         return doBpmnError({ _ -> DoCreateAllottedResourceTXC.preProcessRequest(mex) })
 
 762     private void initPreProcess(ExecutionEntity mex) {
 
 763         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 764         when(mex.getVariable("mso.workflow.sdncadapter.callback")).thenReturn("sdncurn")
 
 765         when(mex.getVariable("mso.workflow.sdnc.replication.delay")).thenReturn("sdncdelay")
 
 766         when(mex.getVariable("serviceInstanceId")).thenReturn("sii")
 
 767         when(mex.getVariable("parentServiceInstanceId")).thenReturn("psii")
 
 768         when(mex.getVariable("allottedResourceModelInfo")).thenReturn("armi")
 
 769         when(mex.getVariable("brgWanMacAddress")).thenReturn("bwma")
 
 770         when(mex.getVariable("allottedResourceRole")).thenReturn("arr")
 
 771         when(mex.getVariable("allottedResourceType")).thenReturn("art")
 
 774     private void initGetAaiAR(ExecutionEntity mex) {
 
 775         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 776         when(mex.getVariable("allottedResourceType")).thenReturn("TXCt")
 
 777         when(mex.getVariable("allottedResourceRole")).thenReturn("TXCr")
 
 778         when(mex.getVariable("CSI_service")).thenReturn(FileUtil.readResourceFile("__files/VCPE/DoCreateAllottedResourceTXC/getAR.xml"))
 
 779         when(mex.getVariable("aai.endpoint")).thenReturn(aaiUriPfx)
 
 780         when(mex.getVariable("aaiAROrchStatus")).thenReturn("Active")
 
 783     private initCreateAaiAr(ExecutionEntity mex) {
 
 784         when(mex.getVariable("disableRollback")).thenReturn(45)
 
 785         when(mex.getVariable("serviceInstanceId")).thenReturn("sii")
 
 786         when(mex.getVariable("parentServiceInstanceId")).thenReturn("psii")
 
 787         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 788         when(mex.getVariable("allottedResourceId")).thenReturn(ARID)
 
 789         when(mex.getVariable("aai.endpoint")).thenReturn(aaiUriPfx)
 
 790         when(mex.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn(UrnPropertiesReader.getVariable("mso.workflow.global.default.aai.namespace"))
 
 791         when(mex.getVariable("PSI_resourceLink")).thenReturn(AAIUriFactory.createResourceFromExistingURI(AAIObjectType.SERVICE_INSTANCE, UriBuilder.fromPath("/business/customers/customer/" + CUST + "/service-subscriptions/service-subscription/" + SVC + "/service-instances/service-instance/" + INST).build()))
 
 792         when(mex.getVariable("allottedResourceType")).thenReturn("TXCt")
 
 793         when(mex.getVariable("allottedResourceRole")).thenReturn("TXCr")
 
 794         when(mex.getVariable("CSI_resourceLink")).thenReturn(aaiUriPfx + "/aai/v9/mycsi")
 
 795         when(mex.getVariable("allottedResourceModelInfo")).thenReturn("""
 
 797                     "modelInvariantUuid":"modelinvuuid",
 
 798                     "modelUuid":"modeluuid",
 
 799                     "modelCustomizationUuid":"modelcustuuid"
 
 804     private initBuildSDNCRequest(ExecutionEntity mex) {
 
 805         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 806         when(mex.getVariable("allottedResourceId")).thenReturn("ari")
 
 807         when(mex.getVariable("serviceInstanceId")).thenReturn("sii")
 
 808         when(mex.getVariable("parentServiceInstanceId")).thenReturn("psii")
 
 809         when(mex.getVariable("subscriptionServiceType")).thenReturn("sst")
 
 810         when(mex.getVariable("globalCustomerId")).thenReturn("gci")
 
 811         when(mex.getVariable("sdncCallbackUrl")).thenReturn("scu")
 
 812         when(mex.getVariable("msoRequestId")).thenReturn("mri")
 
 815     private RollbackData initPreProcessSDNC(ExecutionEntity mex) {
 
 816         def data = new RollbackData()
 
 818         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 819         when(mex.getVariable("rollbackData")).thenReturn(data)
 
 824     private initPreProcessSDNCGet(ExecutionEntity mex) {
 
 825         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 826         when(mex.getVariable("sdncCallbackUrl")).thenReturn("myurl")
 
 827         when(mex.getVariable("foundActiveAR")).thenReturn(true)
 
 828         when(mex.getVariable("aaiARGetResponse")).thenReturn("<selflink>arlink</selflink>")
 
 829         when(mex.getVariable("sdncAssignResponse")).thenReturn("<response-data><object-path>assignlink</object-path></response-data>")
 
 830         when(mex.getVariable("serviceInstanceId")).thenReturn("sii")
 
 831         when(mex.getVariable("sdncCallbackUrl")).thenReturn("myurl")
 
 834     private RollbackData initValidateSDNCResp(ExecutionEntity mex) {
 
 835         def data = new RollbackData()
 
 837         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 838         when(mex.getVariable("prefix")).thenReturn(Prefix)
 
 839         when(mex.getVariable("SDNCA_SuccessIndicator")).thenReturn(true)
 
 840         when(mex.getVariable("rollbackData")).thenReturn(data)
 
 845     private String initValidateSDNCResp_Resp() {
 
 846         return "<response-data><response-code>200</response-code></response-data>"
 
 849     private initUpdateAaiAROrchStatus(ExecutionEntity mex) {
 
 850         when(mex.getVariable(DBGFLAG)).thenReturn("true")
 
 851         when(mex.getVariable("aaiARPath")).thenReturn("/business/customers/customer/" + CUST + "/service-subscriptions/service-subscription/" + SVC + "/service-instances/service-instance/" + INST + "/allotted-resources/allotted-resource/" + ARID)