diff options
13 files changed, 1387 insertions, 1196 deletions
diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy index 37e3df1505..f3f8c8bacf 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoActivateTnNssi.groovy @@ -83,6 +83,7 @@ public class DoActivateTnNssi extends AbstractServiceTaskProcessor { String actionType = operationType.equals("activateInstance") ? "activate" : "deactivate" execution.setVariable("actionType", actionType) + tnNssmfUtils.setEnableSdncConfig(execution) logger.debug("Finish preProcessRequest") } @@ -147,6 +148,8 @@ public class DoActivateTnNssi extends AbstractServiceTaskProcessor { String jobId = execution.getVariable("jobId") String nsiId = execution.getVariable("nsiId") String operType = execution.getVariable("actionType") + operType = operType.toUpperCase() + ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId, jobId, nsiId, operType, status, progress, statusDescription) diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy index 0b028e6c13..04f07b66d4 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoCreateTnNssiInstance.groovy @@ -63,6 +63,8 @@ class DoCreateTnNssiInstance extends AbstractServiceTaskProcessor { }""" execution.setVariable("serviceModelInfo", serviceModelInfo) + tnNssmfUtils.setEnableSdncConfig(execution) + logger.trace("Exit preProcessRequest") } diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy index a8622b9253..a715e7799d 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/DoDeallocateTnNssi.groovy @@ -80,6 +80,9 @@ class DoDeallocateTnNssi extends AbstractServiceTaskProcessor { "modelVersion":"" }""" execution.setVariable("serviceModelInfo", serviceModelInfo) + + tnNssmfUtils.setEnableSdncConfig(execution) + logger.debug("Finish preProcessRequest") } @@ -155,7 +158,7 @@ class DoDeallocateTnNssi extends AbstractServiceTaskProcessor { String nsiId = execution.getVariable("nsiId") ResourceOperationStatus roStatus = tnNssmfUtils.buildRoStatus(modelUuid, ssInstanceId, - jobId, nsiId, "deallocate", status, progress, statusDescription) + jobId, nsiId, "DEALLOCATE", status, progress, statusDescription) logger.debug("DoDeallocateTnNssi: roStatus={}", roStatus) requestDBUtil.prepareUpdateResourceOperationStatus(execution, roStatus) diff --git a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy index cfee1aa0cf..009b0a1941 100644 --- a/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy +++ b/bpmn/so-bpmn-infrastructure-common/src/main/groovy/org/onap/so/bpmn/infrastructure/scripts/TnNssmfUtils.groovy @@ -354,4 +354,18 @@ class TnNssmfUtils { return roStatus } + + + void setEnableSdncConfig(DelegateExecution execution) { + String enableSdnc = UrnPropertiesReader.getVariable( + "mso.workflow.TnNssmf.enableSDNCNetworkConfig") + if (isBlank(enableSdnc)) { + logger.debug("mso.workflow.TnNssmf.enableSDNCNetworkConfig is undefined, so use default value (true)") + enableSdnc = "true" + } + + logger.debug("setEnableSdncConfig: enableSdnc=" + enableSdnc) + + execution.setVariable("enableSdnc", enableSdnc) + } } diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn index 4447b32f4a..51448b027c 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoActivateTransportNSSI.bpmn @@ -36,6 +36,7 @@ runScript.prepareUpdateJobStatus(execution,"finished","100","Activate or Deactiv <bpmn:sequenceFlow id="SequenceFlow_1qv8qw1" sourceRef="ScriptTask_1ssh2l9" targetRef="Activity_0nhxd67" /> <bpmn:scriptTask id="ScriptTask_19uxoi8" name="Update AAI Status" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_1jdb2oq</bpmn:incoming> + <bpmn:incoming>Flow_0b2uim4</bpmn:incoming> <bpmn:outgoing>SequenceFlow_0kixzdj</bpmn:outgoing> <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def actionType = execution.getVariable("actionType") @@ -45,7 +46,7 @@ runScript.updateAAIOrchStatus(execution)</bpmn:script> </bpmn:scriptTask> <bpmn:sequenceFlow id="SequenceFlow_0kixzdj" sourceRef="ScriptTask_19uxoi8" targetRef="ScriptTask_1ssh2l9" /> <bpmn:scriptTask id="Activity_1tw8eyy" name="PreProcess SDNC Activate or Deactivate TN NSSI Request" scriptFormat="groovy"> - <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming> + <bpmn:incoming>Flow_0046aj5</bpmn:incoming> <bpmn:outgoing>Flow_0cpctye</bpmn:outgoing> <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def runScript = new DoActivateTnNssi() @@ -84,7 +85,7 @@ runScript.validateSDNCResponse(execution, response)</bpmn:script> def runScript = new DoActivateTnNssi() runScript.preProcessRequest(execution)</bpmn:script> </bpmn:scriptTask> - <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Activity_1tw8eyy" /> + <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Gateway_1v41rsb" /> <bpmn:serviceTask id="Activity_0nhxd67" name="Update Resource Operation Status"> <bpmn:extensionElements> <camunda:connector> @@ -108,46 +109,69 @@ runScript.preProcessRequest(execution)</bpmn:script> <bpmn:outgoing>Flow_1032bi1</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_1032bi1" sourceRef="Activity_0nhxd67" targetRef="EndEvent_05h01gx" /> + <bpmn:exclusiveGateway id="Gateway_1v41rsb" name="Enable SDNC?"> + <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming> + <bpmn:outgoing>Flow_0046aj5</bpmn:outgoing> + <bpmn:outgoing>Flow_0b2uim4</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="Flow_0046aj5" name="Yes" sourceRef="Gateway_1v41rsb" targetRef="Activity_1tw8eyy"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="Flow_0b2uim4" name="No" sourceRef="Gateway_1v41rsb" targetRef="ScriptTask_19uxoi8" /> </bpmn:process> <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" /> <bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" /> <bpmn:error id="Error_0p2naox" name="MSOWorkflowException" errorCode="MSOWorkflowException" /> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoActivateTransportNSSI"> + <bpmndi:BPMNEdge id="Flow_1032bi1_di" bpmnElement="Flow_1032bi1"> + <di:waypoint x="1040" y="380" /> + <di:waypoint x="1192" y="380" /> + </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt"> <di:waypoint x="385" y="121" /> - <di:waypoint x="509" y="121" /> + <di:waypoint x="465" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1jdb2oq_di" bpmnElement="SequenceFlow_1jdb2oq"> - <di:waypoint x="1080" y="121" /> - <di:waypoint x="1220" y="121" /> - <di:waypoint x="1220" y="210" /> - <di:waypoint x="335" y="210" /> - <di:waypoint x="335" y="310" /> + <di:waypoint x="1210" y="121" /> + <di:waypoint x="1310" y="121" /> + <di:waypoint x="1310" y="260" /> + <di:waypoint x="490" y="260" /> + <di:waypoint x="490" y="340" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0fuabjs_di" bpmnElement="Flow_0fuabjs"> - <di:waypoint x="850" y="121" /> - <di:waypoint x="959" y="121" /> + <di:waypoint x="990" y="121" /> + <di:waypoint x="1089" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0cpctye_di" bpmnElement="Flow_0cpctye"> - <di:waypoint x="630" y="121" /> - <di:waypoint x="729" y="121" /> + <di:waypoint x="730" y="121" /> + <di:waypoint x="869" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0kixzdj_di" bpmnElement="SequenceFlow_0kixzdj"> - <di:waypoint x="385" y="350" /> - <di:waypoint x="530" y="350" /> + <di:waypoint x="540" y="380" /> + <di:waypoint x="685" y="380" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1qv8qw1_di" bpmnElement="SequenceFlow_1qv8qw1"> - <di:waypoint x="630" y="350" /> - <di:waypoint x="740" y="350" /> + <di:waypoint x="785" y="380" /> + <di:waypoint x="940" y="380" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_03s744c_di" bpmnElement="SequenceFlow_03s744c"> <di:waypoint x="214" y="121" /> <di:waypoint x="285" y="121" /> </bpmndi:BPMNEdge> - <bpmndi:BPMNEdge id="Flow_1032bi1_di" bpmnElement="Flow_1032bi1"> - <di:waypoint x="840" y="350" /> - <di:waypoint x="1002" y="350" /> + <bpmndi:BPMNEdge id="Flow_0046aj5_di" bpmnElement="Flow_0046aj5"> + <di:waypoint x="515" y="121" /> + <di:waypoint x="609" y="121" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="553" y="103" width="19" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0b2uim4_di" bpmnElement="Flow_0b2uim4"> + <di:waypoint x="490" y="146" /> + <di:waypoint x="490" y="340" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="498" y="166" width="14" height="14" /> + </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd"> <dc:Bounds x="178" y="103" width="36" height="36" /> @@ -155,8 +179,35 @@ runScript.preProcessRequest(execution)</bpmn:script> <dc:Bounds x="163" y="146" width="81" height="53" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx"> + <dc:Bounds x="1192" y="362" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1200" y="405" width="20" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_0nhxd67_di" bpmnElement="Activity_0nhxd67"> - <dc:Bounds x="740" y="310" width="100" height="80" /> + <dc:Bounds x="940" y="340" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9"> + <dc:Bounds x="685" y="340" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> + <dc:Bounds x="1089" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb"> + <dc:Bounds x="869" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy"> + <dc:Bounds x="609" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Gateway_1v41rsb_di" bpmnElement="Gateway_1v41rsb" isMarkerVisible="true"> + <dc:Bounds x="465" y="96" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="453" y="73" width="75" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8"> + <dc:Bounds x="440" y="340" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true"> <dc:Bounds x="685" y="1080" width="781" height="196" /> @@ -178,27 +229,6 @@ runScript.preProcessRequest(execution)</bpmn:script> <bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw"> <dc:Bounds x="979" y="1144" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx"> - <dc:Bounds x="1002" y="332" width="36" height="36" /> - <bpmndi:BPMNLabel> - <dc:Bounds x="1010" y="375" width="20" height="14" /> - </bpmndi:BPMNLabel> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9"> - <dc:Bounds x="530" y="310" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_19uxoi8_di" bpmnElement="ScriptTask_19uxoi8"> - <dc:Bounds x="285" y="310" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy"> - <dc:Bounds x="509" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb"> - <dc:Bounds x="729" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> - <dc:Bounds x="959" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge"> <dc:Bounds x="285" y="81" width="100" height="80" /> </bpmndi:BPMNShape> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn index fefa022bb9..1f29f817b8 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoCreateTnNssiInstance.bpmn @@ -29,7 +29,7 @@ dcsi.createServiceInstance(execution)</bpmn:script> def dcsi = new DoCreateTnNssiInstance() dcsi.createAllottedResource(execution)</bpmn:script> </bpmn:scriptTask> - <bpmn:sequenceFlow id="SequenceFlow_17u69c4" sourceRef="ScriptTask_18rzwzb" targetRef="Event_1a9swwa" /> + <bpmn:sequenceFlow id="SequenceFlow_17u69c4" sourceRef="ScriptTask_18rzwzb" targetRef="Gateway_1cehbyc" /> <bpmn:intermediateCatchEvent id="Event_0l9vk9p" name="Start SDNC Operation"> <bpmn:outgoing>Flow_1c8zr59</bpmn:outgoing> <bpmn:linkEventDefinition id="LinkEventDefinition_0uwmpn2" name="SdncOperation" /> @@ -67,13 +67,23 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script> <bpmn:sequenceFlow id="Flow_1c8zr59" name="" sourceRef="Event_0l9vk9p" targetRef="Activity_0eh82ds" /> <bpmn:sequenceFlow id="Flow_0pko5tm" name="" sourceRef="Activity_0eh82ds" targetRef="Activity_1fs2182" /> <bpmn:sequenceFlow id="Flow_11kadz7" name="" sourceRef="Activity_1fs2182" targetRef="Activity_16luyg1" /> - <bpmn:endEvent id="Event_1rsf7yb"> + <bpmn:endEvent id="Event_1rsf7yb" name="No"> <bpmn:incoming>SequenceFlow_1uiz85h</bpmn:incoming> + <bpmn:incoming>Flow_07tmxxo</bpmn:incoming> </bpmn:endEvent> <bpmn:intermediateThrowEvent id="Event_1a9swwa" name="Goto SDNC operation"> - <bpmn:incoming>SequenceFlow_17u69c4</bpmn:incoming> + <bpmn:incoming>Flow_0dp5afv</bpmn:incoming> <bpmn:linkEventDefinition id="LinkEventDefinition_1skl6p7" name="SdncOperation" /> </bpmn:intermediateThrowEvent> + <bpmn:exclusiveGateway id="Gateway_1cehbyc" name="Enable SDNC?"> + <bpmn:incoming>SequenceFlow_17u69c4</bpmn:incoming> + <bpmn:outgoing>Flow_0dp5afv</bpmn:outgoing> + <bpmn:outgoing>Flow_07tmxxo</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="Flow_0dp5afv" name="Yes" sourceRef="Gateway_1cehbyc" targetRef="Event_1a9swwa"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="Flow_07tmxxo" name="No" sourceRef="Gateway_1cehbyc" targetRef="Event_1rsf7yb" /> </bpmn:process> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateTnNssiInstance"> @@ -91,7 +101,7 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_17u69c4_di" bpmnElement="SequenceFlow_17u69c4"> <di:waypoint x="830" y="129" /> - <di:waypoint x="982" y="129" /> + <di:waypoint x="895" y="129" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_0g5bwvl_di" bpmnElement="SequenceFlow_0g5bwvl"> <di:waypoint x="600" y="129" /> @@ -118,12 +128,36 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script> <dc:Bounds x="266" y="123" width="0" height="12" /> </bpmndi:BPMNLabel> </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0dp5afv_di" bpmnElement="Flow_0dp5afv"> + <di:waypoint x="945" y="129" /> + <di:waypoint x="1072" y="129" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="1000" y="113" width="19" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_07tmxxo_di" bpmnElement="Flow_07tmxxo"> + <di:waypoint x="920" y="154" /> + <di:waypoint x="920" y="375" /> + <di:waypoint x="972" y="375" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="929" y="262" width="14" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="allocateTnNssi_StartEvent"> <dc:Bounds x="175" y="111" width="36" height="36" /> <bpmndi:BPMNLabel> <dc:Bounds x="153" y="147" width="86" height="27" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task"> + <dc:Bounds x="310" y="89" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask"> + <dc:Bounds x="500" y="89" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="ScriptTask_18rzwzb_di" bpmnElement="ScriptTask_18rzwzb"> + <dc:Bounds x="730" y="89" width="100" height="80" /> + </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Event_0l9vk9p_di" bpmnElement="Event_0l9vk9p"> <dc:Bounds x="175" y="357" width="36" height="36" /> <bpmndi:BPMNLabel> @@ -141,21 +175,21 @@ dcsi.validateSDNCResponse(execution, response, "allocate")</bpmn:script> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Event_1rsf7yb_di" bpmnElement="Event_1rsf7yb"> <dc:Bounds x="972" y="357" width="36" height="36" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="983" y="400" width="14" height="14" /> + </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Event_1a9swwa_di" bpmnElement="Event_1a9swwa"> - <dc:Bounds x="982" y="111" width="36" height="36" /> + <dc:Bounds x="1072" y="111" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="973" y="154" width="59" height="27" /> + <dc:Bounds x="1063" y="154" width="59" height="27" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_18rzwzb_di" bpmnElement="ScriptTask_18rzwzb"> - <dc:Bounds x="730" y="89" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_1qmmew8_di" bpmnElement="instantiate_NSTask"> - <dc:Bounds x="500" y="89" width="100" height="80" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task"> - <dc:Bounds x="310" y="89" width="100" height="80" /> + <bpmndi:BPMNShape id="Gateway_1cehbyc_di" bpmnElement="Gateway_1cehbyc" isMarkerVisible="true"> + <dc:Bounds x="895" y="104" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="884" y="74" width="75" height="14" /> + </bpmndi:BPMNLabel> </bpmndi:BPMNShape> </bpmndi:BPMNPlane> </bpmndi:BPMNDiagram> diff --git a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn index 9dbc9909fc..de8391428d 100644 --- a/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn +++ b/bpmn/so-bpmn-infrastructure-flows/src/main/resources/subprocess/DoDeallocateTransportNSSI.bpmn @@ -35,7 +35,7 @@ runScript.prepareUpdateJobStatus(execution,"finished","100","Deallocated TN NSSI <bpmn:sequenceFlow id="SequenceFlow_03s744c" sourceRef="StartEvent_1nbljfd" targetRef="ScriptTask_1tc44ge" /> <bpmn:sequenceFlow id="SequenceFlow_1qv8qw1" sourceRef="ScriptTask_1ssh2l9" targetRef="Activity_0rgeefb" /> <bpmn:scriptTask id="Activity_1tw8eyy" name="PreProcess SDNC Deallocate TN NSSI Request" scriptFormat="groovy"> - <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming> + <bpmn:incoming>Flow_0sj0mtu</bpmn:incoming> <bpmn:outgoing>Flow_0cpctye</bpmn:outgoing> <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def runScript = new DoDeallocateTnNssi() @@ -68,6 +68,7 @@ runScript.validateSDNCResponse(execution, response, "deallocate")</bpmn:script> </bpmn:scriptTask> <bpmn:scriptTask id="Activity_013rjwc" name="Delete Service Instance (TN NSSI) in AAI" scriptFormat="groovy"> <bpmn:incoming>SequenceFlow_1jdb2oq</bpmn:incoming> + <bpmn:incoming>Flow_0dirb5b</bpmn:incoming> <bpmn:outgoing>SequenceFlow_1jygjln</bpmn:outgoing> <bpmn:script>import org.onap.so.bpmn.infrastructure.scripts.* def runScript = new DoDeallocateTnNssi() @@ -81,7 +82,7 @@ runScript.deleteServiceInstance(execution)</bpmn:script> def runScript = new DoDeallocateTnNssi() runScript.preProcessRequest(execution)</bpmn:script> </bpmn:scriptTask> - <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Activity_1tw8eyy" /> + <bpmn:sequenceFlow id="SequenceFlow_07e12rt" sourceRef="ScriptTask_1tc44ge" targetRef="Gateway_1spi9lo" /> <bpmn:sequenceFlow id="SequenceFlow_1jygjln" sourceRef="Activity_013rjwc" targetRef="ScriptTask_1ssh2l9" /> <bpmn:serviceTask id="Activity_0rgeefb" name="Update Resource Operation Status"> <bpmn:extensionElements> @@ -106,6 +107,15 @@ runScript.preProcessRequest(execution)</bpmn:script> <bpmn:outgoing>Flow_0ca4l8d</bpmn:outgoing> </bpmn:serviceTask> <bpmn:sequenceFlow id="Flow_0ca4l8d" sourceRef="Activity_0rgeefb" targetRef="EndEvent_05h01gx" /> + <bpmn:exclusiveGateway id="Gateway_1spi9lo" name="Enable SDNC?"> + <bpmn:incoming>SequenceFlow_07e12rt</bpmn:incoming> + <bpmn:outgoing>Flow_0sj0mtu</bpmn:outgoing> + <bpmn:outgoing>Flow_0dirb5b</bpmn:outgoing> + </bpmn:exclusiveGateway> + <bpmn:sequenceFlow id="Flow_0sj0mtu" name="Yes" sourceRef="Gateway_1spi9lo" targetRef="Activity_1tw8eyy"> + <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">#{(execution.getVariable("enableSdnc" ) == true)}</bpmn:conditionExpression> + </bpmn:sequenceFlow> + <bpmn:sequenceFlow id="Flow_0dirb5b" name="No" sourceRef="Gateway_1spi9lo" targetRef="Activity_013rjwc" /> </bpmn:process> <bpmn:message id="Message_0c4b2r5" name="SliceServiceTask" /> <bpmn:error id="Error_03akl5v" name="MSOWorkflowException" errorCode="MSOWorkflowException" /> @@ -113,40 +123,54 @@ runScript.preProcessRequest(execution)</bpmn:script> <bpmndi:BPMNDiagram id="BPMNDiagram_1"> <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoDeallocateTransportNSSI"> <bpmndi:BPMNEdge id="Flow_0ca4l8d_di" bpmnElement="Flow_0ca4l8d"> - <di:waypoint x="840" y="350" /> - <di:waypoint x="1022" y="350" /> + <di:waypoint x="1030" y="410" /> + <di:waypoint x="1152" y="410" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1jygjln_di" bpmnElement="SequenceFlow_1jygjln"> - <di:waypoint x="360" y="350" /> - <di:waypoint x="520" y="350" /> + <di:waypoint x="530" y="410" /> + <di:waypoint x="660" y="410" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_07e12rt_di" bpmnElement="SequenceFlow_07e12rt"> <di:waypoint x="385" y="121" /> - <di:waypoint x="509" y="121" /> + <di:waypoint x="455" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_1jdb2oq_di" bpmnElement="SequenceFlow_1jdb2oq"> - <di:waypoint x="1080" y="121" /> + <di:waypoint x="1130" y="121" /> <di:waypoint x="1220" y="121" /> - <di:waypoint x="1220" y="230" /> - <di:waypoint x="310" y="230" /> - <di:waypoint x="310" y="310" /> + <di:waypoint x="1220" y="260" /> + <di:waypoint x="480" y="260" /> + <di:waypoint x="480" y="370" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0fuabjs_di" bpmnElement="Flow_0fuabjs"> - <di:waypoint x="850" y="121" /> - <di:waypoint x="959" y="121" /> + <di:waypoint x="910" y="121" /> + <di:waypoint x="1009" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="Flow_0cpctye_di" bpmnElement="Flow_0cpctye"> - <di:waypoint x="630" y="121" /> - <di:waypoint x="729" y="121" /> + <di:waypoint x="690" y="121" /> + <di:waypoint x="789" y="121" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_1qv8qw1_di" bpmnElement="SequenceFlow_1qv8qw1"> - <di:waypoint x="620" y="350" /> - <di:waypoint x="740" y="350" /> + <di:waypoint x="760" y="410" /> + <di:waypoint x="930" y="410" /> </bpmndi:BPMNEdge> <bpmndi:BPMNEdge id="SequenceFlow_03s744c_di" bpmnElement="SequenceFlow_03s744c"> <di:waypoint x="214" y="121" /> <di:waypoint x="285" y="121" /> </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0sj0mtu_di" bpmnElement="Flow_0sj0mtu"> + <di:waypoint x="505" y="121" /> + <di:waypoint x="569" y="121" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="529" y="103" width="19" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> + <bpmndi:BPMNEdge id="Flow_0dirb5b_di" bpmnElement="Flow_0dirb5b"> + <di:waypoint x="480" y="146" /> + <di:waypoint x="480" y="370" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="483" y="166" width="14" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNEdge> <bpmndi:BPMNShape id="StartEvent_1nbljfd_di" bpmnElement="StartEvent_1nbljfd"> <dc:Bounds x="178" y="103" width="36" height="36" /> <bpmndi:BPMNLabel> @@ -154,17 +178,35 @@ runScript.preProcessRequest(execution)</bpmn:script> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ScriptTask_1ssh2l9_di" bpmnElement="ScriptTask_1ssh2l9"> - <dc:Bounds x="520" y="310" width="100" height="80" /> + <dc:Bounds x="660" y="370" width="100" height="80" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_013rjwc_di" bpmnElement="Activity_013rjwc"> + <dc:Bounds x="430" y="370" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="Activity_0rgeefb_di" bpmnElement="Activity_0rgeefb"> - <dc:Bounds x="740" y="310" width="100" height="80" /> + <dc:Bounds x="930" y="370" width="100" height="80" /> </bpmndi:BPMNShape> <bpmndi:BPMNShape id="EndEvent_05h01gx_di" bpmnElement="EndEvent_05h01gx"> - <dc:Bounds x="1022" y="332" width="36" height="36" /> + <dc:Bounds x="1152" y="392" width="36" height="36" /> <bpmndi:BPMNLabel> - <dc:Bounds x="1030" y="375" width="20" height="14" /> + <dc:Bounds x="1160" y="435" width="20" height="14" /> </bpmndi:BPMNLabel> </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy"> + <dc:Bounds x="569" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Gateway_1spi9lo_di" bpmnElement="Gateway_1spi9lo" isMarkerVisible="true"> + <dc:Bounds x="455" y="96" width="50" height="50" /> + <bpmndi:BPMNLabel> + <dc:Bounds x="443" y="73" width="75" height="14" /> + </bpmndi:BPMNLabel> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb"> + <dc:Bounds x="789" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> + <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> + <dc:Bounds x="1009" y="74" width="121" height="94" /> + </bpmndi:BPMNShape> <bpmndi:BPMNShape id="SubProcess_1yv9i68_di" bpmnElement="SubProcess_1yv9i68" isExpanded="true"> <dc:Bounds x="685" y="1080" width="781" height="196" /> </bpmndi:BPMNShape> @@ -185,18 +227,6 @@ runScript.preProcessRequest(execution)</bpmn:script> <bpmndi:BPMNShape id="ScriptTask_1swzdpw_di" bpmnElement="ScriptTask_1swzdpw"> <dc:Bounds x="979" y="1144" width="100" height="80" /> </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_1tw8eyy_di" bpmnElement="Activity_1tw8eyy"> - <dc:Bounds x="509" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0p20esb_di" bpmnElement="Activity_0p20esb"> - <dc:Bounds x="729" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_0phv8e5_di" bpmnElement="Activity_0phv8e5"> - <dc:Bounds x="959" y="74" width="121" height="94" /> - </bpmndi:BPMNShape> - <bpmndi:BPMNShape id="Activity_013rjwc_di" bpmnElement="Activity_013rjwc"> - <dc:Bounds x="260" y="310" width="100" height="80" /> - </bpmndi:BPMNShape> <bpmndi:BPMNShape id="ScriptTask_1tc44ge_di" bpmnElement="ScriptTask_1tc44ge"> <dc:Bounds x="285" y="81" width="100" height="80" /> </bpmndi:BPMNShape> diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java new file mode 100644 index 0000000000..6d90070b96 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidator.java @@ -0,0 +1,220 @@ +package org.onap.so.bpmn.infrastructure.workflow.tasks; + +import java.util.Map; +import java.util.Optional; +import org.onap.aai.domain.yang.GenericVnf; +import org.onap.aai.domain.yang.GenericVnfs; +import org.onap.aai.domain.yang.L3Network; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.aai.domain.yang.ServiceInstances; +import org.onap.aai.domain.yang.VolumeGroup; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds; +import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils; +import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException; +import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException; +import org.onap.so.serviceinstancebeans.RequestDetails; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class AaiResourceIdValidator { + + private static final Logger LOGGER = LoggerFactory.getLogger(AaiResourceIdValidator.class); + + private static final String SERVICE_INSTANCE = "serviceInstance"; + private static final String NAME_EXISTS_WITH_DIFF_VERSION_ID = "(%s) and different version id (%s)"; + private static final String WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI = + "WorkflowAction was unable to verify if the instance name already exist in AAI."; + private static final String NAME_EXISTS_MULTIPLE = + "(%s) and multiple combination of model-version-id + service-type + global-customer-id"; + private static final String NAME_EXISTS_WITH_DIFF_COMBINATION = + "(%s) and global-customer-id (%s), service-type (%s), model-version-id (%s)"; + private static final String NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID = + "(%s), same parent and different customization id (%s)"; + private static final String NAME_EXISTS_WITH_DIFF_PARENT = "(%s) id (%s) and different parent relationship"; + + + private final BBInputSetupUtils bbInputSetupUtils; + + public AaiResourceIdValidator(BBInputSetupUtils bbInputSetupUtils) { + this.bbInputSetupUtils = bbInputSetupUtils; + } + + protected String validateResourceIdInAAI(String generatedResourceId, WorkflowType type, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws Exception { + try { + if ("SERVICE".equalsIgnoreCase(type.toString())) { + return validateServiceResourceIdInAAI(generatedResourceId, instanceName, reqDetails); + } else if ("NETWORK".equalsIgnoreCase(type.toString())) { + return validateNetworkResourceIdInAAI(generatedResourceId, instanceName, reqDetails, + workflowResourceIds); + } else if ("VNF".equalsIgnoreCase(type.toString())) { + return validateVnfResourceIdInAAI(generatedResourceId, instanceName, reqDetails, workflowResourceIds); + } else if ("VFMODULE".equalsIgnoreCase(type.toString())) { + return validateVfModuleResourceIdInAAI(generatedResourceId, instanceName, reqDetails, + workflowResourceIds); + } else if ("VOLUMEGROUP".equalsIgnoreCase(type.toString())) { + return validateVolumeGroupResourceIdInAAI(generatedResourceId, instanceName, reqDetails, + workflowResourceIds); + } else if ("CONFIGURATION".equalsIgnoreCase(type.toString())) { + return validateConfigurationResourceIdInAAI(generatedResourceId, instanceName, reqDetails, + workflowResourceIds); + } + return generatedResourceId; + } catch (DuplicateNameException dne) { + throw dne; + } catch (Exception ex) { + LOGGER.error(WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI, ex); + throw new IllegalStateException( + WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI); + } + } + + protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails) throws DuplicateNameException { + String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId(); + String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType(); + if (instanceName != null) { + Optional<ServiceInstance> serviceInstanceAAI = + bbInputSetupUtils.getAAIServiceInstanceByName(globalCustomerId, serviceType, instanceName); + if (serviceInstanceAAI.isPresent()) { + if (serviceInstanceAAI.get().getModelVersionId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelVersionId())) { + return serviceInstanceAAI.get().getServiceInstanceId(); + } else { + throw new DuplicateNameException(SERVICE_INSTANCE, String.format(NAME_EXISTS_WITH_DIFF_VERSION_ID, + instanceName, reqDetails.getModelInfo().getModelVersionId())); + } + } else { + ServiceInstances aaiServiceInstances = + bbInputSetupUtils.getAAIServiceInstancesGloballyByName(instanceName); + if (aaiServiceInstances != null) { + if (aaiServiceInstances.getServiceInstance() != null + && !aaiServiceInstances.getServiceInstance().isEmpty()) { + if (aaiServiceInstances.getServiceInstance().size() > 1) { + throw new DuplicateNameException(SERVICE_INSTANCE, + String.format(NAME_EXISTS_MULTIPLE, instanceName)); + } else { + ServiceInstance si = aaiServiceInstances.getServiceInstance().stream().findFirst().get(); + Map<String, String> keys = + bbInputSetupUtils.getURIKeysFromServiceInstance(si.getServiceInstanceId()); + + throw new DuplicateNameException(SERVICE_INSTANCE, String.format( + NAME_EXISTS_WITH_DIFF_COMBINATION, instanceName, + keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId), + keys.get( + AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType), + si.getModelVersionId())); + } + } + } + } + } + return generatedResourceId; + } + + protected String validateNetworkResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) + throws DuplicateNameException, MultipleObjectsFoundException { + Optional<L3Network> network = bbInputSetupUtils + .getRelatedNetworkByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName); + if (network.isPresent()) { + if (network.get().getModelCustomizationId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { + return network.get().getNetworkId(); + } else { + throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, + instanceName, network.get().getModelCustomizationId())); + } + } + if (bbInputSetupUtils.existsAAINetworksGloballyByName(instanceName)) { + throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, + workflowResourceIds.getServiceInstanceId())); + } + return generatedResourceId; + } + + protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { + Optional<GenericVnf> vnf = bbInputSetupUtils + .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName); + if (vnf.isPresent()) { + if (vnf.get().getModelCustomizationId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { + return vnf.get().getVnfId(); + } else { + throw new DuplicateNameException("generic-vnf", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, + instanceName, vnf.get().getModelCustomizationId())); + } + } + GenericVnfs vnfs = bbInputSetupUtils.getAAIVnfsGloballyByName(instanceName); + if (vnfs != null) { + throw new DuplicateNameException("generic-vnf", + String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, vnfs.getGenericVnf().get(0).getVnfId())); + } + return generatedResourceId; + } + + protected String validateVfModuleResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { + GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(workflowResourceIds.getVnfId()); + if (vnf != null && vnf.getVfModules() != null) { + for (org.onap.aai.domain.yang.VfModule vfModule : vnf.getVfModules().getVfModule()) { + if (vfModule.getVfModuleName().equalsIgnoreCase(instanceName)) { + if (vfModule.getModelCustomizationId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { + return vfModule.getVfModuleId(); + } else { + throw new DuplicateNameException("vfModule", + String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, instanceName, + reqDetails.getModelInfo().getModelCustomizationId())); + } + } + } + } + if (bbInputSetupUtils.existsAAIVfModuleGloballyByName(instanceName)) { + throw new DuplicateNameException("vfModule", instanceName); + } + return generatedResourceId; + } + + protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { + Optional<VolumeGroup> volumeGroup = + bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName); + if (volumeGroup.isPresent()) { + if (volumeGroup.get().getVfModuleModelCustomizationId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { + return volumeGroup.get().getVolumeGroupId(); + } else { + throw new DuplicateNameException("volumeGroup", volumeGroup.get().getVolumeGroupName()); + } + } + if (bbInputSetupUtils.existsAAIVolumeGroupGloballyByName(instanceName)) { + throw new DuplicateNameException("volumeGroup", instanceName); + } + return generatedResourceId; + } + + protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName, + RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { + Optional<org.onap.aai.domain.yang.Configuration> configuration = + bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance( + workflowResourceIds.getServiceInstanceId(), instanceName); + if (configuration.isPresent()) { + if (configuration.get().getModelCustomizationId() + .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { + return configuration.get().getConfigurationId(); + } else { + throw new DuplicateNameException("configuration", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, + instanceName, configuration.get().getConfigurationId())); + } + } + if (bbInputSetupUtils.existsAAIConfigurationGloballyByName(instanceName)) { + throw new DuplicateNameException("configuration", instanceName); + } + return generatedResourceId; + } +} diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java index 79c846bb12..662cad542c 100644 --- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java +++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowAction.java @@ -31,12 +31,8 @@ import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.lang3.SerializationUtils; import org.camunda.bpm.engine.delegate.DelegateExecution; import org.javatuples.Pair; -import org.onap.aai.domain.yang.GenericVnf; -import org.onap.aai.domain.yang.GenericVnfs; -import org.onap.aai.domain.yang.L3Network; import org.onap.aai.domain.yang.Relationship; import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.aai.domain.yang.ServiceInstances; import org.onap.aai.domain.yang.Vnfc; import org.onap.aai.domain.yang.VolumeGroup; import org.onap.aai.domain.yang.VpnBinding; @@ -58,8 +54,6 @@ import org.onap.so.bpmn.servicedecomposition.entities.ExecuteBuildingBlock; import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds; import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetup; import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils; -import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException; -import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.MultipleObjectsFoundException; import org.onap.so.client.exception.ExceptionBuilder; import org.onap.so.client.orchestration.AAIConfigurationResources; import org.onap.so.client.orchestration.AAIEntityNotFoundException; @@ -104,10 +98,7 @@ import static org.onap.so.bpmn.infrastructure.workflow.tasks.WorkflowActionConst public class WorkflowAction { private static final String SERVICE_INSTANCES = "serviceInstances"; - private static final String SERVICE_INSTANCE = "serviceInstance"; private static final String VF_MODULES = "vfModules"; - private static final String WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI = - "WorkflowAction was unable to verify if the instance name already exist in AAI."; private static final String VNF_TYPE = "vnfType"; private static final String SERVICE = "Service"; private static final String VNF = "Vnf"; @@ -127,14 +118,6 @@ public class WorkflowAction { private static final String SERVICE_TYPE_BONDING = "BONDING"; private static final String CLOUD_OWNER = "DEFAULT"; private static final Logger logger = LoggerFactory.getLogger(WorkflowAction.class); - private static final String NAME_EXISTS_WITH_DIFF_VERSION_ID = "(%s) and different version id (%s)"; - private static final String NAME_EXISTS_MULTIPLE = - "(%s) and multiple combination of model-version-id + service-type + global-customer-id"; - private static final String NAME_EXISTS_WITH_DIFF_COMBINATION = - "(%s) and global-customer-id (%s), service-type (%s), model-version-id (%s)"; - private static final String NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID = - "(%s), same parent and different customization id (%s)"; - private static final String NAME_EXISTS_WITH_DIFF_PARENT = "(%s) id (%s) and different parent relationship"; private static final String CREATENETWORKBB = "CreateNetworkBB"; private static final String ACTIVATENETWORKBB = "ActivateNetworkBB"; private static final String VOLUMEGROUP_DELETE_PATTERN = "(Un|De)(.*)Volume(.*)"; @@ -161,6 +144,8 @@ public class WorkflowAction { private Environment environment; @Autowired private UserParamsServiceTraversal userParamsServiceTraversal; + @Autowired + private AaiResourceIdValidator aaiResourceIdValidator; public void setBbInputSetupUtils(BBInputSetupUtils bbInputSetupUtils) { this.bbInputSetupUtils = bbInputSetupUtils; @@ -1261,36 +1246,6 @@ public class WorkflowAction { } } - protected String validateResourceIdInAAI(String generatedResourceId, WorkflowType type, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws Exception { - try { - if ("SERVICE".equalsIgnoreCase(type.toString())) { - return validateServiceResourceIdInAAI(generatedResourceId, instanceName, reqDetails); - } else if ("NETWORK".equalsIgnoreCase(type.toString())) { - return validateNetworkResourceIdInAAI(generatedResourceId, instanceName, reqDetails, - workflowResourceIds); - } else if ("VNF".equalsIgnoreCase(type.toString())) { - return validateVnfResourceIdInAAI(generatedResourceId, instanceName, reqDetails, workflowResourceIds); - } else if ("VFMODULE".equalsIgnoreCase(type.toString())) { - return validateVfModuleResourceIdInAAI(generatedResourceId, instanceName, reqDetails, - workflowResourceIds); - } else if ("VOLUMEGROUP".equalsIgnoreCase(type.toString())) { - return validateVolumeGroupResourceIdInAAI(generatedResourceId, instanceName, reqDetails, - workflowResourceIds); - } else if ("CONFIGURATION".equalsIgnoreCase(type.toString())) { - return validateConfigurationResourceIdInAAI(generatedResourceId, instanceName, reqDetails, - workflowResourceIds); - } - return generatedResourceId; - } catch (DuplicateNameException dne) { - throw dne; - } catch (Exception ex) { - logger.error(WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI, ex); - throw new IllegalStateException( - WORKFLOW_ACTION_WAS_UNABLE_TO_VERIFY_IF_THE_INSTANCE_NAME_ALREADY_EXIST_IN_AAI); - } - } - protected String convertTypeFromPlural(String type) { if (!type.matches(SUPPORTEDTYPES)) { return type; @@ -1581,152 +1536,6 @@ public class WorkflowAction { && (bbInputSetupUtils.getAAIServiceInstanceById(serviceInstanceId) != null)); } - protected String validateServiceResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails) throws DuplicateNameException { - String globalCustomerId = reqDetails.getSubscriberInfo().getGlobalSubscriberId(); - String serviceType = reqDetails.getRequestParameters().getSubscriptionServiceType(); - if (instanceName != null) { - Optional<ServiceInstance> serviceInstanceAAI = - bbInputSetupUtils.getAAIServiceInstanceByName(globalCustomerId, serviceType, instanceName); - if (serviceInstanceAAI.isPresent()) { - if (serviceInstanceAAI.get().getModelVersionId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelVersionId())) { - return serviceInstanceAAI.get().getServiceInstanceId(); - } else { - throw new DuplicateNameException(SERVICE_INSTANCE, String.format(NAME_EXISTS_WITH_DIFF_VERSION_ID, - instanceName, reqDetails.getModelInfo().getModelVersionId())); - } - } else { - ServiceInstances aaiServiceInstances = - bbInputSetupUtils.getAAIServiceInstancesGloballyByName(instanceName); - if (aaiServiceInstances != null) { - if (aaiServiceInstances.getServiceInstance() != null - && !aaiServiceInstances.getServiceInstance().isEmpty()) { - if (aaiServiceInstances.getServiceInstance().size() > 1) { - throw new DuplicateNameException(SERVICE_INSTANCE, - String.format(NAME_EXISTS_MULTIPLE, instanceName)); - } else { - ServiceInstance si = aaiServiceInstances.getServiceInstance().stream().findFirst().get(); - Map<String, String> keys = - bbInputSetupUtils.getURIKeysFromServiceInstance(si.getServiceInstanceId()); - - throw new DuplicateNameException(SERVICE_INSTANCE, String.format( - NAME_EXISTS_WITH_DIFF_COMBINATION, instanceName, - keys.get(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId), - keys.get( - AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType), - si.getModelVersionId())); - } - } - } - } - } - return generatedResourceId; - } - - protected String validateNetworkResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) - throws DuplicateNameException, MultipleObjectsFoundException { - Optional<L3Network> network = bbInputSetupUtils - .getRelatedNetworkByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName); - if (network.isPresent()) { - if (network.get().getModelCustomizationId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { - return network.get().getNetworkId(); - } else { - throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, - instanceName, network.get().getModelCustomizationId())); - } - } - if (bbInputSetupUtils.existsAAINetworksGloballyByName(instanceName)) { - throw new DuplicateNameException("l3Network", String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, - workflowResourceIds.getServiceInstanceId())); - } - return generatedResourceId; - } - - protected String validateVnfResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { - Optional<GenericVnf> vnf = bbInputSetupUtils - .getRelatedVnfByNameFromServiceInstance(workflowResourceIds.getServiceInstanceId(), instanceName); - if (vnf.isPresent()) { - if (vnf.get().getModelCustomizationId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { - return vnf.get().getVnfId(); - } else { - throw new DuplicateNameException("generic-vnf", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, - instanceName, vnf.get().getModelCustomizationId())); - } - } - GenericVnfs vnfs = bbInputSetupUtils.getAAIVnfsGloballyByName(instanceName); - if (vnfs != null) { - throw new DuplicateNameException("generic-vnf", - String.format(NAME_EXISTS_WITH_DIFF_PARENT, instanceName, vnfs.getGenericVnf().get(0).getVnfId())); - } - return generatedResourceId; - } - - protected String validateVfModuleResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { - GenericVnf vnf = bbInputSetupUtils.getAAIGenericVnf(workflowResourceIds.getVnfId()); - if (vnf != null && vnf.getVfModules() != null) { - for (org.onap.aai.domain.yang.VfModule vfModule : vnf.getVfModules().getVfModule()) { - if (vfModule.getVfModuleName().equalsIgnoreCase(instanceName)) { - if (vfModule.getModelCustomizationId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { - return vfModule.getVfModuleId(); - } else { - throw new DuplicateNameException("vfModule", - String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, instanceName, - reqDetails.getModelInfo().getModelCustomizationId())); - } - } - } - } - if (bbInputSetupUtils.existsAAIVfModuleGloballyByName(instanceName)) { - throw new DuplicateNameException("vfModule", instanceName); - } - return generatedResourceId; - } - - protected String validateVolumeGroupResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { - Optional<VolumeGroup> volumeGroup = - bbInputSetupUtils.getRelatedVolumeGroupByNameFromVnf(workflowResourceIds.getVnfId(), instanceName); - if (volumeGroup.isPresent()) { - if (volumeGroup.get().getVfModuleModelCustomizationId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { - return volumeGroup.get().getVolumeGroupId(); - } else { - throw new DuplicateNameException("volumeGroup", volumeGroup.get().getVolumeGroupName()); - } - } - if (bbInputSetupUtils.existsAAIVolumeGroupGloballyByName(instanceName)) { - throw new DuplicateNameException("volumeGroup", instanceName); - } - return generatedResourceId; - } - - protected String validateConfigurationResourceIdInAAI(String generatedResourceId, String instanceName, - RequestDetails reqDetails, WorkflowResourceIds workflowResourceIds) throws DuplicateNameException { - Optional<org.onap.aai.domain.yang.Configuration> configuration = - bbInputSetupUtils.getRelatedConfigurationByNameFromServiceInstance( - workflowResourceIds.getServiceInstanceId(), instanceName); - if (configuration.isPresent()) { - if (configuration.get().getModelCustomizationId() - .equalsIgnoreCase(reqDetails.getModelInfo().getModelCustomizationId())) { - return configuration.get().getConfigurationId(); - } else { - throw new DuplicateNameException("configuration", String.format(NAME_EXISTS_WITH_DIFF_CUSTOMIZATION_ID, - instanceName, configuration.get().getConfigurationId())); - } - } - if (bbInputSetupUtils.existsAAIConfigurationGloballyByName(instanceName)) { - throw new DuplicateNameException("configuration", instanceName); - } - return generatedResourceId; - } - protected boolean foundRelated(List<Resource> resourceList) { return (containsWorkflowType(resourceList, WorkflowType.VNF) || containsWorkflowType(resourceList, WorkflowType.PNF) @@ -1767,7 +1576,7 @@ public class WorkflowAction { WorkflowResourceIds workflowResourceIds) throws Exception { if (resource.isGenerated() && requestAction.equalsIgnoreCase("createInstance") && requestDetails.getRequestInfo().getInstanceName() != null) { - return validateResourceIdInAAI(resource.getResourceId(), resource.getResourceType(), + return aaiResourceIdValidator.validateResourceIdInAAI(resource.getResourceId(), resource.getResourceType(), requestDetails.getRequestInfo().getInstanceName(), requestDetails, workflowResourceIds); } else { return resource.getResourceId(); diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/decisionpoint/impl/buildingblock/controller/sdnc/prepare/PrepareSdncUpgradePreCheckPnfBBTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/decisionpoint/impl/buildingblock/controller/sdnc/prepare/PrepareSdncUpgradePreCheckPnfBBTest.java new file mode 100644 index 0000000000..0ba1e27f5e --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/decisionpoint/impl/buildingblock/controller/sdnc/prepare/PrepareSdncUpgradePreCheckPnfBBTest.java @@ -0,0 +1,88 @@ +/*- + * ============LICENSE_START======================================================= + * Copyright (C) 2020 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.onap.so.bpmn.infrastructure.decisionpoint.impl.buildingblock.controller.sdnc.prepare; + +import static org.assertj.core.api.Assertions.assertThat; +import org.camunda.bpm.engine.delegate.DelegateExecution; +import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake; +import org.junit.Before; +import org.junit.Test; +import org.onap.so.bpmn.common.BuildingBlockExecution; +import org.onap.so.bpmn.common.DelegateExecutionImpl; +import org.onap.so.bpmn.infrastructure.decisionpoint.api.ControllerContext; + +public class PrepareSdncUpgradePreCheckPnfBBTest { + + private PrepareSdncUpgradePreCheckPnfBB testedObject; + + @Before + public void setup() { + testedObject = new PrepareSdncUpgradePreCheckPnfBB(); + } + + @Test + public void understandTrue() { + ControllerContext<BuildingBlockExecution> controllerContext = + createControllerContext("sdnc", "UpgradePreCheck", "pnf"); + boolean result = testedObject.understand(controllerContext); + assertThat(result).isTrue(); + } + + @Test + public void understandFalse() { + ControllerContext<BuildingBlockExecution> controllerContext = + createControllerContext("actor1", "action1", "scope1"); + boolean result = testedObject.understand(controllerContext); + assertThat(result).isFalse(); + } + + @Test + public void prepare_jsonWithoutActionPayload() { + String payloadWithoutActionArray = "{\"json name\": \"test1\"}"; + ControllerContext<BuildingBlockExecution> controllerContext = + createControllerContext(payloadWithoutActionArray); + testedObject.prepare(controllerContext); + + assertThat((String) controllerContext.getExecution().getVariable("payload")) + .isEqualTo(payloadWithoutActionArray); + } + + private ControllerContext<BuildingBlockExecution> createControllerContext(String actor, String action, + String scope) { + ControllerContext<BuildingBlockExecution> controllerContext = new ControllerContext<>(); + controllerContext.setControllerActor(actor); + controllerContext.setControllerAction(action); + controllerContext.setControllerScope(scope); + return controllerContext; + } + + private ControllerContext<BuildingBlockExecution> createControllerContext(String payload) { + ControllerContext<BuildingBlockExecution> controllerContext = new ControllerContext<>(); + controllerContext.setExecution(prepareBuildingBlockExecution(payload)); + return controllerContext; + } + + private BuildingBlockExecution prepareBuildingBlockExecution(String payload) { + DelegateExecution execution = new DelegateExecutionFake(); + execution.setVariable("payload", payload); + return new DelegateExecutionImpl(execution); + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java new file mode 100644 index 0000000000..ead6c0b4cf --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/AaiResourceIdValidatorTest.java @@ -0,0 +1,765 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * Modifications Copyright (c) 2019 Samsung + * ================================================================================ + * Modifications Copyright (c) 2020 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.bpmn.infrastructure.workflow.tasks; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.when; +import java.util.HashMap; +import java.util.Map; +import java.util.Optional; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.aai.domain.yang.GenericVnf; +import org.onap.aai.domain.yang.GenericVnfs; +import org.onap.aai.domain.yang.L3Network; +import org.onap.aai.domain.yang.ServiceInstance; +import org.onap.aai.domain.yang.ServiceInstances; +import org.onap.aai.domain.yang.VfModule; +import org.onap.aai.domain.yang.VfModules; +import org.onap.aai.domain.yang.VolumeGroup; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder; +import org.onap.so.bpmn.servicedecomposition.entities.WorkflowResourceIds; +import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils; +import org.onap.so.bpmn.servicedecomposition.tasks.exceptions.DuplicateNameException; +import org.onap.so.serviceinstancebeans.ModelInfo; +import org.onap.so.serviceinstancebeans.RequestDetails; +import org.onap.so.serviceinstancebeans.RequestParameters; +import org.onap.so.serviceinstancebeans.SubscriberInfo; + +@RunWith(MockitoJUnitRunner.class) +public class AaiResourceIdValidatorTest { + + @Mock + private BBInputSetupUtils bbInputSetupUtilsMock; + + @InjectMocks + private AaiResourceIdValidator testedObject; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Test + public void validateResourceIdInAAIVnfTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + GenericVnf vnf = new GenericVnf(); + vnf.setVnfId("id123"); + vnf.setModelCustomizationId("1234567"); + Optional<GenericVnf> opVnf = Optional.of(vnf); + GenericVnf vnf2 = new GenericVnf(); + vnf2.setVnfId("id123"); + vnf2.setModelCustomizationId("222"); + Optional<GenericVnf> opVnf2 = Optional.of(vnf2); + when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); + when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "nameTest", reqDetails, + workflowResourceIds); + assertEquals("generatedId123", id2); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails, + workflowResourceIds); + } + + @Test + public void validateResourceIdInAAIVnfNotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + GenericVnfs genericVnfs = new GenericVnfs(); + GenericVnf vnf3 = new GenericVnf(); + vnf3.setVnfId("id123"); + + genericVnfs.getGenericVnf().add(vnf3); + when(bbInputSetupUtilsMock.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAINetworkTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + L3Network network = new L3Network(); + network.setNetworkId("id123"); + network.setModelCustomizationId("1234567"); + Optional<L3Network> opNetwork = Optional.of(network); + L3Network network2 = new L3Network(); + network2.setNetworkId("id123"); + network2.setModelCustomizationId("222"); + Optional<L3Network> opNetwork2 = Optional.of(network2); + + when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opNetwork); + when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222")) + .thenReturn(opNetwork2); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", reqDetails, + workflowResourceIds); + assertEquals("generatedId123", id2); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails, + workflowResourceIds); + } + + @Test + public void validateNetworkResourceNameExistsInAAITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + + when(bbInputSetupUtilsMock.existsAAINetworksGloballyByName("networkName333")).thenReturn(true); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails, + workflowResourceIds); + } + + @Test + public void validateResourceIdInAAIVfModuleTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("id123"); + + GenericVnf vnf = new GenericVnf(); + VfModules vfModules = new VfModules(); + VfModule vfModule = new VfModule(); + vfModule.setVfModuleId("id123"); + vfModule.setVfModuleName("name123"); + vfModule.setModelCustomizationId("1234567"); + vfModules.getVfModule().add(vfModule); + vnf.setVfModules(vfModules); + + when(bbInputSetupUtilsMock.getAAIGenericVnf("id123")).thenReturn(vnf); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + + GenericVnf vnf1 = new GenericVnf(); + VfModules vfModules2 = new VfModules(); + VfModule vfModule2 = new VfModule(); + vfModule2.setVfModuleName("vFModName222"); + vfModule2.setModelCustomizationId("222"); + vfModules2.getVfModule().add(vfModule2); + vnf1.setVfModules(vfModules2); + workflowResourceIds.setVnfId("id111"); + when(bbInputSetupUtilsMock.getAAIGenericVnf("id111")).thenReturn(vnf1); + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", reqDetails, + workflowResourceIds); + assertEquals("generatedId123", id2); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails, + workflowResourceIds); + } + + @Test + public void validateResourceIdInAAIVfModuleNotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + + when(bbInputSetupUtilsMock.existsAAIVfModuleGloballyByName("vFModName333")).thenReturn(true); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("vfModule with name vFModName333 already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName333", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAIVolumeGroupTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("id123"); + VolumeGroup volumeGroup = new VolumeGroup(); + volumeGroup.setVolumeGroupId("id123"); + volumeGroup.setVolumeGroupName("name123"); + volumeGroup.setVfModuleModelCustomizationId("1234567"); + Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); + + when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", + reqDetails, workflowResourceIds); + assertEquals("id123", id); + + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111", + reqDetails, workflowResourceIds); + assertEquals("generatedId123", id2); + } + + + @Test + public void validateSourceIdInAAIVolumeGroupNotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + when(bbInputSetupUtilsMock.existsAAIVolumeGroupGloballyByName("testVolumeGroup")).thenReturn(true); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("volumeGroup with name testVolumeGroup already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "testVolumeGroup", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAIConfigurationTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + + org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); + configuration.setConfigurationId("id123"); + configuration.setModelCustomizationId("1234567"); + Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); + + org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration(); + configuration2.setConfigurationId("id123"); + configuration2.setModelCustomizationId("222"); + Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2); + + when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opConfiguration); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123", + reqDetails, workflowResourceIds); + assertEquals("id123", id); + + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111", + reqDetails, workflowResourceIds); + assertEquals("generatedId123", id2); + + when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222")) + .thenReturn(opConfiguration2); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails, + workflowResourceIds); + } + + @Test + public void validateResourceIdInAAIConfigurationNotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + when(bbInputSetupUtilsMock.existsAAIConfigurationGloballyByName("testConfig")).thenReturn(true); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("configuration with name testConfig already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "testConfig", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAISITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + reqDetails.getModelInfo().setModelVersionId("1234567"); + + ServiceInstance si = new ServiceInstance(); + si.setServiceInstanceId("siId123"); + si.setModelVersionId("1234567"); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(si); + Optional<ServiceInstance> siOp = Optional.of(si); + ServiceInstance si2 = new ServiceInstance(); + si2.setServiceInstanceId("siId222"); + si2.setModelVersionId("22222"); + si2.setServiceInstanceName("siName222"); + Optional<ServiceInstance> siOp2 = Optional.of(si2); + ServiceInstances serviceInstances2 = new ServiceInstances(); + serviceInstances2.getServiceInstance().add(si2); + + when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")) + .thenReturn(siOp); + when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222")) + .thenReturn(siOp2); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", + reqDetails, new WorkflowResourceIds()); + assertEquals("siId123", id); + String id2 = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id2); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAIMultipleSITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + reqDetails.getModelInfo().setModelVersionId("1234567"); + ServiceInstance si = new ServiceInstance(); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(si); + ServiceInstance si2 = new ServiceInstance(); + serviceInstances.getServiceInstance().add(si2); + when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateResourceIdInAAISIExistsTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + reqDetails.getModelInfo().setModelVersionId("1234567"); + + ServiceInstance si = new ServiceInstance(); + si.setServiceInstanceId("siId123"); + si.setModelVersionId("1234567"); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(si); + + Map<String, String> uriKeys = new HashMap<>(); + uriKeys.put(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId, "globalCustomerId"); + uriKeys.put(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType, "serviceType"); + + when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances); + when(bbInputSetupUtilsMock.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique.")); + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, + new WorkflowResourceIds()); + } + + @Test + public void validateServiceResourceIdInAAINoDupTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); + assertEquals("generatedId123", id); + } + + @Test + public void validateServiceResourceIdInAAISameModelVersionId() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + reqDetails.getModelInfo().setModelVersionId("1234567"); + + ServiceInstance si = new ServiceInstance(); + si.setServiceInstanceId("siId123"); + si.setModelVersionId("1234567"); + Optional<ServiceInstance> siOp = Optional.of(si); + + when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")) + .thenReturn(siOp); + String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); + assertEquals("siId123", id); + } + + @Test + public void validateServiceResourceIdInAAIDifferentModelVersionId() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + reqDetails.getModelInfo().setModelVersionId("1234567"); + + ServiceInstance si = new ServiceInstance(); + si.setModelVersionId("9999999"); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(si); + Optional<ServiceInstance> siOp = Optional.of(si); + + when(bbInputSetupUtilsMock.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")) + .thenReturn(siOp); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName123) and different version id (1234567) already exists. The name must be unique.")); + + String id = testedObject.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); + assertEquals("siId123", id); + } + + @Test + public void validateServiceResourceIdInAAIDuplicateNameTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + ServiceInstance si = new ServiceInstance(); + si.setModelVersionId("1234567"); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(si); + + when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName) and global-customer-id (null), service-type (null), model-version-id (1234567) already exists. The name must be unique.")); + + testedObject.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails); + } + + @Test + public void validateServiceResourceIdInAAIDuplicateNameMultipleTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + ServiceInstances serviceInstances = new ServiceInstances(); + serviceInstances.getServiceInstance().add(new ServiceInstance()); + serviceInstances.getServiceInstance().add(new ServiceInstance()); + + when(bbInputSetupUtilsMock.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "serviceInstance with name (siName) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique.")); + + testedObject.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails); + } + + @Test + public void validateNetworkResourceIdInAAITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id); + } + + @Test + public void validateNetworkResourceIdInAAISameModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + L3Network network = new L3Network(); + network.setNetworkId("id123"); + network.setModelCustomizationId("1234567"); + Optional<L3Network> opNetwork = Optional.of(network); + + when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opNetwork); + + String id = testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + } + + @Test + public void validateNetworkResourceIdInAAIDuplicateNameTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + L3Network network = new L3Network(); + network.setModelCustomizationId("9999999"); + Optional<L3Network> opNetwork = Optional.of(network); + + when(bbInputSetupUtilsMock.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opNetwork); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "l3Network with name (name123), same parent and different customization id (9999999) already exists. The name must be unique.")); + + testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + @Test + public void validateNetworkResourceIdInAAINotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + + when(bbInputSetupUtilsMock.existsAAINetworksGloballyByName("name123")).thenReturn(true); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "l3Network with name (name123) id (siId123) and different parent relationship already exists. The name must be unique.")); + + testedObject.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + @Test + public void validateVnfResourceIdInAAITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id); + } + + @Test + public void validateVnfResourceIdInAAISameModelCustomizationIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + + GenericVnf vnf = new GenericVnf(); + vnf.setVnfId("id123"); + vnf.setModelCustomizationId("1234567"); + Optional<GenericVnf> opVnf = Optional.of(vnf); + + when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); + String id = testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + } + + @Test + public void validateVnfResourceIdInAAIDiffModelCustomizationIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + GenericVnf vnf = new GenericVnf(); + vnf.setModelCustomizationId("9999999"); + Optional<GenericVnf> opVnf = Optional.of(vnf); + + when(bbInputSetupUtilsMock.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "generic-vnf with name (vnfName123), same parent and different customization id (9999999) already exists. The name must be unique.")); + + testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds); + } + + @Test + public void validateVnfResourceIdInAAINotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + GenericVnf vnf = new GenericVnf(); + vnf.setVnfId("id123"); + GenericVnfs genericVnfs = new GenericVnfs(); + genericVnfs.getGenericVnf().add(vnf); + + when(bbInputSetupUtilsMock.getAAIVnfsGloballyByName("vnfName123")).thenReturn(genericVnfs); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "generic-vnf with name (vnfName123) id (id123) and different parent relationship already exists. The name must be unique.")); + + testedObject.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, new WorkflowResourceIds()); + } + + @Test + public void validateVfModuleResourceIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id); + } + + @Test + public void validateVfModuleResourceIdSameModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("vnfId123"); + VfModules vfModules = new VfModules(); + VfModule vfModule = new VfModule(); + vfModule.setVfModuleId("id123"); + vfModule.setVfModuleName("name123"); + vfModule.setModelCustomizationId("1234567"); + vfModules.getVfModule().add(vfModule); + GenericVnf vnf = new GenericVnf(); + vnf.setVfModules(vfModules); + + when(bbInputSetupUtilsMock.getAAIGenericVnf("vnfId123")).thenReturn(vnf); + + String id = testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + } + + @Test + public void validateVfModuleResourceIdDifferentModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("vnfId123"); + VfModules vfModules = new VfModules(); + VfModule vfModule = new VfModule(); + vfModule.setVfModuleName("name123"); + vfModule.setModelCustomizationId("9999999"); + vfModules.getVfModule().add(vfModule); + GenericVnf vnf = new GenericVnf(); + vnf.setVfModules(vfModules); + + when(bbInputSetupUtilsMock.getAAIGenericVnf("vnfId123")).thenReturn(vnf); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "vfModule with name (name123), same parent and different customization id (1234567) already exists. The name must be unique.")); + + testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + @Test + public void validateVfModuleResourceIdNotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + when(bbInputSetupUtilsMock.existsAAIVfModuleGloballyByName("name123")).thenReturn(true); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException + .expectMessage(containsString("vfModule with name name123 already exists. The name must be unique.")); + + testedObject.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + @Test + public void validateVolumeGroupResourceIdInAAITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateVolumeGroupResourceIdInAAI("generatedId123", "name123", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id); + } + + @Test + public void validateVolumeGroupResourceIdInAAISameModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("vnfId123"); + VolumeGroup volumeGroup = new VolumeGroup(); + volumeGroup.setVolumeGroupId("id123"); + volumeGroup.setVfModuleModelCustomizationId("1234567"); + Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); + + when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup); + String id = testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", + reqDetails, workflowResourceIds); + + assertEquals("id123", id); + } + + @Test + public void validateVolumeGroupResourceIdInAAIDifferentModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setVnfId("vnfId123"); + VolumeGroup volumeGroup = new VolumeGroup(); + volumeGroup.setVolumeGroupName("name123"); + volumeGroup.setVfModuleModelCustomizationId("9999999"); + Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); + + when(bbInputSetupUtilsMock.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("volumeGroup with name name123 already exists. The name must be unique.")); + + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, + workflowResourceIds); + } + + @Test + public void validateVolumeGroupResourceIdInAAINotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + when(bbInputSetupUtilsMock.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(true); + + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("volumeGroup with name name123 already exists. The name must be unique.")); + + testedObject.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, + workflowResourceIds); + } + + @Test + public void validateConfigurationResourceIdInAAITest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + String id = testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, + new WorkflowResourceIds()); + assertEquals("generatedId123", id); + } + + @Test + public void validateConfigurationResourceIdInAAISameModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); + configuration.setConfigurationId("id123"); + configuration.setModelCustomizationId("1234567"); + Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); + + when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opConfiguration); + + String id = testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, + workflowResourceIds); + assertEquals("id123", id); + } + + @Test + public void validateConfigurationResourceIdInAAIDifferentModelCustIdTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + workflowResourceIds.setServiceInstanceId("siId123"); + org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); + configuration.setConfigurationId("id123"); + configuration.setModelCustomizationId("9999999"); + Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); + + when(bbInputSetupUtilsMock.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) + .thenReturn(opConfiguration); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage(containsString( + "configuration with name (name123), same parent and different customization id (id123) already exists. The name must be unique.")); + + testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + @Test + public void validateConfigurationResourceIdInAAINotGloballyUniqueTest() throws Exception { + RequestDetails reqDetails = setupRequestDetails(); + WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); + + when(bbInputSetupUtilsMock.existsAAIConfigurationGloballyByName("name123")).thenReturn(true); + this.expectedException.expect(DuplicateNameException.class); + this.expectedException.expectMessage( + containsString("configuration with name name123 already exists. The name must be unique.")); + + testedObject.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); + } + + private RequestDetails setupRequestDetails() { + RequestDetails reqDetails = new RequestDetails(); + SubscriberInfo subInfo = new SubscriberInfo(); + subInfo.setGlobalSubscriberId("id123"); + reqDetails.setSubscriberInfo(subInfo); + RequestParameters reqParams = new RequestParameters(); + reqParams.setSubscriptionServiceType("subServiceType123"); + reqDetails.setRequestParameters(reqParams); + ModelInfo modelInfo = new ModelInfo(); + modelInfo.setModelCustomizationId("1234567"); + reqDetails.setModelInfo(modelInfo); + return reqDetails; + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionExtractResourcesAAITest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionExtractResourcesAAITest.java new file mode 100644 index 0000000000..35a5bfefd7 --- /dev/null +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionExtractResourcesAAITest.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP - SO + * ================================================================================ + * Modifications Copyright (c) 2020 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. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + */ + +package org.onap.so.bpmn.infrastructure.workflow.tasks; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; +import org.onap.aai.domain.yang.VpnBinding; +import org.onap.aaiclient.client.aai.entities.AAIResultWrapper; +import org.onap.aaiclient.client.aai.entities.Relationships; +import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri; +import org.onap.aaiclient.client.aai.entities.uri.AAISimpleUri; +import org.onap.aaiclient.client.generated.fluentbuilders.AAIFluentTypeBuilder.Types; +import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; +import org.onap.so.bpmn.servicedecomposition.tasks.BBInputSetupUtils; + +@RunWith(MockitoJUnitRunner.class) +public class WorkflowActionExtractResourcesAAITest { + + private static final String CONFIGURATION_ID = "configTestId"; + private static final String VPN_ID = "vpnTestId"; + + @Mock + private BBInputSetupUtils bbInputSetupUtils; + @InjectMocks + private WorkflowActionExtractResourcesAAI testedObject; + + @Test + public void extractRelationshipsConfigurationSuccess() { + // given + Relationships relationships = mock(Relationships.class); + when(relationships.getByType(Types.CONFIGURATION)).thenReturn(getConfigurationList()); + // when + Optional<Configuration> resultOpt = testedObject.extractRelationshipsConfiguration(relationships); + // then + assertThat(resultOpt).isNotEmpty(); + assertThat(resultOpt.get().getConfigurationId()).isEqualTo(CONFIGURATION_ID); + } + + @Test + public void extractRelationshipsConfiguration_notFound() { + // given + Relationships relationships = mock(Relationships.class); + when(relationships.getByType(Types.CONFIGURATION)).thenReturn(Collections.emptyList()); + // when + Optional<Configuration> resultOpt = testedObject.extractRelationshipsConfiguration(relationships); + // then + assertThat(resultOpt).isEmpty(); + } + + @Test + public void extractRelationshipsVpnBindingSuccess() { + // given + Relationships relationships = mock(Relationships.class); + AAIResourceUri aaiResourceUri = mock(AAISimpleUri.class); + List<AAIResourceUri> aaiResourceUriList = new ArrayList<>(); + aaiResourceUriList.add(aaiResourceUri); + when(relationships.getRelatedUris(Types.VPN_BINDING)).thenReturn(aaiResourceUriList); + AAIResultWrapper aaiResultWrapper = new AAIResultWrapper("{\"vpn-id\" : \"" + VPN_ID + "\"}"); + when(bbInputSetupUtils.getAAIResourceDepthOne(aaiResourceUri)).thenReturn(aaiResultWrapper); + // when + Optional<VpnBinding> resultOpt = testedObject.extractRelationshipsVpnBinding(relationships); + // then + assertThat(resultOpt).isNotEmpty(); + assertThat(resultOpt.get().getVpnId()).isEqualTo(VPN_ID); + } + + private List<AAIResultWrapper> getConfigurationList() { + List<AAIResultWrapper> configurations = new ArrayList<>(); + AAIResultWrapper aaiResultWrapper = + new AAIResultWrapper("{\"configuration-id\" : \"" + CONFIGURATION_ID + "\"}"); + configurations.add(aaiResultWrapper); + return configurations; + } +} diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java index 0a3f74c2ea..5f9356d066 100644 --- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java +++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/bpmn/infrastructure/workflow/tasks/WorkflowActionTest.java @@ -51,9 +51,7 @@ import java.nio.file.Files; import java.nio.file.Paths; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.List; -import java.util.Map; import java.util.Optional; import java.util.UUID; import org.camunda.bpm.engine.delegate.BpmnError; @@ -68,15 +66,10 @@ import org.junit.rules.ExpectedException; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import org.onap.aai.domain.yang.GenericVnf; -import org.onap.aai.domain.yang.GenericVnfs; -import org.onap.aai.domain.yang.L3Network; import org.onap.aai.domain.yang.Relationship; import org.onap.aai.domain.yang.RelationshipList; import org.onap.aai.domain.yang.ServiceInstance; -import org.onap.aai.domain.yang.ServiceInstances; import org.onap.aai.domain.yang.VfModule; -import org.onap.aai.domain.yang.VfModules; import org.onap.aai.domain.yang.VolumeGroup; import org.onap.aaiclient.client.aai.entities.AAIResultWrapper; import org.onap.aaiclient.client.aai.entities.Relationships; @@ -108,11 +101,8 @@ import org.onap.so.db.catalog.beans.Service; import org.onap.so.db.catalog.beans.VfModuleCustomization; import org.onap.so.db.catalog.beans.macro.NorthBoundRequest; import org.onap.so.db.catalog.beans.macro.OrchestrationFlow; -import org.onap.so.serviceinstancebeans.ModelInfo; import org.onap.so.serviceinstancebeans.RequestDetails; -import org.onap.so.serviceinstancebeans.RequestParameters; import org.onap.so.serviceinstancebeans.ServiceInstancesRequest; -import org.onap.so.serviceinstancebeans.SubscriberInfo; import org.springframework.core.env.Environment; public class WorkflowActionTest extends BaseTaskTest { @@ -128,12 +118,13 @@ public class WorkflowActionTest extends BaseTaskTest { @Mock protected Environment environment; - @Mock protected UserParamsServiceTraversal userParamsServiceTraversal; - + @Mock + private AaiResourceIdValidator aaiResourceIdValidator; @InjectMocks protected WorkflowAction workflowAction; + private DelegateExecution execution; @InjectMocks @@ -242,7 +233,7 @@ public class WorkflowActionTest extends BaseTaskTest { doThrow(new DuplicateNameException( "serviceInstance with name (instanceName) and different version id (3c40d244-808e-42ca-b09a-256d83d19d0a) already exists. The name must be unique.")) - .when(SPY_workflowAction).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE), + .when(aaiResourceIdValidator).validateResourceIdInAAI(anyString(), eq(WorkflowType.SERVICE), eq("test"), any(RequestDetails.class), any(WorkflowResourceIds.class)); SPY_workflowAction.selectExecutionList(execution); @@ -2022,906 +2013,6 @@ public class WorkflowActionTest extends BaseTaskTest { assertNull(x.getVolumeGroupId()); } - private RequestDetails setupRequestDetails(String globalSubscriberId, String subscriptionServiceType, - String modelCustomizationId) { - RequestDetails reqDetails = new RequestDetails(); - SubscriberInfo subInfo = new SubscriberInfo(); - subInfo.setGlobalSubscriberId(globalSubscriberId); - reqDetails.setSubscriberInfo(subInfo); - RequestParameters reqParams = new RequestParameters(); - reqParams.setSubscriptionServiceType(subscriptionServiceType); - reqDetails.setRequestParameters(reqParams); - ModelInfo modelInfo = new ModelInfo(); - modelInfo.setModelCustomizationId(modelCustomizationId); - reqDetails.setModelInfo(modelInfo); - return reqDetails; - } - - @Test - public void validateResourceIdInAAIVnfTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - // Vnf - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setModelCustomizationId("1234567"); - Optional<GenericVnf> opVnf = Optional.of(vnf); - GenericVnf vnf2 = new GenericVnf(); - vnf2.setVnfId("id123"); - vnf2.setVnfName("vnfName222"); - vnf2.setModelCustomizationId("222"); - Optional<GenericVnf> opVnf2 = Optional.of(vnf2); - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName222")).thenReturn(opVnf2); - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty()); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName123", reqDetails, - workflowResourceIds); - assertEquals("id123", id); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "111111", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id2); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "generic-vnf with name (vnfName222), same parent and different customization id (222) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName222", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIVnfNotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - // Vnf - GenericVnfs genericVnfs = new GenericVnfs(); - GenericVnf vnf3 = new GenericVnf(); - vnf3.setVnfId("id123"); - vnf3.setVnfName("vnfName333"); - genericVnfs.getGenericVnf().add(vnf3); - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName333")).thenReturn(Optional.empty()); - when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName333")).thenReturn(genericVnfs); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "generic-vnf with name (vnfName333) id (id123) and different parent relationship already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VNF, "vnfName333", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAINetworkTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - // Network - L3Network network = new L3Network(); - network.setNetworkId("id123"); - network.setNetworkName("name123"); - network.setModelCustomizationId("1234567"); - workflowResourceIds.setServiceInstanceId("siId123"); - Optional<L3Network> opNetwork = Optional.of(network); - L3Network network2 = new L3Network(); - network2.setNetworkId("id123"); - network2.setNetworkName("networkName222"); - network2.setModelCustomizationId("222"); - Optional<L3Network> opNetwork2 = Optional.of(network2); - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork); - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "networkName222")) - .thenReturn(opNetwork2); - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "111111")).thenReturn(Optional.empty()); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "name123", - reqDetails, workflowResourceIds); - assertEquals("id123", id); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "111111", - reqDetails, workflowResourceIds); - assertEquals("generatedId123", id2); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "l3Network with name (networkName222), same parent and different customization id (222) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName222", reqDetails, - workflowResourceIds); - } - - @Test - public void validateNetworkResourceNameExistsInAAITest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - // Network - L3Network network = new L3Network(); - network.setNetworkId("id123"); - network.setNetworkName("name123"); - network.setModelCustomizationId("1234567"); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("networkName333", "111111")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAINetworksGloballyByName("networkName333")).thenReturn(true); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "l3Network with name (networkName333) id (siId123) and different parent relationship already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.NETWORK, "networkName333", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIVfModuleTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setModelCustomizationId("222"); - - // VfModule - VfModules vfModules = new VfModules(); - VfModule vfModule = new VfModule(); - vfModule.setVfModuleId("id123"); - vfModule.setVfModuleName("name123"); - vfModule.setModelCustomizationId("1234567"); - vfModules.getVfModule().add(vfModule); - vnf.setVfModules(vfModules); - workflowResourceIds.setVnfId("id123"); - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "name123", - reqDetails, workflowResourceIds); - assertEquals("id123", id); - - GenericVnf vnf1 = new GenericVnf(); - VfModules vfModules2 = new VfModules(); - VfModule vfModule2 = new VfModule(); - vfModule2.setVfModuleId("id123"); - vfModule2.setVfModuleName("vFModName222"); - vfModule2.setModelCustomizationId("222"); - vfModules2.getVfModule().add(vfModule2); - vnf1.setVfModules(vfModules2); - workflowResourceIds.setVnfId("id111"); - when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "111111", - reqDetails, workflowResourceIds); - assertEquals("generatedId123", id2); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "vfModule with name (vFModName222), same parent and different customization id (1234567) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName222", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIVfModuleNotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("id111"); - - GenericVnf vnf1 = new GenericVnf(); - workflowResourceIds.setVnfId("id111"); - when(bbSetupUtils.getAAIGenericVnf("id111")).thenReturn(vnf1); - - when(bbSetupUtils.existsAAIVfModuleGloballyByName("vFModName333")).thenReturn(true); - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("vfModule with name vFModName333 already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VFMODULE, "vFModName333", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIVolumeGroupTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setModelCustomizationId("1234567"); - - GenericVnf vnf2 = new GenericVnf(); - vnf2.setVnfId("id123"); - vnf2.setVnfName("vnfName123"); - vnf2.setModelCustomizationId("222"); - - // VolumeGroup - VolumeGroup volumeGroup = new VolumeGroup(); - volumeGroup.setVolumeGroupId("id123"); - volumeGroup.setVolumeGroupName("name123"); - volumeGroup.setVfModuleModelCustomizationId("1234567"); - workflowResourceIds.setVnfId("id123"); - Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); - - workflowResourceIds.setVnfId("id123"); - - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf); - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(opVolumeGroup); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", - reqDetails, workflowResourceIds); - assertEquals("id123", id); - - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf2); - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVfModule("id123", "id123", "111111")) - .thenReturn(opVolumeGroup); - - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "111111")).thenReturn(Optional.empty()); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "111111", - reqDetails, workflowResourceIds); - assertEquals("generatedId123", id2); - } - - @Test - public void validatesourceIdInAAIVolumeGroupNotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("id123"); - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(vnf); - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "testVolumeGroup")).thenReturn(Optional.empty()); - - when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("testVolumeGroup")).thenReturn(true); - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("volumeGroup with name testVolumeGroup already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "testVolumeGroup", - reqDetails, workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIConfigurationTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - // Configuration - org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); - configuration.setConfigurationId("id123"); - configuration.setConfigurationName("name123"); - configuration.setModelCustomizationId("1234567"); - Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); - - org.onap.aai.domain.yang.Configuration configuration2 = new org.onap.aai.domain.yang.Configuration(); - configuration2.setConfigurationId("id123"); - configuration2.setConfigurationName("name123"); - configuration2.setModelCustomizationId("222"); - Optional<org.onap.aai.domain.yang.Configuration> opConfiguration2 = Optional.of(configuration2); - - workflowResourceIds.setVnfId("id123"); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) - .thenReturn(opConfiguration); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name123", - reqDetails, workflowResourceIds); - assertEquals("id123", id); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "111111")) - .thenReturn(Optional.empty()); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "111111", - reqDetails, workflowResourceIds); - assertEquals("generatedId123", id2); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name222")) - .thenReturn(opConfiguration2); - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "configuration with name (name222), same parent and different customization id (id123) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "name222", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIConfigurationNotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "testConfig")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAIConfigurationGloballyByName("testConfig")).thenReturn(true); - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("configuration with name testConfig already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.CONFIGURATION, "testConfig", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAISITest() throws Exception { - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - Optional<ServiceInstance> siOp = Optional.of(si); - ServiceInstance si2 = new ServiceInstance(); - si2.setServiceInstanceId("siId222"); - si2.setModelVersionId("22222"); - si2.setServiceInstanceName("siName222"); - Optional<ServiceInstance> siOp2 = Optional.of(si2); - ServiceInstances serviceInstances2 = new ServiceInstances(); - serviceInstances2.getServiceInstance().add(si2); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp); - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName222")).thenReturn(siOp2); - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "111111")) - .thenReturn(Optional.empty()); - - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", - reqDetails, workflowResourceIds); - assertEquals("siId123", id); - String id2 = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "111111", - reqDetails, workflowResourceIds); - assertEquals("generatedId123", id2); - - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName222")).thenReturn(serviceInstances2); - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName222) and different version id (1234567) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName222", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAIMultipleSITest() throws Exception { - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - - ServiceInstance si2 = new ServiceInstance(); - si2.setServiceInstanceId("siId222"); - si2.setModelVersionId("22222"); - si2.setServiceInstanceName("siName222"); - serviceInstances.getServiceInstance().add(si2); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123")) - .thenReturn(Optional.empty()); - - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName123) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, - workflowResourceIds); - } - - @Test - public void validateResourceIdInAAISIExistsTest() throws Exception { - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siId123")) - .thenReturn(Optional.empty()); - - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(serviceInstances); - - Map<String, String> uriKeys = new HashMap<>(); - uriKeys.put(AAIFluentTypeBuilder.Types.CUSTOMER.getUriParams().globalCustomerId, "globalCustomerId"); - uriKeys.put(AAIFluentTypeBuilder.Types.SERVICE_SUBSCRIPTION.getUriParams().serviceType, "serviceType"); - - when(bbSetupUtils.getURIKeysFromServiceInstance("siId123")).thenReturn(uriKeys); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName123) and global-customer-id (globalCustomerId), service-type (serviceType), model-version-id (1234567) already exists. The name must be unique.")); - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.SERVICE, "siName123", reqDetails, - workflowResourceIds); - } - - @Test - public void validateServiceResourceIdInAAINoDupTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName123")).thenReturn(null); - String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); - assertEquals("generatedId123", id); - } - - @Test - public void validateServiceResourceIdInAAISameModelVersionId() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - Optional<ServiceInstance> siOp = Optional.of(si); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp); - String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); - assertEquals("siId123", id); - } - - @Test - public void validateServiceResourceIdInAAIDifferentModelVersionId() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("9999999"); - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - Optional<ServiceInstance> siOp = Optional.of(si); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName123")).thenReturn(siOp); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName123) and different version id (1234567) already exists. The name must be unique.")); - - String id = workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName123", reqDetails); - assertEquals("siId123", id); - } - - @Test - public void validateServiceResourceIdInAAIDuplicateNameTest() throws Exception { - - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName) and global-customer-id (null), service-type (null), model-version-id (1234567) already exists. The name must be unique.")); - - workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails); - } - - @Test - public void validateServiceResourceIdInAAIDuplicateNameMultipleTest() throws Exception { - - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - reqDetails.getModelInfo().setModelVersionId("1234567"); - - ServiceInstance si = new ServiceInstance(); - si.setServiceInstanceId("siId123"); - si.setModelVersionId("1234567"); - - ServiceInstance si2 = new ServiceInstance(); - si2.setServiceInstanceId("siId222"); - si2.setModelVersionId("22222"); - si2.setServiceInstanceName("siName222"); - - ServiceInstances serviceInstances = new ServiceInstances(); - serviceInstances.getServiceInstance().add(si); - serviceInstances.getServiceInstance().add(si2); - - when(bbSetupUtils.getAAIServiceInstanceByName("id123", "subServiceType123", "siName")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.getAAIServiceInstancesGloballyByName("siName")).thenReturn(serviceInstances); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "serviceInstance with name (siName) and multiple combination of model-version-id + service-type + global-customer-id already exists. The name must be unique.")); - - workflowAction.validateServiceResourceIdInAAI("generatedId123", "siName", reqDetails); - } - - @Test - public void validateNetworkResourceIdInAAITest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(false); - - String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id); - } - - @Test - public void validateNetworkResourceIdInAAISameModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - L3Network network = new L3Network(); - network.setNetworkId("id123"); - network.setNetworkName("name123"); - network.setModelCustomizationId("1234567"); - Optional<L3Network> opNetwork = Optional.of(network); - - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork); - - String id = workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("id123", id); - } - - @Test - public void validateNetworkResourceIdInAAIDuplicateNameTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - L3Network network = new L3Network(); - network.setNetworkId("id123"); - network.setNetworkName("name123"); - network.setModelCustomizationId("9999999"); - Optional<L3Network> opNetwork = Optional.of(network); - - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")).thenReturn(opNetwork); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "l3Network with name (name123), same parent and different customization id (9999999) already exists. The name must be unique.")); - - workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); - } - - @Test - public void validateNetworkResourceIdInAAINotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedNetworkByNameFromServiceInstance("siId123", "name123")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAINetworksGloballyByName("name123")).thenReturn(true); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "l3Network with name (name123) id (siId123) and different parent relationship already exists. The name must be unique.")); - - workflowAction.validateNetworkResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); - } - - @Test - public void validateVnfResourceIdInAAITest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty()); - String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id); - } - - @Test - public void validateVnfResourceIdInAAISameModelCustomizationIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setModelCustomizationId("1234567"); - Optional<GenericVnf> opVnf = Optional.of(vnf); - - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); - String id = workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, - workflowResourceIds); - assertEquals("id123", id); - } - - @Test - public void validateVnfResourceIdInAAIDiffModelCustomizationIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setModelCustomizationId("9999999"); - Optional<GenericVnf> opVnf = Optional.of(vnf); - - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(opVnf); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "generic-vnf with name (vnfName123), same parent and different customization id (9999999) already exists. The name must be unique.")); - - workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds); - } - - @Test - public void validateVnfResourceIdInAAINotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - GenericVnfs genericVnfs = new GenericVnfs(); - genericVnfs.getGenericVnf().add(vnf); - - when(bbSetupUtils.getRelatedVnfByNameFromServiceInstance("siId123", "vnfName123")).thenReturn(Optional.empty()); - when(bbSetupUtils.getAAIVnfsGloballyByName("vnfName123")).thenReturn(genericVnfs); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "generic-vnf with name (vnfName123) id (id123) and different parent relationship already exists. The name must be unique.")); - - workflowAction.validateVnfResourceIdInAAI("generatedId123", "vnfName123", reqDetails, workflowResourceIds); - } - - @Test - public void validateVfModuleResourceIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null); - when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(false); - - String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id); - } - - @Test - public void validateVfModuleResourceIdSameModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - VfModules vfModules = new VfModules(); - VfModule vfModule = new VfModule(); - vfModule.setVfModuleId("id123"); - vfModule.setVfModuleName("name123"); - vfModule.setModelCustomizationId("1234567"); - vfModules.getVfModule().add(vfModule); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setVfModules(vfModules); - - when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf); - - String id = workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("id123", id); - } - - @Test - public void validateVfModuleResourceIdDifferentModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - VfModules vfModules = new VfModules(); - VfModule vfModule = new VfModule(); - vfModule.setVfModuleId("id123"); - vfModule.setVfModuleName("name123"); - vfModule.setModelCustomizationId("9999999"); - vfModules.getVfModule().add(vfModule); - - GenericVnf vnf = new GenericVnf(); - vnf.setVnfId("id123"); - vnf.setVnfName("vnfName123"); - vnf.setVfModules(vfModules); - - when(bbSetupUtils.getAAIGenericVnf("vnfId123")).thenReturn(vnf); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "vfModule with name (name123), same parent and different customization id (1234567) already exists. The name must be unique.")); - - workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); - - } - - @Test - public void validateVfModuleResourceIdNotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - when(bbSetupUtils.getAAIGenericVnf("id123")).thenReturn(null); - when(bbSetupUtils.existsAAIVfModuleGloballyByName("name123")).thenReturn(true); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException - .expectMessage(containsString("vfModule with name name123 already exists. The name must be unique.")); - - workflowAction.validateVfModuleResourceIdInAAI("generatedId123", "name123", reqDetails, workflowResourceIds); - } - - @Test - public void validateVolumeGroupResourceIdInAAITest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("id123", "name123")).thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(false); - - String id = workflowAction.validateVolumeGroupResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id); - } - - @Test - public void validateVolumeGroupResourceIdInAAISameModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - workflowResourceIds.setVnfId("vnfId123"); - - VolumeGroup volumeGroup = new VolumeGroup(); - volumeGroup.setVolumeGroupId("id123"); - volumeGroup.setVolumeGroupName("name123"); - volumeGroup.setVfModuleModelCustomizationId("1234567"); - - Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); - - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup); - String id = workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", - reqDetails, workflowResourceIds); - - assertEquals("id123", id); - } - - @Test - public void validateVolumeGroupResourceIdInAAIDifferentModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - workflowResourceIds.setVnfId("vnfId123"); - - VolumeGroup volumeGroup = new VolumeGroup(); - volumeGroup.setVolumeGroupId("id123"); - volumeGroup.setVolumeGroupName("name123"); - volumeGroup.setVfModuleModelCustomizationId("9999999"); - - Optional<VolumeGroup> opVolumeGroup = Optional.of(volumeGroup); - - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(opVolumeGroup); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("volumeGroup with name name123 already exists. The name must be unique.")); - - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, - workflowResourceIds); - } - - @Test - public void validateVolumeGroupResourceIdInAAINotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setVnfId("vnfId123"); - - when(bbSetupUtils.getRelatedVolumeGroupByNameFromVnf("vnfId123", "name123")).thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAIVolumeGroupGloballyByName("name123")).thenReturn(true); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("volumeGroup with name name123 already exists. The name must be unique.")); - - workflowAction.validateResourceIdInAAI("generatedId123", WorkflowType.VOLUMEGROUP, "name123", reqDetails, - workflowResourceIds); - } - - @Test - public void validateConfigurationResourceIdInAAITest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false); - - String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("generatedId123", id); - } - - @Test - public void validateConfigurationResourceIdInAAISameModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); - configuration.setConfigurationId("id123"); - configuration.setConfigurationName("name123"); - configuration.setModelCustomizationId("1234567"); - Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) - .thenReturn(opConfiguration); - when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false); - - String id = workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - assertEquals("id123", id); - } - - @Test - public void validateConfigurationResourceIdInAAIDifferentModelCustIdTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - org.onap.aai.domain.yang.Configuration configuration = new org.onap.aai.domain.yang.Configuration(); - configuration.setConfigurationId("id123"); - configuration.setConfigurationName("name123"); - configuration.setModelCustomizationId("9999999"); - Optional<org.onap.aai.domain.yang.Configuration> opConfiguration = Optional.of(configuration); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) - .thenReturn(opConfiguration); - when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(false); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage(containsString( - "configuration with name (name123), same parent and different customization id (id123) already exists. The name must be unique.")); - - workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - } - - @Test - public void validateConfigurationResourceIdInAAINotGloballyUniqueTest() throws Exception { - RequestDetails reqDetails = setupRequestDetails("id123", "subServiceType123", "1234567"); - WorkflowResourceIds workflowResourceIds = new WorkflowResourceIds(); - workflowResourceIds.setServiceInstanceId("siId123"); - - when(bbSetupUtils.getRelatedConfigurationByNameFromServiceInstance("siId123", "name123")) - .thenReturn(Optional.empty()); - when(bbSetupUtils.existsAAIConfigurationGloballyByName("name123")).thenReturn(true); - - this.expectedException.expect(DuplicateNameException.class); - this.expectedException.expectMessage( - containsString("configuration with name name123 already exists. The name must be unique.")); - - workflowAction.validateConfigurationResourceIdInAAI("generatedId123", "name123", reqDetails, - workflowResourceIds); - } - @Test public void handleRuntimeExceptionTest() { execution.setVariable("BPMN_javaExpMsg", "test runtime error message"); |