Merge "refactor updaterequeststatustofailed method"
authorSteve Smokowski <ss835w@att.com>
Wed, 12 Dec 2018 12:40:55 +0000 (12:40 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 12 Dec 2018 12:40:55 +0000 (12:40 +0000)
12 files changed:
INFO.yaml
bpmn/MSOCommonBPMN/pom.xml
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupName.groovy
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupNameFactory.groovy [moved from bpmn/MSOCommonBPMN/src/main/java/org/onap/so/client/restproperties/AaiPropertiesConfiguration.java with 65% similarity]
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/ExceptionUtil.groovy
bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/SDNCAdapter.groovy
bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
bpmn/MSOCommonBPMN/src/main/resources/subprocess/ConfirmVolumeGroupName.bpmn
bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupNameTest.groovy
bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/SDNCAdapterTest.groovy
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java
bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/restproperties/RestPropertiesPojoTest.java [deleted file]

index 78fb0f3..f6b8b4e 100644 (file)
--- a/INFO.yaml
+++ b/INFO.yaml
@@ -2,6 +2,7 @@
 project: 'so'
 project_creation_date: '2017-01-30'
 lifecycle_state: 'Incubation'
+project_category: ''
 project_lead: &onap_releng_ptl
     name: 'Seshu Kumar'
     email: 'seshu.kumar.m@huawei.com'
@@ -13,78 +14,100 @@ issue_tracking:
     type: 'jira'
     url: 'https://jira.onap.org/projects/SO'
     key: 'SO'
+mailing_list:
+    type: 'groups.io'
+    url: 'lists.onap.org'
+    tag: '<[sub-project_name]>'
+realtime_discussion: ''
 meetings:
     - type: 'zoom'
-        agenda: 'https://wiki.onap.org/display/DW/Minutes+Of+Meeting'
-        url: 'https://wiki.onap.org/display/DW/Service+Orchestrator+Project'
-        server: 'n/a'
-        channel: 'n/a'
-        repeats: 'weekly'
-        time: '14:00 UTC'
+      agenda: 'https://wiki.onap.org/display/DW/Minutes+Of+Meeting'
+      url: 'https://wiki.onap.org/display/DW/Service+Orchestrator+Project'
+      server: 'n/a'
+      channel: 'n/a'
+      repeats: 'weekly'
+      time: '14:00 UTC'
+repositories:
+    - so
+    - so-chef-repo
+    - so-docker-config
+    - so-libs
+    - so-so-config
 committers:
     - <<: *onap_releng_ptl
     - name: 'Chuanyu Chen'
-        email: 'chenchuanyu@huawei.com'
-        company: 'Huawei'
-        id: 'boychuanyu'
-        timezone: 'Beijing/China'
+      email: 'chenchuanyu@huawei.com'
+      company: 'Huawei'
+      id: 'boychuanyu'
+      timezone: 'Asia/Shanghai'
     - name: 'Byung-Woo Jun'
-        email: 'byung-woo.jun@ericsson.com'
-        company: 'Ericsson'
-        id: 'byungwoojun'
-        timezone: ''
+      email: 'byung-woo.jun@ericsson.com'
+      company: 'Ericsson'
+      id: 'byungwoojun'
+      timezone: ''
     - name: 'DeWayne Filppi'
-        email: 'dewayne@cloudify.co'
-        company: 'Cloudify'
-        id: 'dfilppi'
-        timezone: ''
-    - name: 'Eric Debeau'
-        email: 'eric.debeau@orange.com'
-        company: 'Orange'
-        id: 'eric.debeau'
-        timezone: ''
-    - name: 'Ethan Lynn'
-        email: 'ethanlynnl@vmware.com'
-        company: 'VMware'
-        id: 'ethanlynnl'
-        timezone: 'France/Lannion'
+      email: 'dewayne@cloudify.co'
+      company: 'Cloudify'
+      id: 'dfilppi'
+      timezone: ''
     - name: 'Rob Daugherty'
-        email: 'rd472p@att.com'
-        company: 'ATT'
-        id: 'rd472p'
-        timezone: ''
-    - name: 'Chengli Wang'
-        email: 'wangchengli@chinamobile.com'
-        company: 'China Mobile'
-        id: 'wangchengli'
-        timezone: 'China/Beijing'
+      email: 'rd472p@att.com'
+      company: 'ATT'
+      id: 'rd472p'
+      timezone: ''
+    - name: 'Yan Yang'
+      email: 'yangyanyj@chinamobile.com'
+      company: 'China Mobile'
+      id: 'yangyan'
+      timezone: 'Asia/Shanghai'
     - name: 'Marcus Williams'
-        email: 'marcus.williams@intel.com'
-        company: 'Intel'
-        id: 'mgkwill'
-        timezone: 'America/Los Angeles'
+      email: 'marcus.williams@intel.com'
+      company: 'Intel'
+      id: 'mgkwill'
+      timezone: 'America/Los Angeles'
     - name: 'Sanchita Pathak'
-        email: 'sanchita@techmahindra.com'
-        company: 'Tech Mahindra'
-        id: 'sanchitap'
-        timezone: 'Asia/Kolkata'
+      email: 'sanchita@techmahindra.com'
+      company: 'Tech Mahindra'
+      id: 'sanchitap'
+      timezone: 'Asia/Kolkata'
+    - name: 'Steve Smokowski'
+      email: 'ss835w@att.com'
+      company: 'ATT'
+      id: 'stevesmokowski'
+      timezone: 'America/New_York'
+    - name: 'Subhash Kumar Singh'
+      email: 'Subhash.Kumar.Singh@huawei.com'
+      company: 'Huawei'
+      id: 'subhash_singh'
+      timezone: 'Asia/Kolkata'
+    - name: 'Lukasz Muszkieta'
+      email: 'lukasz.muszkieta@nokia.com'
+      company: 'Nokia'
+      id: 'lukaszM'
+      timezone: 'Europe/Warsaw'
 tsc:
     approval: 'https://lists.onap.org/pipermail/onap-tsc'
     changes:
         - type: 'removal'
-            name: 'Tal Liron'
-            name: 'Heliu Zhong'
-            name: 'Yuanwei Yang'
-            name: 'Christophe Closset'
-            name: 'Claude Noshpitz'
-            name: 'maopeng zhang'
-            name: 'Bin Hou'
-            name: 'Fu Jinhua'
-            name: 'Jie Feng'
-            name: 'jackie tian'
-            name: 'Deng Hui'
-            link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+          name: 'Tal Liron'
+          name: 'Heliu Zhong'
+          name: 'Yuanwei Yang'
+          name: 'Christophe Closset'
+          name: 'Claude Noshpitz'
+          name: 'maopeng zhang'
+          name: 'Bin Hou'
+          name: 'Fu Jinhua'
+          name: 'Jie Feng'
+          name: 'jackie tian'
+          name: 'Deng Hui'
+          link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
         - type: 'addition'
-            name: 'Marcus Williams'
-            name: 'Sanchita Pathak'
-            link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+          name: 'Marcus Williams'
+          name: 'Sanchita Pathak'
+          link: 'https://lists.onap.org/pipermail/onap-tsc/2018-May/004802.html'
+        - type: 'addition'
+          name: 'Steve Smokowski'
+          name: 'Subhash Kumar Singh'
+          name: 'Lukasz Muszkieta'
+          link: 'https://lists.onap.org/g/onap-tsc/message/4320'
+
index c85bcd7..934aea8 100644 (file)
                        <version>1.2.4.RELEASE</version>
                        <scope>test</scope>
                </dependency>
+               <dependency>
+                       <groupId>org.assertj</groupId>
+                       <artifactId>assertj-core</artifactId>
+                       <version>3.11.1</version>
+                       <scope>test</scope>
+               </dependency>
        </dependencies>
 </project>
index c309c3b..f4e7926 100644 (file)
@@ -4,6 +4,8 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
  */
 
 package org.onap.so.bpmn.common.scripts
+
+import joptsimple.internal.Strings
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
+import org.springframework.http.HttpStatus
+
 import javax.ws.rs.core.UriBuilder
 
 import org.camunda.bpm.engine.delegate.DelegateExecution
@@ -33,8 +40,12 @@ import org.onap.so.logger.MsoLogger
 public class ConfirmVolumeGroupName extends AbstractServiceTaskProcessor{
        private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, ConfirmVolumeGroupName.class);
 
-       def Prefix="CVGN_"
-       ExceptionUtil exceptionUtil = new ExceptionUtil()
+       def static final Prefix = "CVGN_"
+       private final ExceptionUtil exceptionUtil
+
+       ConfirmVolumeGroupName(ExceptionUtil exceptionUtil) {
+               this.exceptionUtil = exceptionUtil
+       }
 
        public void initProcessVariables(DelegateExecution execution) {
                execution.setVariable("prefix",Prefix)
@@ -74,40 +85,39 @@ public class ConfirmVolumeGroupName extends AbstractServiceTaskProcessor{
                try {
                        Optional<VolumeGroup> volumeGroupOp = getAAIClient().get(VolumeGroup.class,  resourceUri)
             if(volumeGroupOp.isPresent()){
-                execution.setVariable("CVGN_queryVolumeGroupResponseCode", 200)
+                execution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.OK.value())
                 execution.setVariable("CVGN_queryVolumeGroupResponse", volumeGroupOp.get())
             }else{
-                execution.setVariable("CVGN_queryVolumeGroupResponseCode", 404)
+                execution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.NOT_FOUND.value())
                 execution.setVariable("CVGN_queryVolumeGroupResponse", "Volume Group not Found!")
             }
                } catch (Exception ex) {
                        msoLogger.debug("Exception occurred while executing AAI GET:" + ex.getMessage())
-                       execution.setVariable("CVGN_queryVolumeGroupResponseCode", 500)
+                       execution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.INTERNAL_SERVER_ERROR.value())
                        execution.setVariable("CVGN_queryVolumeGroupResponse", "AAI GET Failed:" + ex.getMessage())
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 500, "AAI GET Failed")
+                       exceptionUtil.buildAndThrowWorkflowException(execution, HttpStatus.INTERNAL_SERVER_ERROR.value(), "AAI GET Failed")
                }
        }
 
        // process the result from queryAAIVolumeGroupId()
 
        public void checkAAIQueryResult(DelegateExecution execution) {
-               def result = execution.getVariable("CVGN_queryVolumeGroupResponse")
-
         def actualVolumeGroupName = ""
-        if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == 404) {
+        if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == HttpStatus.NOT_FOUND.value()) {
                        msoLogger.debug('volumeGroupId does not exist in AAI')
                }
-               else if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == 200) {
+               else if (execution.getVariable("CVGN_queryVolumeGroupResponseCode") == HttpStatus.OK.value()) {
             VolumeGroup volumeGroup = execution.getVariable("CVGN_queryVolumeGroupResponse")
-            if(volumeGroup.getVolumeGroupName()!=null){
+
+            if (!Strings.isNullOrEmpty(volumeGroup.getVolumeGroupName())) {
                 actualVolumeGroupName =  volumeGroup.getVolumeGroupName()
-            }
-                       msoLogger.debug("volumeGroupId exists in AAI")
+                               msoLogger.debug("volumeGroupId exists in AAI")
+                       }
                }
                execution.setVariable("CVGN_volumeGroupNameMatches", false)
                def volumeGroupName = execution.getVariable("CVGN_volumeGroupName")
 
-               if (volumeGroupName.equals(actualVolumeGroupName)) {
+               if (!actualVolumeGroupName.isEmpty() && volumeGroupName.equals(actualVolumeGroupName)) {
                        msoLogger.debug('Volume Group Name Matches AAI records')
                        execution.setVariable("CVGN_volumeGroupNameMatches", true)
                }
@@ -121,8 +131,8 @@ public class ConfirmVolumeGroupName extends AbstractServiceTaskProcessor{
 
        // generates a WorkflowException if the volume group name does not match AAI record for this volume group
        public void handleVolumeGroupNameNoMatch(DelegateExecution execution) {
-               def errorNotAssociated = "Error occurred - volume group id " + execution.getVariable("CVGN_volumeGroupId") +
-                       " is not associated with  " + execution.getVariable("CVGN_volumeGroupName")
+               def errorNotAssociated = "Error occurred - volume group id ${execution.getVariable('CVGN_volumeGroupId')} " +
+                               "is not associated with ${execution.getVariable('CVGN_volumeGroupName')}"
                msoLogger.error(MessageEnum.BPMN_GENERAL_EXCEPTION_ARG, errorNotAssociated, "BPMN", MsoLogger.getServiceName(), MsoLogger.ErrorCode.UnknownError, "");
                exceptionUtil.buildAndThrowWorkflowException(execution, 1002, errorNotAssociated)
        }
@@ -2,14 +2,14 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 Nokia.
  * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  * ============LICENSE_END=========================================================
  */
 
-package org.onap.so.client.restproperties;
+package org.onap.so.bpmn.common.scripts
 
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Service;
+import org.onap.so.bpmn.common.scripts.ConfirmVolumeGroupName
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
 
-@Service
-public class AaiPropertiesConfiguration {
+public class ConfirmVolumeGroupNameFactory {
 
-       @Value("${aai.endpoint}")
-       private String endpoint;
-
-       @Value("${aai.auth}")
-       private String auth;
-
-       public String getEndpoint() {
-               return endpoint;
-       }
-
-       public String getAuth() {
-               return auth;
-       }
+    ConfirmVolumeGroupName create() {
+        return  new ConfirmVolumeGroupName(new ExceptionUtil());
+    }
 }
index 4b701e6..e132b41 100644 (file)
@@ -293,7 +293,7 @@ class ExceptionUtil extends AbstractServiceTaskProcessor {
                execution.setVariable("WorkflowException", exception);
                msoLogger.debug("Outgoing WorkflowException is " + exception)
                msoLogger.debug("Throwing MSOWorkflowException")
-               throw new BpmnError("MSOWorkflowException")
+               throw new BpmnError(errorCode.toString(), String.format("MSOWorkflowException: %s", errorMessage))
        }
 
        /**
index a5e7c0f..a430cdb 100644 (file)
@@ -58,11 +58,10 @@ public class SDNCAdapter extends AbstractServiceTaskProcessor {
                        execution.setVariable("SDNCA_InterimNotify", false)
 
                        String requestId = execution.getVariable("mso-request-id")
-                       if(isNotBlank(requestId)){
-                               execution.setVariable(Prefix + "requestId", requestId)
-                       }else{
+                       if(isBlank(requestId)){
                                exceptionUtil.buildAndThrowWorkflowException(execution, 400, 'mso-request-id not provided by calling flow')
                        }
+
                        // Authorization Info
                        String basicAuthValue = UrnPropertiesReader.getVariable("mso.adapters.po.auth", execution)
 
@@ -124,6 +123,7 @@ public class SDNCAdapter extends AbstractServiceTaskProcessor {
 
                        //calling process should pass a generated uuid if sending multiple sdnc requests
                        def sdncRequestId = utils.getNodeText(requestHeader, "RequestId")
+                       execution.setVariable(Prefix + "requestId", sdncRequestId)
 
                        // Prepare SDNC Request to the SDNC Adapter
                        String sdncAdapterRequest = """
index b794e41..0017c4e 100644 (file)
@@ -609,16 +609,27 @@ public class BBInputSetup implements JavaDelegate {
                        vnf = createGenericVnf(lookupKeyMap, instanceName, platform, lineOfBusiness,
                                        resourceId, generatedVnfType, instanceParams);
                        serviceInstance.getVnfs().add(vnf);
+                       mapVnfcCollectionInstanceGroup(vnf, modelInfo, service);
                }
                if(vnf != null) {
                        mapCatalogVnf(vnf, modelInfo, service);
-                       mapVnfcCollectionInstanceGroup(vnf, modelInfo, service);
-                       if (instanceGroupId != null && instanceGroupModelInfo != null) {
+                       if (instanceGroupId != null && instanceGroupModelInfo != null
+                                       && instanceGroupModelInfo.getModelType().equals(ModelType.networkInstanceGroup)
+                                       && !instanceGroupInList(vnf, instanceGroupId)) {
                                mapNetworkCollectionInstanceGroup(vnf, instanceGroupId);
                        }
                }
        }
 
+       protected boolean instanceGroupInList(GenericVnf vnf, String instanceGroupId) {
+               for(InstanceGroup instanceGroup : vnf.getInstanceGroups()) {
+                       if(instanceGroup.getId() != null && instanceGroup.getId().equalsIgnoreCase(instanceGroupId)) {
+                               return true;
+                       }
+               }
+               return false;
+       }
+
        protected void mapVnfcCollectionInstanceGroup(GenericVnf genericVnf, ModelInfo modelInfo, Service service) {
                VnfResourceCustomization vnfResourceCustomization = getVnfResourceCustomizationFromService(modelInfo, service);
                if(vnfResourceCustomization != null) {
@@ -865,8 +876,13 @@ public class BBInputSetup implements JavaDelegate {
                        String serviceInstanceId, boolean aLaCarte, String bbName) throws Exception {
                ServiceInstance serviceInstance = this.getServiceInstanceHelper(requestDetails, customer, project, owningEntity,
                                lookupKeyMap, serviceInstanceId, aLaCarte, service, bbName);
-               org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = this.bbInputSetupUtils
-                               .getAAIServiceInstanceById(serviceInstanceId);
+               org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI = null;
+               if(customer != null && customer.getServiceSubscription() != null) {
+                       serviceInstanceAAI = bbInputSetupUtils.getAAIServiceInstanceByIdAndCustomer(customer.getGlobalCustomerId(), 
+                                       customer.getServiceSubscription().getServiceType(), serviceInstanceId);
+               } else {
+                       serviceInstanceAAI = bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId);
+               }
                if (serviceInstanceAAI != null
                                && !serviceInstanceAAI.getModelVersionId().equalsIgnoreCase(service.getModelUUID())) {
                        Service tempService = this.bbInputSetupUtils
index 0e99ce9..403be98 100644 (file)
@@ -13,7 +13,7 @@
       <bpmn2:incoming>SequenceFlow_23</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_18</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-def cvgn= new ConfirmVolumeGroupName()
+def cvgn= new ConfirmVolumeGroupNameFactory().create()
 cvgn.handleAAIQueryFailure(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_18" name="" sourceRef="AAIQueryFailure" targetRef="EndEvent_7"/>
@@ -25,7 +25,7 @@ cvgn.handleAAIQueryFailure(execution)]]></bpmn2:script>
       <bpmn2:incoming>SequenceFlow_38</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_39</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-def cvgn= new ConfirmVolumeGroupName()
+def cvgn= new ConfirmVolumeGroupNameFactory().create()
 cvgn.queryAAIForVolumeGroupId(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_39" name="" sourceRef="QueryAAIForVolumeGroupId" targetRef="ExclusiveGateway_3"/>
@@ -33,7 +33,7 @@ cvgn.queryAAIForVolumeGroupId(execution)]]></bpmn2:script>
       <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_38</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-def cvgn= new ConfirmVolumeGroupName()
+def cvgn= new ConfirmVolumeGroupNameFactory().create()
 cvgn.preProcessRequest(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_38" name="" sourceRef="InitializeVariables" targetRef="QueryAAIForVolumeGroupId"/>
@@ -42,7 +42,7 @@ cvgn.preProcessRequest(execution)]]></bpmn2:script>
       <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_4</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-def cvgn= new ConfirmVolumeGroupName()
+def cvgn= new ConfirmVolumeGroupNameFactory().create()
 cvgn.checkAAIQueryResult(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:sequenceFlow id="SequenceFlow_4" name="" sourceRef="CheckAAIQueryResult" targetRef="ExclusiveGateway_1"/>
@@ -50,7 +50,7 @@ cvgn.checkAAIQueryResult(execution)]]></bpmn2:script>
       <bpmn2:incoming>SequenceFlow_7</bpmn2:incoming>
       <bpmn2:outgoing>SequenceFlow_11</bpmn2:outgoing>
       <bpmn2:script><![CDATA[import org.onap.so.bpmn.common.scripts.*
-def cvgn= new ConfirmVolumeGroupName()
+def cvgn= new ConfirmVolumeGroupNameFactory().create()
 cvgn.handleVolumeGroupNameNoMatch(execution)]]></bpmn2:script>
     </bpmn2:scriptTask>
     <bpmn2:exclusiveGateway id="ExclusiveGateway_1" default="SequenceFlow_7">
index a96127a..79aacdf 100644 (file)
@@ -4,12 +4,14 @@
  * ================================================================================
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
+ * Modifications Copyright 2018 Nokia
+ * ================================================================================
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
  * You may obtain a copy of the License at
- * 
+ *
  *      http://www.apache.org/licenses/LICENSE-2.0
- * 
+ *
  * Unless required by applicable law or agreed to in writing, software
  * distributed under the License is distributed on an "AS IS" BASIS,
  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 
 package org.onap.so.bpmn.common.scripts
 
-import static org.mockito.Mockito.*
-
-import javax.ws.rs.core.UriBuilder
-
+import org.camunda.bpm.engine.delegate.BpmnError
 import org.camunda.bpm.engine.delegate.DelegateExecution
-import org.camunda.bpm.engine.impl.persistence.entity.ExecutionEntity
 import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake
-import org.junit.Assert
 import org.junit.Before
 import org.junit.Test
-import org.mockito.ArgumentCaptor
-import org.mockito.Captor
-import org.mockito.Mockito
+import org.mockito.Mock
 import org.mockito.MockitoAnnotations
-import org.mockito.Spy
+import org.onap.aai.domain.yang.RelationshipList
 import org.onap.aai.domain.yang.VolumeGroup
+import org.onap.so.bpmn.common.scripts.ConfirmVolumeGroupName
+import org.onap.so.bpmn.common.scripts.ConfirmVolumeGroupNameFactory
+import org.onap.so.bpmn.common.scripts.ExceptionUtil
 import org.onap.so.client.aai.AAIObjectType
+import org.onap.so.client.aai.AAIResourcesClient
 import org.onap.so.client.aai.entities.uri.AAIResourceUri
 import org.onap.so.client.aai.entities.uri.AAIUriFactory
+import org.onap.so.constants.Defaults
+import org.springframework.http.HttpStatus
+
+import javax.ws.rs.core.UriBuilder
+
+import static org.assertj.core.api.Assertions.catchThrowableOfType
+import static org.junit.Assert.assertEquals
+import static org.junit.Assert.assertFalse
+import static org.junit.Assert.assertTrue
+import static org.mockito.Mockito.spy
+import static org.mockito.Mockito.when
+
+class ConfirmVolumeGroupNameTest {
+
+    private static final AAIResourceUri RESOURCE_URI = AAIUriFactory.createResourceFromExistingURI(
+            AAIObjectType.VOLUME_GROUP, UriBuilder.fromPath('/aai/test/volume-groups/volume-group/testVolumeGroup').build())
+
+    private ConfirmVolumeGroupName confirmVolumeGroupName
+    @Mock
+    private VolumeGroup volumeGroup
+    @Mock
+    private AAIResourcesClient client
+    private ExceptionUtilFake exceptionUtilFake
+
+    private DelegateExecution delegateExecution
+
+    @Before
+    public void init() throws IOException {
+        exceptionUtilFake = new ExceptionUtilFake()
+        confirmVolumeGroupName = spy(new ConfirmVolumeGroupName(exceptionUtilFake))
+        MockitoAnnotations.initMocks(this)
+        delegateExecution = new DelegateExecutionFake()
+        volumeGroup = createVolumeGroup()
+        when(confirmVolumeGroupName.getAAIClient()).thenReturn(client)
+    }
+
+    @Test
+    public void preProcessRequest_shouldSetUpVariables() {
+        String volumeGroupId = "volume-group-id-1"
+        String volumeGroupName = "volume-group-name-1"
+        String aicCloudRegion = "aic-cloud-region-1"
+        AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.VOLUME_GROUP, Defaults.CLOUD_OWNER, aicCloudRegion, volumeGroupId)
+
+        delegateExecution.setVariable("ConfirmVolumeGroupName_volumeGroupId", volumeGroupId)
+        delegateExecution.setVariable("ConfirmVolumeGroupName_volumeGroupName", volumeGroupName)
+        delegateExecution.setVariable("ConfirmVolumeGroupName_aicCloudRegion", aicCloudRegion)
+        delegateExecution.setVariable("CVGN_volumeGroupGetEndpoint", uri)
+
+        confirmVolumeGroupName.preProcessRequest(delegateExecution)
+
+        assertEquals(ConfirmVolumeGroupName.Prefix, delegateExecution.getVariable("prefix"))
+
+        assertEquals(volumeGroupId, delegateExecution.getVariable("CVGN_volumeGroupId"))
+        assertEquals(volumeGroupName, delegateExecution.getVariable("CVGN_volumeGroupName"))
+        assertEquals(aicCloudRegion, delegateExecution.getVariable("CVGN_aicCloudRegion"))
+    }
+
+    @Test
+    public void queryAAIForVolumeGroupId_shouldSucceed_whenVolumeGroupExists() {
+        delegateExecution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.OK)
+        delegateExecution.setVariable("CVGN_queryVolumeGroupResponse", volumeGroup)
+        delegateExecution.setVariable("CVGN_volumeGroupGetEndpoint", RESOURCE_URI)
+        when(client.get(VolumeGroup.class, RESOURCE_URI)).thenReturn(Optional.of(volumeGroup))
+
+        confirmVolumeGroupName.queryAAIForVolumeGroupId(delegateExecution)
+
+        assertEquals(HttpStatus.OK.value(), delegateExecution.getVariable("CVGN_queryVolumeGroupResponseCode"))
+        assertEquals(volumeGroup, delegateExecution.getVariable("CVGN_queryVolumeGroupResponse"))
+    }
+
+    @Test
+    public void queryAAIForVolumeGroupId_shouldFailWith404_whenVolumeGroupDoesNotExist() {
+        delegateExecution.setVariable("CVGN_volumeGroupGetEndpoint", RESOURCE_URI)
+        when(client.get(VolumeGroup.class, RESOURCE_URI)).thenReturn(Optional.empty())
+
+        confirmVolumeGroupName.queryAAIForVolumeGroupId(delegateExecution)
+
+        assertEquals(HttpStatus.NOT_FOUND.value(), delegateExecution.getVariable("CVGN_queryVolumeGroupResponseCode"))
+        assertEquals("Volume Group not Found!", delegateExecution.getVariable("CVGN_queryVolumeGroupResponse"))
+    }
+
+    @Test
+    public void queryAAIForVolumeGroupId_shouldThrowWorkflowException_whenRuntimeExceptionIsThrown() throws BpmnError {
+        delegateExecution.setVariable("CVGN_volumeGroupGetEndpoint", RESOURCE_URI)
+        delegateExecution.setVariable("testProcessKey", "process-key1")
+
+        def errorMsg = "my runtime exception"
+        when(client.get(VolumeGroup.class, RESOURCE_URI)).thenThrow(new RuntimeException(errorMsg))
+
+        def exceptionMsg = "AAI GET Failed"
+
+        BpmnError error = catchThrowableOfType(
+                { -> confirmVolumeGroupName.queryAAIForVolumeGroupId(delegateExecution) }, BpmnError.class)
+
+        assertEquals(String.format("MSOWorkflowException: %s", exceptionMsg), error.getMessage())
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value().toString(), error.getErrorCode())
+
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), delegateExecution.getVariable("CVGN_queryVolumeGroupResponseCode"))
+        assertEquals(String.format("AAI GET Failed:%s", errorMsg), delegateExecution.getVariable("CVGN_queryVolumeGroupResponse"))
+        assertEquals(HttpStatus.INTERNAL_SERVER_ERROR.value(), exceptionUtilFake.getErrorCode())
+        assertEquals(exceptionMsg, exceptionUtilFake.getErrorMessage())
+        assertEquals(delegateExecution, exceptionUtilFake.getDelegateExecution())
+    }
+
+    @Test
+    public void checkAAIQueryResult_shouldSetVolumeGroupNameMatchesToFalse_whenResponseCodeIs404() {
+        delegateExecution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.NOT_FOUND)
+        delegateExecution.setVariable("CVGN_volumeGroupName", "")
+
+        confirmVolumeGroupName.checkAAIQueryResult(delegateExecution)
+
+        assertFalse(delegateExecution.getVariable("CVGN_volumeGroupNameMatches"))
+    }
+
+    @Test
+    public void checkAAIQueryResult_shouldSetVolumeGroupNameMatchesToTrue_whenResponseCodeIs200AndVolumeGroupNameExists() {
+        delegateExecution.setVariable("CVGN_queryVolumeGroupResponseCode", HttpStatus.OK.value())
+        delegateExecution.setVariable("CVGN_queryVolumeGroupResponse", volumeGroup)
+        delegateExecution.setVariable("CVGN_volumeGroupName", volumeGroup.getVolumeGroupName())
+
+        confirmVolumeGroupName.checkAAIQueryResult(delegateExecution)
+
+        assertTrue(delegateExecution.getVariable("CVGN_volumeGroupNameMatches"))
+    }
+
+    @Test
+    public void handleVolumeGroupNameNoMatch_shouldThrowBpmnErrorException() {
+        def volumeGroupId = "volume-group-id"
+        def volumeGroupName = "volume-group-name"
+
+        delegateExecution.setVariable("CVGN_volumeGroupId", volumeGroupId)
+        delegateExecution.setVariable("CVGN_volumeGroupName", volumeGroupName)
+
+        def errorMessage = String.format("Error occurred - volume group id %s is not associated with %s",
+                delegateExecution.getVariable('CVGN_volumeGroupId'), delegateExecution.getVariable('CVGN_volumeGroupName'))
+
+        BpmnError error = catchThrowableOfType(
+                { -> confirmVolumeGroupName.handleVolumeGroupNameNoMatch(delegateExecution) }, BpmnError.class)
+
+        assertEquals(String.format("MSOWorkflowException: %s", errorMessage), error.getMessage())
+        assertEquals("1002", error.getErrorCode())
+
+        assertEquals(1002, exceptionUtilFake.getErrorCode())
+        assertEquals(errorMessage, exceptionUtilFake.getErrorMessage())
+        assertEquals(delegateExecution, exceptionUtilFake.getDelegateExecution())
+    }
+
+    @Test
+    public void reportSuccess_shouldSetWorkflowResponseToEmptyString() {
+        confirmVolumeGroupName.reportSuccess(delegateExecution)
+        assertEquals("", delegateExecution.getVariable("WorkflowResponse"))
+    }
+
+    private VolumeGroup createVolumeGroup() {
+        VolumeGroup volumeGroup = new VolumeGroup()
+
+        volumeGroup.setVolumeGroupId("volume-group-id")
+        volumeGroup.setVolumeGroupName("volume-group-name")
+        volumeGroup.setHeatStackId("heat-stack-id")
+        volumeGroup.setVnfType("vnf-type")
+        volumeGroup.setOrchestrationStatus("orchestration-status")
+        volumeGroup.setModelCustomizationId("model-customization-id")
+        volumeGroup.setVfModuleModelCustomizationId("vf-module-model-customization-id")
+        volumeGroup.setResourceVersion("resource-version")
+        volumeGroup.setRelationshipList(new RelationshipList())
+
+        return volumeGroup
+    }
+
+    private static class ExceptionUtilFake extends ExceptionUtil {
+
+        private int errorCode
+        private String errorMessage
+        private DelegateExecution execution
+
+        @Override
+        public void buildAndThrowWorkflowException(DelegateExecution execution, int errorCode, String errorMessage) {
+            this.errorCode = errorCode
+            this.errorMessage = errorMessage
+            this.execution = execution
+            throw new BpmnError(errorCode.toString(), "MSOWorkflowException: ${errorMessage}")
+        }
+
+        public int getErrorCode() {
+            return errorCode
+        }
+
+        public String getErrorMessage() {
+            return errorMessage
+        }
+
+        public DelegateExecution getDelegateExecution() {
+            return execution
+        }
+    }
 
-class ConfirmVolumeGroupNameTest extends MsoGroovyTest {
-       
-       @Spy
-       private ConfirmVolumeGroupName confirmVolumeGroupName;
-
-       @Before
-       public void init() throws IOException {
-               super.init("ConfirmVolumeGroupName")
-               MockitoAnnotations.initMocks(this);
-               when(confirmVolumeGroupName.getAAIClient()).thenReturn(client)
-
-       }
-
-       @Test
-       public void testQueryAAIForVolumeGroupId() {
-
-               AAIResourceUri resourceUri = AAIUriFactory.createResourceFromExistingURI(AAIObjectType.VOLUME_GROUP, UriBuilder.fromPath('/aai/test/volume-groups/volume-group/testVolumeGroup').build());
-               when(mockExecution.getVariable("CVGN_volumeGroupGetEndpoint")).thenReturn(resourceUri)
-               VolumeGroup volumeGroup = new VolumeGroup()
-               volumeGroup.setVolumeGroupId("Test")
-               when(client.get(VolumeGroup.class,resourceUri)).thenReturn(Optional.of(volumeGroup))
-               confirmVolumeGroupName.queryAAIForVolumeGroupId(mockExecution)
-        Mockito.verify(mockExecution).setVariable("CVGN_queryVolumeGroupResponseCode",200)
-        Mockito.verify(mockExecution).setVariable("CVGN_queryVolumeGroupResponse",volumeGroup)
-       }
-
-       @Test
-       public void testQueryAAIForVolumeGroupId_404() {
-               AAIResourceUri resourceUri = AAIUriFactory.createResourceFromExistingURI(AAIObjectType.VOLUME_GROUP, UriBuilder.fromPath('/aai/test/volume-groups/volume-group/testVolumeGroup').build());
-               when(client.get(VolumeGroup.class,  resourceUri)).thenReturn(Optional.empty())
-               DelegateExecution execution = new DelegateExecutionFake()
-               try {
-                       execution.setVariable("CVGN_volumeGroupGetEndpoint", resourceUri)
-                       confirmVolumeGroupName.queryAAIForVolumeGroupId(execution)
-               }
-               catch(Exception ex){}
-               Assert.assertEquals(404, execution.getVariable("CVGN_queryVolumeGroupResponseCode"))
-               Assert.assertEquals("Volume Group not Found!", execution.getVariable("CVGN_queryVolumeGroupResponse"))
-               
-       }
 }
index ec69bf5..e351210 100644 (file)
@@ -844,11 +844,11 @@ def sdncAdapterResponseError =
                verify(mockExecution).setVariable("asynchronousResponseTimeout",false)
                verify(mockExecution).setVariable("continueListening",false)
                verify(mockExecution).setVariable("serviceConfigActivate",false)
-               verify(mockExecution).setVariable("SDNCA_requestId", "testReqId")
                verify(mockExecution).setVariable("SDNCA_SuccessIndicator",false)
                verify(mockExecution).setVariable("SDNCA_InterimNotify",false)
                verify(mockExecution).setVariable("BasicAuthHeaderValue","Basic dGVzdDp0ZXN0")
                verify(mockExecution).setVariable("source","")
+               verify(mockExecution).setVariable("SDNCA_requestId", "745b1b50-e39e-4685-9cc8-c71f0bde8bf0")
                verify(mockExecution).setVariable("sdncAdapterRequest", sdncAdapterRequest)
        }
 
index f6e433b..78238f0 100644 (file)
@@ -1314,12 +1314,11 @@ public class BBInputSetupTest {
                doReturn(vnf2AAI).when(SPY_bbInputSetupUtils).getAAIGenericVnf(vnf2.getVnfId());
                doNothing().when(SPY_bbInputSetup).mapCatalogVnf(vnf2, modelInfo, service);
                doNothing().when(SPY_bbInputSetup).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}");
-               doNothing().when(SPY_bbInputSetup).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service);
                SPY_bbInputSetup.populateGenericVnf(modelInfo, instanceName, platform, lineOfBusiness, service, bbName,
                                serviceInstance, lookupKeyMap, requestDetails.getRelatedInstanceList(), resourceId, vnfType, null);
                verify(SPY_bbInputSetup, times(2)).mapCatalogVnf(vnf2, modelInfo, service);
                verify(SPY_bbInputSetup, times(2)).mapNetworkCollectionInstanceGroup(vnf2, "{instanceGroupId}");
-               verify(SPY_bbInputSetup, times(2)).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service);
+               verify(SPY_bbInputSetup, times(1)).mapVnfcCollectionInstanceGroup(vnf2, modelInfo, service);
        }
 
        @Test
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/restproperties/RestPropertiesPojoTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/client/restproperties/RestPropertiesPojoTest.java
deleted file mode 100644 (file)
index 8633385..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * 
- *      http://www.apache.org/licenses/LICENSE-2.0
- * 
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.so.client.restproperties;
-
-import org.junit.Test;
-
-import com.openpojo.reflection.PojoClass;
-import com.openpojo.reflection.impl.PojoClassFactory;
-import com.openpojo.validation.Validator;
-import com.openpojo.validation.ValidatorBuilder;
-import com.openpojo.validation.rule.impl.NoPrimitivesRule;
-import com.openpojo.validation.rule.impl.NoPublicFieldsRule;
-import com.openpojo.validation.test.impl.GetterTester;
-
-public class RestPropertiesPojoTest {
-       @Test
-       public void pojoStructure() {
-               test(PojoClassFactory.getPojoClass(AaiPropertiesConfiguration.class));
-       }
-       
-       private void test(PojoClass pojoClass) {
-               Validator validator = ValidatorBuilder.create()
-                               .with(new NoPrimitivesRule())
-                               .with(new NoPublicFieldsRule())
-                               .with(new GetterTester())
-                               .build();
-               validator.validate(pojoClass);
-       }
-}