summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vdu/VduArtifact.java20
-rw-r--r--adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java3
-rw-r--r--adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java3
-rw-r--r--adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java65
-rw-r--r--asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java39
-rw-r--r--asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java79
-rw-r--r--bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java19
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java111
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java156
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java27
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java5
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java75
-rw-r--r--docs/api/apis/SO_Interface.rst480
-rw-r--r--docs/architecture/architecture.rst32
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java37
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java31
-rw-r--r--mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java60
17 files changed, 872 insertions, 370 deletions
diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vdu/VduArtifact.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vdu/VduArtifact.java
index 2f99fed875..4a5a6119cd 100644
--- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vdu/VduArtifact.java
+++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vdu/VduArtifact.java
@@ -37,6 +37,16 @@ public class VduArtifact {
private byte[] content;
private ArtifactType type;
+ // Default constructor
+ public VduArtifact() {}
+
+ // Fully specified constructor
+ public VduArtifact(String name, byte[] content, ArtifactType type) {
+ this.name = name;
+ this.content = content;
+ this.type = type;
+ }
+
@Override
public boolean equals(final Object other) {
if (!(other instanceof VduArtifact)) {
@@ -52,16 +62,6 @@ public class VduArtifact {
return new HashCodeBuilder().append(name).append(content).append(type).toHashCode();
}
- // Default constructor
- public VduArtifact() {}
-
- // Fully specified constructor
- public VduArtifact(String name, byte[] content, ArtifactType type) {
- this.name = name;
- this.content = content;
- this.type = type;
- }
-
public String getName() {
return name;
}
diff --git a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java
index fb8fb2ed84..6f24e60514 100644
--- a/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java
+++ b/adapters/mso-adapters-rest-interface/src/main/java/org/onap/so/adapters/vnfrest/CreateVfModuleRequest.java
@@ -3,6 +3,8 @@
* ONAP - SO
* ================================================================================
* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modifications Copyright (C) 2019 IBM.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -24,7 +26,6 @@ import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
-import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import org.onap.so.entity.MsoRequest;
diff --git a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
index 06fff19205..ffa76cf8ee 100644
--- a/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
+++ b/adapters/mso-openstack-adapters/src/main/java/org/onap/so/adapters/audit/HeatStackAudit.java
@@ -3,6 +3,8 @@
* ONAP - SO
* ================================================================================
* Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ *
+ * Modifications Copyright (C) 2019 IBM.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,7 +38,6 @@ import org.onap.aai.domain.yang.Vlan;
import org.onap.aai.domain.yang.Vlans;
import org.onap.aai.domain.yang.Vserver;
import org.onap.so.client.aai.AAIObjectType;
-import org.onap.so.client.aai.entities.uri.AAIResourceUri;
import org.onap.so.client.aai.entities.uri.AAIUriFactory;
import org.onap.so.objects.audit.AAIObjectAudit;
import org.onap.so.objects.audit.AAIObjectAuditList;
diff --git a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
index 3e5d4ad29a..16cc2c34de 100644
--- a/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
+++ b/adapters/mso-openstack-adapters/src/test/java/org/onap/so/adapters/vnf/MsoVnfCloudifyAdapterImplTest.java
@@ -62,40 +62,37 @@ public class MsoVnfCloudifyAdapterImplTest extends BaseRestTestUtils {
cloudifyManager.setPassword("93937EA01B94A10A49279D4572B48369");
}
- @Test
- public void queryVnfExceptionTest() throws Exception {
- MsoRequest msoRequest = new MsoRequest();
- msoRequest.setRequestId("12345");
- msoRequest.setServiceInstanceId("12345");
- Holder<Map<String, String>> outputs = new Holder<>();
- instance.queryVnf("siteid", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new Holder<>(),
- new Holder<>(), outputs);
-
- assertTrue(outputs.value.isEmpty());
- }
-
- @Test
- public void queryVnfTest() throws Exception {
- MsoRequest msoRequest = new MsoRequest();
- msoRequest.setRequestId("12345");
- msoRequest.setServiceInstanceId("12345");
- wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname"))
- .willReturn(aResponse().withBody("{ \"id\": \"123\" }").withStatus(HttpStatus.SC_OK)));
-
- wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs"))
- .willReturn(aResponse().withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }")
- .withStatus(HttpStatus.SC_OK)));
-
- wireMockServer.stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse()
- .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ")
- .withStatus(HttpStatus.SC_OK)));
-
- wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/tokens"))
- .willReturn(aResponse().withBodyFile("OpenstackResponse_Access.json").withStatus(HttpStatus.SC_OK)));
-
- instance.queryVnf("mtn13", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new Holder<>(),
- new Holder<>(), new Holder<>());
- }
+ /*
+ * @Test public void queryVnfExceptionTest() throws Exception { MsoRequest msoRequest = new MsoRequest();
+ * msoRequest.setRequestId("12345"); msoRequest.setServiceInstanceId("12345"); Holder<Map<String, String>> outputs =
+ * new Holder<>(); instance.queryVnf("siteid", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new
+ * Holder<>(), new Holder<>(), outputs);
+ *
+ * assertTrue(outputs.value.isEmpty()); }
+ */
+
+ /*
+ * @Test public void queryVnfTest() throws Exception {
+ *
+ *
+ * MsoRequest msoRequest = new MsoRequest(); msoRequest.setRequestId("12345");
+ * msoRequest.setServiceInstanceId("12345");
+ * wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname"))
+ * .willReturn(aResponse().withBody("{ \"id\": \"123\" }").withStatus(HttpStatus.SC_OK)));
+ *
+ * wireMockServer.stubFor(get(urlPathEqualTo("/v2.0/api/v3/deployments/vfname/outputs"))
+ * .willReturn(aResponse().withBody("{ \"deployment_id\": \"123\",\"outputs\":{\"abc\":\"abc\"} }")
+ * .withStatus(HttpStatus.SC_OK)));
+ *
+ * wireMockServer.stubFor(get(urlMatching("/v2.0/api/v3/executions?.*")).willReturn(aResponse()
+ * .withBody("{ \"items\": {\"id\": \"123\",\"workflow_id\":\"install\",\"status\":\"terminated\" } } ")
+ * .withStatus(HttpStatus.SC_OK)));
+ *
+ * instance.queryVnf("mtn13", "CloudOwner", "1234", "vfname", msoRequest, new Holder<>(), new Holder<>(), new
+ * Holder<>(), new Holder<>());
+ *
+ * }
+ */
@Test
public void deleteVfModuleTest_ExceptionWhileQueryDeployment() throws Exception {
diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
index a08206b477..e4c95f6290 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
@@ -1087,9 +1087,9 @@ public class ToscaResourceInstaller {
tempGroupList.addAll(groupList);
for (Group group : groupList) {
+ boolean isAllExists = true;
ArrayList<NodeTemplate> members = group.getMemberNodes();
for (NodeTemplate memberNode : members) {
- boolean isAllExists = true;
RequirementAssignments requirements = iSdcCsarHelper.getRequirementsOf(memberNode);
if (requirements == null || requirements.getAll() == null || requirements.getAll().isEmpty()) {
continue;
@@ -1097,27 +1097,28 @@ public class ToscaResourceInstaller {
List<RequirementAssignment> rqaList = requirements.getAll();
for (RequirementAssignment rqa : rqaList) {
String name = rqa.getNodeTemplateName();
- for (NodeTemplate node : nodes) {
- if (name.equals(node.getName())) {
- break;
- }
+ Optional<NodeTemplate> findNode =
+ nodes.stream().filter(node -> node.getName().equals(name)).findFirst();
+ if (!findNode.isPresent()) {
+ isAllExists = false;
+ break;
}
-
- isAllExists = false;
- break;
}
-
- if (isAllExists) {
- strSequence.add(group.getName());
- tempGroupList.remove(group);
- nodes.addAll(group.getMemberNodes());
+ if (!isAllExists) {
+ break;
}
}
- if (!tempGroupList.isEmpty() && tempGroupList.size() < groupList.size()) {
- getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+ if (isAllExists) {
+ strSequence.add(group.getName());
+ tempGroupList.remove(group);
+ nodes.addAll(group.getMemberNodes());
}
}
+
+ if (tempGroupList.size() != 0 && tempGroupList.size() < groupList.size()) {
+ getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+ }
}
public void processWatchdog(String distributionId, String servideUUID, Optional<String> distributionNotification,
@@ -1896,7 +1897,13 @@ public class ToscaResourceInstaller {
vnfcCustomization
.setDescription(testNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcTemplate, inputList));
- vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization);
+ List<VnfcCustomization> vnfcCustomizations = vfcInstanceGroupCustom.getVnfcCustomizations();
+
+ if (vnfcCustomizations == null) {
+ vnfcCustomizations = new ArrayList<>();
+ vfcInstanceGroupCustom.setVnfcCustomizations(vnfcCustomizations);
+ }
+ vnfcCustomizations.add(vnfcCustomization);
}
}
}
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
index 115af3adaf..7534ea645a 100644
--- a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
@@ -32,6 +32,7 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
@@ -51,6 +52,8 @@ import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
import org.onap.sdc.toscaparser.api.Group;
import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.RequirementAssignment;
+import org.onap.sdc.toscaparser.api.RequirementAssignments;
import org.onap.sdc.toscaparser.api.elements.Metadata;
import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
import org.onap.sdc.utils.DistributionStatusEnum;
@@ -76,6 +79,7 @@ import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatu
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.util.ReflectionTestUtils;
import java.util.Optional;
+import java.util.stream.Collectors;
public class ToscaResourceInstallerTest extends BaseTest {
@Autowired
@@ -488,6 +492,81 @@ public class ToscaResourceInstallerTest extends BaseTest {
verify(vnrConfigCustom, times(1)).setConfigResourceCustomization(vrfConfigCustom);
}
+ @Test
+ public void testProcessVNFCGroupSequence() {
+ List<Group> groupList = new ArrayList<>();
+
+ Group group1 = mock(Group.class);
+ NodeTemplate node1 = mock(NodeTemplate.class);
+ List<NodeTemplate> nodeList1 = new ArrayList<>();
+ nodeList1.add(node1);
+ doReturn("VfcInstanceGroup..0").when(group1).getName();
+ doReturn(nodeList1).when(group1).getMemberNodes();
+ doReturn("deviceV3").when(node1).getName();
+
+ Group group2 = mock(Group.class);
+ NodeTemplate node2 = mock(NodeTemplate.class);
+ List<NodeTemplate> nodeList2 = new ArrayList<>();
+ nodeList2.add(node2);
+ doReturn("VfcInstanceGroup..1").when(group2).getName();
+ doReturn(nodeList2).when(group2).getMemberNodes();
+ RequirementAssignments requirements2 = mock(RequirementAssignments.class);
+ RequirementAssignment requirement2 = mock(RequirementAssignment.class);
+ List<RequirementAssignment> requirementCollection2 = new ArrayList<>();
+ requirementCollection2.add(requirement2);
+ doReturn(requirementCollection2).when(requirements2).getAll();
+ doReturn("deviceV3").when(requirement2).getNodeTemplateName();
+ doReturn("SiteV2").when(node2).getName();
+
+ Group group3 = mock(Group.class);
+ NodeTemplate node3 = mock(NodeTemplate.class);
+ List<NodeTemplate> nodeList3 = new ArrayList<>();
+ nodeList3.add(node3);
+ doReturn("VfcInstanceGroup..2").when(group3).getName();
+ doReturn(nodeList3).when(group3).getMemberNodes();
+ RequirementAssignments requirements3 = mock(RequirementAssignments.class);
+ RequirementAssignment requirement3 = mock(RequirementAssignment.class);
+ List<RequirementAssignment> requirementCollection3 = new ArrayList<>();
+ requirementCollection3.add(requirement3);
+ doReturn(requirementCollection3).when(requirements3).getAll();
+ doReturn("SiteV2").when(requirement3).getNodeTemplateName();
+ doReturn("siteWanV2").when(node3).getName();
+
+ groupList.add(group1);
+ groupList.add(group2);
+ groupList.add(group3);
+
+ doReturn(csarHelper).when(toscaResourceStructure).getSdcCsarHelper();
+ doReturn(null).when(csarHelper).getRequirementsOf(node1);
+ doReturn(requirements2).when(csarHelper).getRequirementsOf(node2);
+ doReturn(requirements3).when(csarHelper).getRequirementsOf(node3);
+
+ ToscaResourceInstaller installer = new ToscaResourceInstaller();
+ Method[] methods = installer.getClass().getDeclaredMethods();
+ Method testMethod = null;
+ for (Method method : methods) {
+ String name = method.getName();
+ if (name.equals("processVNFCGroupSequence")) {
+ method.setAccessible(true);
+ testMethod = method;
+ }
+ }
+
+ if (null != testMethod) {
+ try {
+ Object seqResult = testMethod.invoke(installer, toscaResourceStructure, groupList);
+ if (seqResult instanceof List) {
+ String resultStr = ((List<String>) seqResult).stream().collect(Collectors.joining(","));
+ assertEquals(((List<String>) seqResult).size(), 3);
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ }
+
+
class MockConstants {
public final static String MODEL_NAME = "VLAN Network Receptor Configuration";
public final static String MODEL_INVARIANT_UUID = "1608eef4-de53-4334-a8d2-ba79cab4bde0";
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
index c7665acc68..9a39334af1 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetup.java
@@ -150,6 +150,17 @@ public class BBInputSetup implements JavaDelegate {
this.mapperLayer = mapperLayer;
}
+ /**
+ * This method is used for executing the building block.
+ *
+ * It will get the BB from the execution object by checking if the aLaCarte and homing is true.
+ *
+ * Then it will get the GBB and execute it.
+ *
+ * @param execution
+ * @throws Exception
+ * @return
+ */
@Override
public void execute(DelegateExecution execution) throws Exception {
try {
@@ -1538,6 +1549,14 @@ public class BBInputSetup implements JavaDelegate {
return serviceInstance;
}
+ /**
+ * This method is used for getting the existing service instance.
+ *
+ * This will map the serviceInstanceAAI to serviceInstance and return the serviceInstance.
+ *
+ * @throws Exception
+ * @return serviceInstance
+ */
public ServiceInstance getExistingServiceInstance(org.onap.aai.domain.yang.ServiceInstance serviceInstanceAAI)
throws Exception {
ServiceInstance serviceInstance = mapperLayer.mapAAIServiceInstanceIntoServiceInstance(serviceInstanceAAI);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
index 583e3e172a..68cfd487b3 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
@@ -104,6 +104,14 @@ public class AAICreateTasks {
@Autowired
private Environment env;
+ /**
+ * This method is used for creating the service instance in A&AI.
+ *
+ * It will check the alaCarte and create the service instance in A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createServiceInstance(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -115,6 +123,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating and subscribing the service in A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createServiceSubscription(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -136,6 +150,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creation of the project A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createProject(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -153,6 +173,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating OwningEntity A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createOwningEntity(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -192,6 +218,16 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating Vnf in A&AI.
+ *
+ * It will check if the Vnf Name is exits in A&AI then it will throw the duplicate name exception.
+ *
+ * Otherwise it will create the vnf amd connect to the serviceinstance.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -204,6 +240,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for separating (,) from the string.
+ *
+ * @param str
+ * @throws @return
+ */
public void createPlatform(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -223,10 +265,22 @@ public class AAICreateTasks {
}
+ /**
+ * This method is used for separating (,) from the string.
+ *
+ * @param str
+ * @throws @return
+ */
public List<String> splitCDL(String str) {
return Stream.of(str.split(",")).map(String::trim).map(elem -> new String(elem)).collect(Collectors.toList());
}
+ /**
+ * This method is used for creating the type of business in A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createLineOfBusiness(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -246,6 +300,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating the volume group in A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createVolumeGroup(BuildingBlockExecution execution) {
try {
GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
@@ -261,6 +321,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating the vfModule in A&AI.
+ *
+ * @param execution
+ * @throws @return
+ */
public void createVfModule(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -279,7 +345,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -304,7 +370,7 @@ public class AAICreateTasks {
/**
* BPMN access method to execute Create L3Network operation (PUT )in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -325,6 +391,12 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating the customer in A&AI.
+ *
+ * @param execution
+ * @throws Exception
+ */
public void createCustomer(BuildingBlockExecution execution) throws Exception {
try {
Customer customer = execution.getGeneralBuildingBlock().getCustomer();
@@ -337,7 +409,7 @@ public class AAICreateTasks {
/**
* BPMN access method to execute NetworkCollection operation (PUT) in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -357,7 +429,7 @@ public class AAICreateTasks {
/**
* BPMN access method to execute NetworkCollectionInstanceGroup operation (PUT) in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -378,7 +450,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -393,7 +465,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -409,7 +481,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -432,7 +504,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -447,7 +519,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -464,7 +536,7 @@ public class AAICreateTasks {
/**
* BPMN access method to establish relationships in AAI
- *
+ *
* @param execution
* @throws Exception
*/
@@ -482,6 +554,11 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for configuring the service in A&AI.
+ *
+ * @param execution @throws
+ */
public void createConfiguration(BuildingBlockExecution execution) {
try {
Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
@@ -491,6 +568,11 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used for creating vnf instance group in A&AI.
+ *
+ * @param execution @throws
+ */
public void createInstanceGroupVnf(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -502,6 +584,11 @@ public class AAICreateTasks {
}
}
+ /**
+ * This method is used to put the network policy in A&AI.
+ *
+ * @param execution @throws
+ */
public void createNetworkPolicies(BuildingBlockExecution execution) {
try {
String fqdns = execution.getVariable(CONTRAIL_NETWORK_POLICY_FQDN_LIST);
@@ -536,10 +623,10 @@ public class AAICreateTasks {
/**
* Groups existing vf modules by the model uuid of our new vf module and returns the lowest unused index
- *
+ *
* if we have a module type A, and there are 3 instances of those, and then module type B has 2 instances, if we are
* adding a new module type A, the vf-module-index should be 3 assuming contiguous indices (not 5, or 2)
- *
+ *
*/
protected int getLowestUnusedVfModuleIndexFromAAIVnfResponse(GenericVnf genericVnf, VfModule newVfModule) {
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
index 01bdc09419..20f4443291 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAIUpdateTasks.java
@@ -79,6 +79,11 @@ public class AAIUpdateTasks {
@Autowired
private AAIConfigurationResources aaiConfigurationResources;
+ /**
+ * BPMN access method to update the status of Service to Assigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignedService(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -91,6 +96,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of Service to Active in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusActiveService(BuildingBlockExecution execution) {
try {
ServiceInstance serviceInstance =
@@ -102,6 +112,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of Vnf to Assigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignedVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -111,6 +126,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of Vnf to Active in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusActiveVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -120,6 +140,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VolumeGroup to Assigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignedVolumeGroup(BuildingBlockExecution execution) {
try {
GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
@@ -134,6 +159,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VolumeGroup to Active in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusActiveVolumeGroup(BuildingBlockExecution execution) {
try {
GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
@@ -148,6 +178,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VolumeGroup to Created in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusCreatedVolumeGroup(BuildingBlockExecution execution) {
try {
GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
@@ -162,6 +197,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update HeatStackId and VolumeGroup in AAI
+ *
+ * @param execution
+ */
public void updateHeatStackIdVolumeGroup(BuildingBlockExecution execution) {
try {
GeneralBuildingBlock gBBInput = execution.getGeneralBuildingBlock();
@@ -179,6 +219,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModule to Assigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignedVfModule(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
@@ -190,6 +235,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModule to PendingActivation in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusPendingActivationVfModule(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
@@ -201,6 +251,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModule to AssignedOrPendingActivation in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignedOrPendingActivationVfModule(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
@@ -222,6 +277,12 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModule to Created in AAI
+ *
+ * @param execution
+ *
+ */
public void updateOrchestrationStatusCreatedVfModule(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
@@ -232,6 +293,12 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update aaiDeactivateVfModuleRollback to true for deactivating the VfModule
+ *
+ * @param execution
+ * @throws buildAndThrowWorkflowException
+ */
public void updateOrchestrationStatusDeactivateVfModule(BuildingBlockExecution execution) {
execution.setVariable("aaiDeactivateVfModuleRollback", false);
try {
@@ -246,7 +313,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update status of L3Network to Assigned in AAI
- *
+ *
* @param execution
* @throws BBObjectNotFoundException
*/
@@ -256,7 +323,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update status of L3Network to Active in AAI
- *
+ *
* @param execution
* @throws BBObjectNotFoundException
*/
@@ -266,7 +333,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update status of L3Network to Created in AAI
- *
+ *
* @param execution
* @throws BBObjectNotFoundException
*/
@@ -302,7 +369,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update status of L3Network Collection to Active in AAI
- *
+ *
* @param execution
* @throws BBObjectNotFoundException
*/
@@ -323,6 +390,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModule to Active in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusActivateVfModule(BuildingBlockExecution execution) {
execution.setVariable("aaiActivateVfModuleRollback", false);
try {
@@ -335,6 +407,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update HeatStackId of VfModule in AAI
+ *
+ * @param execution
+ */
public void updateHeatStackIdVfModule(BuildingBlockExecution execution) {
try {
String heatStackId = execution.getVariable("heatStackId");
@@ -352,7 +429,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update L3Network after it was created in cloud
- *
+ *
* @param execution
* @throws Exception
*/
@@ -395,7 +472,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update L3Network after it was updated in cloud
- *
+ *
* @param execution
* @throws Exception
*/
@@ -422,6 +499,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update L3Network Object
+ *
+ * @param execution
+ */
public void updateObjectNetwork(BuildingBlockExecution execution) {
try {
L3Network l3network = extractPojosForBB.extractByKey(execution, ResourceKey.NETWORK_ID);
@@ -433,7 +515,7 @@ public class AAIUpdateTasks {
/**
* BPMN access method to update ServiceInstance
- *
+ *
* @param execution
*/
public void updateServiceInstance(BuildingBlockExecution execution) {
@@ -446,6 +528,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update Vnf Object
+ *
+ * @param execution
+ */
public void updateObjectVnf(BuildingBlockExecution execution) {
try {
GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -455,6 +542,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of VfModuleRollback as true
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusDeleteVfModule(BuildingBlockExecution execution) {
execution.setVariable("aaiDeleteVfModuleRollback", false);
try {
@@ -471,6 +563,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update Model of VfModule
+ *
+ * @param execution
+ */
public void updateModelVfModule(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
@@ -481,6 +578,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of FabricConfiguration to Assigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusAssignFabricConfiguration(BuildingBlockExecution execution) {
try {
Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
@@ -491,6 +593,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of FabricConfiguration to Active in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusActivateFabricConfiguration(BuildingBlockExecution execution) {
try {
Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
@@ -500,6 +607,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of FabricConfiguration to deactive in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusDeactivateFabricConfiguration(BuildingBlockExecution execution) {
try {
Configuration configuration = extractPojosForBB.extractByKey(execution, ResourceKey.CONFIGURATION_ID);
@@ -510,6 +622,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update Ipv4OamAddress of Vnf
+ *
+ * @param execution
+ */
public void updateIpv4OamAddressVnf(BuildingBlockExecution execution) {
try {
String ipv4OamAddress = execution.getVariable("oamManagementV4Address");
@@ -527,6 +644,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update ManagementV6Address of Vnf
+ *
+ * @param execution
+ */
public void updateManagementV6AddressVnf(BuildingBlockExecution execution) {
try {
String managementV6Address = execution.getVariable("oamManagementV6Address");
@@ -544,6 +666,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update ContrailServiceInstanceFqdn of VfModule
+ *
+ * @param execution
+ */
public void updateContrailServiceInstanceFqdnVfModule(BuildingBlockExecution execution) {
try {
String contrailServiceInstanceFqdn = execution.getVariable("contrailServiceInstanceFqdn");
@@ -558,6 +685,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of Vnf to ConfigAssigned in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStatusConfigAssignedVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -567,6 +699,11 @@ public class AAIUpdateTasks {
}
}
+ /**
+ * BPMN access method to update status of Vnf to Configure in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStausConfigDeployConfigureVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -578,6 +715,11 @@ public class AAIUpdateTasks {
}
+ /**
+ * BPMN access method to update status of Vnf to configured in AAI
+ *
+ * @param execution
+ */
public void updateOrchestrationStausConfigDeployConfiguredVnf(BuildingBlockExecution execution) {
try {
GenericVnf vnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
index 9bbe94a077..7478479a86 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/sdnc/tasks/SDNCQueryTasks.java
@@ -39,6 +39,9 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+/**
+ * This class is used for quering the SDNC
+ */
@Component
public class SDNCQueryTasks {
private static final Logger logger = LoggerFactory.getLogger(SDNCQueryTasks.class);
@@ -53,6 +56,14 @@ public class SDNCQueryTasks {
@Autowired
private ExtractPojosForBB extractPojosForBB;
+ /**
+ * BPMN access method to query the SDNC for fetching the vnf details.
+ *
+ * It will get the vnf details according to service instance id.
+ *
+ * @param execution
+ * @throws Exception
+ */
public void queryVnf(BuildingBlockExecution execution) throws Exception {
ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -77,7 +88,14 @@ public class SDNCQueryTasks {
}
}
-
+ /**
+ * BPMN access method to query the SDNC for fetching the VfModule details.
+ *
+ * It will get the vnf details according to service instance id, vnf id & Vf module id.
+ *
+ * @param execution
+ * @throws Exception
+ */
public void queryVfModule(BuildingBlockExecution execution) throws Exception {
ServiceInstance serviceInstance = extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
GenericVnf genericVnf = extractPojosForBB.extractByKey(execution, ResourceKey.GENERIC_VNF_ID);
@@ -108,6 +126,13 @@ public class SDNCQueryTasks {
}
}
+ /**
+ * BPMN access method to query the SDNC for fetching the VfModuleForVolumeGroup details.
+ *
+ * It will get the vnf details according to Vf module id.
+ *
+ * @param execution @throws
+ */
public void queryVfModuleForVolumeGroup(BuildingBlockExecution execution) {
try {
VfModule vfModule = extractPojosForBB.extractByKey(execution, ResourceKey.VF_MODULE_ID);
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java
index 4fcacb3c42..7eaf011c75 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/workflow/tasks/OrchestrationStatusValidator.java
@@ -63,6 +63,11 @@ public class OrchestrationStatusValidator {
@Autowired
private CatalogDbClient catalogDbClient;
+ /**
+ * This method validate's the status of the OrchestrationStatus against the buildingBlockDetail ResourceType
+ *
+ * @param execution
+ */
public void validateOrchestrationStatus(BuildingBlockExecution execution) {
try {
OrchestrationStatusValidationDirective previousOrchestrationStatusValidationResult =
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java
index 12aae1e6a6..6434bfb176 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/SDNCVnfResources.java
@@ -50,6 +50,17 @@ public class SDNCVnfResources {
@Autowired
private SDNCClient sdncClient;
+ /**
+ * This method is used for setting the SDNCSvcAction for assignVnf .
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation assignVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, boolean homing,
URI callbackURI) {
@@ -58,6 +69,17 @@ public class SDNCVnfResources {
cloudRegion, requestContext, homing, callbackURI);
}
+ /**
+ * This method is used for setting the SDNCSvcAction for activate vnf.
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation activateVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, URI callbackURI) {
return sdncRM.reqMapper(SDNCSvcOperation.VNF_TOPOLOGY_OPERATION, SDNCSvcAction.ACTIVATE,
@@ -65,7 +87,17 @@ public class SDNCVnfResources {
cloudRegion, requestContext, false, callbackURI);
}
-
+ /**
+ * This method is used for setting the SDNCSvcAction for deactivate vnf.
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation deactivateVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, URI callbackURI) {
return sdncRM.reqMapper(SDNCSvcOperation.VNF_TOPOLOGY_OPERATION, SDNCSvcAction.DEACTIVATE,
@@ -73,7 +105,17 @@ public class SDNCVnfResources {
cloudRegion, requestContext, false, callbackURI);
}
-
+ /**
+ * This method is used for setting the SDNCSvcAction for unassign vnf.
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation unassignVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, URI callbackURI) {
return sdncRM.reqMapper(SDNCSvcOperation.VNF_TOPOLOGY_OPERATION, SDNCSvcAction.UNASSIGN,
@@ -81,6 +123,17 @@ public class SDNCVnfResources {
cloudRegion, requestContext, false, callbackURI);
}
+ /**
+ * This method is used for setting the SDNCSvcAction for delete vnf.
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation deleteVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, URI callbackURI) {
return sdncRM.reqMapper(SDNCSvcOperation.VNF_TOPOLOGY_OPERATION, SDNCSvcAction.DEACTIVATE,
@@ -88,6 +141,17 @@ public class SDNCVnfResources {
cloudRegion, requestContext, false, callbackURI);
}
+ /**
+ * This method is used for setting the SDNCSvcAction for changeModelVnf.
+ *
+ * @param vnf
+ * @param serviceInstance
+ * @param customer
+ * @param cloudRegion
+ * @param requestContext
+ * @param homing
+ * @return
+ */
public GenericResourceApiVnfOperationInformation changeModelVnf(GenericVnf vnf, ServiceInstance serviceInstance,
Customer customer, CloudRegion cloudRegion, RequestContext requestContext, URI callbackURI) {
return sdncRM.reqMapper(SDNCSvcOperation.VNF_TOPOLOGY_OPERATION, SDNCSvcAction.CHANGE_ASSIGN,
@@ -95,6 +159,13 @@ public class SDNCVnfResources {
cloudRegion, requestContext, false, callbackURI);
}
+ /**
+ * This method is used for querying SDNC client for getting the vnf details.
+ *
+ * @param vnf
+ * @exception MapperException & BadResponseException
+ * @return
+ */
public String queryVnf(GenericVnf vnf) throws MapperException, BadResponseException {
String queryPath = vnf.getSelflink();
return sdncClient.get(queryPath);
diff --git a/docs/api/apis/SO_Interface.rst b/docs/api/apis/SO_Interface.rst
index b079989aff..d1586eb5d0 100644
--- a/docs/api/apis/SO_Interface.rst
+++ b/docs/api/apis/SO_Interface.rst
@@ -3,7 +3,7 @@
.. Copyright 2018 Huawei Technologies Co., Ltd.
SO Interfaces
-================================
+=============
.. image:: ../../images/SO_1.png
@@ -13,17 +13,17 @@ SO APIs
North Bound APIs
----------------
Create service instance
-++++++++++++++++++++++++
++++++++++++++++++++++++
-+--------------------+-------------------------------------+
-|Interface Definition|Description |
-+====================+=====================================+
++--------------------+------------------------------------------------------------+
+|Interface Definition|Description |
++====================+============================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6 |
-+--------------------+-------------------------------------+
-|Operation Type |POST |
-+--------------------+-------------------------------------+
-|Content-Type |application/json |
-+--------------------+-------------------------------------+
++--------------------+------------------------------------------------------------+
+|Operation Type |POST |
++--------------------+------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+------------------------------------------------------------+
Request Body:
@@ -205,17 +205,17 @@ LineOfBusiness Object
+-------------------------+------------------+-------------------------------------------------+
Delete service instance
-++++++++++++++++++++++++
++++++++++++++++++++++++
-+--------------------+---------------------------------------------------------+
-|Interface Definition|Description |
-+====================+=========================================================+
++--------------------+--------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId} |
-+--------------------+---------------------------------------------------------+
-|Operation Type |DELETE |
-+--------------------+---------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+---------------------------------------------------------+
++--------------------+--------------------------------------------------------------------------------+
+|Operation Type |DELETE |
++--------------------+--------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+--------------------------------------------------------------------------------+
Request Body:
@@ -258,17 +258,17 @@ RequestInfo Object
+-------------------------+------------------+-------------------------------------------------+
Create Volume Group
-++++++++++++++++++++++++
++++++++++++++++++++
-+--------------------+-------------------------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+===========================================================================================+
++--------------------+------------------------------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+==================================================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups |
-+--------------------+-------------------------------------------------------------------------------------------+
-|Operation Type |POST |
-+--------------------+-------------------------------------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+-------------------------------------------------------------------------------------------+
++--------------------+------------------------------------------------------------------------------------------------------------------+
+|Operation Type |POST |
++--------------------+------------------------------------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+------------------------------------------------------------------------------------------------------------------+
Request Body:
@@ -389,17 +389,17 @@ relatedInstance List
+-------------------------+------------------+-------------------------------------------------+
Delete Volume Group
-++++++++++++++++++++++++
++++++++++++++++++++
-+--------------------+---------------------------------------------------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+=====================================================================================================================+
++--------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+============================================================================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/volumeGroups/{volume-groupinstance-id} |
-+--------------------+---------------------------------------------------------------------------------------------------------------------+
-|Operation Type |DELETE |
-+--------------------+---------------------------------------------------------------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+---------------------------------------------------------------------------------------------------------------------+
++--------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
+|Operation Type |DELETE |
++--------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+--------------------------------------------------------------------------------------------------------------------------------------------+
Request Body:
@@ -450,17 +450,17 @@ RequestInfo Object
+-------------------------+------------------+-------------------------------------------------+
Create VF Module
-+++++++++++++++++
+++++++++++++++++
-+--------------------+----------------------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+========================================================================================+
++--------------------+---------------------------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+===============================================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules |
-+--------------------+----------------------------------------------------------------------------------------+
-|Operation Type |POST |
-+--------------------+----------------------------------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+----------------------------------------------------------------------------------------+
++--------------------+---------------------------------------------------------------------------------------------------------------+
+|Operation Type |POST |
++--------------------+---------------------------------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+---------------------------------------------------------------------------------------------------------------+
Request Body:
@@ -545,17 +545,17 @@ relatedInstance List
+-------------------------+------------------+-------------------------------------------------+
Delete VF Module
-++++++++++++++++++++++++
+++++++++++++++++
-+--------------------+--------------------------------------------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+==============================================================================================================+
++--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+=====================================================================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId}/vfModules/{vfmoduleinstance-id} |
-+--------------------+--------------------------------------------------------------------------------------------------------------+
-|Operation Type |DELETE |
-+--------------------+--------------------------------------------------------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+--------------------------------------------------------------------------------------------------------------+
++--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+|Operation Type |DELETE |
++--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+-------------------------------------------------------------------------------------------------------------------------------------+
Request Body:
@@ -614,17 +614,17 @@ RequestInfo Object
+-------------------------+------------------+-------------------------------------------------+
Create VNF
-+++++++++++++++
+++++++++++
-+--------------------+--------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+==============================================================+
++--------------------+-------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+=====================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs |
-+--------------------+--------------------------------------------------------------+
-|Operation Type |POST |
-+--------------------+--------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+--------------------------------------------------------------+
++--------------------+-------------------------------------------------------------------------------------+
+|Operation Type |POST |
++--------------------+-------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+-------------------------------------------------------------------------------------+
Request Body:
@@ -761,17 +761,17 @@ UserParams Object
+-------------------------+------------------+-------------------------------------------------+
Delete VNF
-+++++++++++++++
+++++++++++
-+--------------------+------------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+==============================================================================+
++--------------------+-----------------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+=====================================================================================================+
|URI |/onap/so/infra/serviceInstantiation/serviceInstances/v6/{serviceInstanceId}/vnfs/{vnfInstanceId} |
-+--------------------+------------------------------------------------------------------------------+
-|Operation Type |DELETE |
-+--------------------+------------------------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+------------------------------------------------------------------------------+
++--------------------+-----------------------------------------------------------------------------------------------------+
+|Operation Type |DELETE |
++--------------------+-----------------------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+-----------------------------------------------------------------------------------------------------+
Request Body:
@@ -842,17 +842,17 @@ UserParams Object
+-------------------------+------------------+-------------------------------------------------+
GET Orchestration Request
-++++++++++++++++++++++++++
++++++++++++++++++++++++++
-+--------------------+--------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+==============================================================+
++--------------------+-------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+=====================================================================================+
|URI |/onap/so/infra/serviceInstantiation/orchestrationRequests/v6/{request-id} |
-+--------------------+--------------------------------------------------------------+
-|Operation Type |GET |
-+--------------------+--------------------------------------------------------------+
-|Content-Type |application/json |
-+--------------------+--------------------------------------------------------------+
++--------------------+-------------------------------------------------------------------------------------+
+|Operation Type |GET |
++--------------------+-------------------------------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+-------------------------------------------------------------------------------------+
Response Body:
@@ -998,7 +998,7 @@ GET Orchestration Requests
+--------------------+--------------------------------------------------------------+
|Interface Definition|Description |
+====================+==============================================================+
-|URI |/onap/so/infra/serviceInstantiation/orchestrationRequests/v6 |
+|URI |/onap/so/infra/serviceInstantiation/orchestrationRequests/v6 |
+--------------------+--------------------------------------------------------------+
|Operation Type |GET |
+--------------------+--------------------------------------------------------------+
@@ -1152,7 +1152,7 @@ RequestStatus Object
+-------------------------+------------------+-------------------------------------------------+
SDC Client API
-------------------
+--------------
Get List of Existing Catalog Assets
+++++++++++++++++++++++++++++++++++
@@ -1291,7 +1291,7 @@ Response:
Resource Object:
+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+
-|Attribute |Qualifier|Content|Description | |
+|Attribute |Qualifier|Content|Description |
+=====================+=========+=======+===================================================================================================================+
|resourceInstanceName |M |String |Logical Resource Instance Name.Unique Identifier of the instance of the specific resource in the service context.|
+---------------------+---------+-------+-------------------------------------------------------------------------------------------------------------------+
@@ -1372,20 +1372,20 @@ Response:
+--------------------+---------+--------------------------------------------------------------------------------------------------------------------------+
E2E Service API
-----------------
+---------------
Create E2E service instance
-++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
-+--------------------+-------------------------------------+
-|Interface Definition|Description |
-+====================+=====================================+
++--------------------+------------------------------------------------------------+
+|Interface Definition|Description |
++====================+============================================================+
|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3 |
-+--------------------+-------------------------------------+
-|Operation Type |POST |
-+--------------------+-------------------------------------+
-|Content-Type |application/json |
-+--------------------+-------------------------------------+
++--------------------+------------------------------------------------------------+
+|Operation Type |POST |
++--------------------+------------------------------------------------------------+
+|Content-Type |application/json |
++--------------------+------------------------------------------------------------+
Request Body:
@@ -1424,7 +1424,7 @@ Parameter Object
+------------------------------+-----------------+------------------------------------+
|resource |List of Resource |resource of service/resource |
+------------------------------+-----------------+------------------------------------+
-|requestInputs |key-value map |input of service/resource
+|requestInputs |key-value map |input of service/resource |
+------------------------------+-----------------+------------------------------------+
LocationConstraint Object
@@ -1472,15 +1472,15 @@ Response:
+-------------+---------+-----------+-------+------------------------------------------------------------------------+
Delete E2E service instance
-++++++++++++++++++++++++++++
++++++++++++++++++++++++++++
-+--------------------+-----------------------------------------------+
-|Interface Definition|Description |
-+====================+===============================================+
++--------------------+----------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+======================================================================+
|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3/{serviceId}|
-+--------------------+-----------------------------------------------+
-|Operation Type |DELETE |
-+--------------------+-----------------------------------------------+
++--------------------+----------------------------------------------------------------------+
+|Operation Type |DELETE |
++--------------------+----------------------------------------------------------------------+
Request Parameters:
@@ -1501,15 +1501,15 @@ Response:
+-------------+---------+-----------+-------+------------------------------------------------------------------------+
Query E2E service operation result
-++++++++++++++++++++++++++
+++++++++++++++++++++++++++++++++++
-+--------------------+------------------------------------------------------------------------+
-|Interface Definition|Description |
-+====================+========================================================================+
++--------------------+-----------------------------------------------------------------------------------------------+
+|Interface Definition|Description |
++====================+===============================================================================================+
|URI |/onap/so/infra/serviceInstantiation/e2eServiceInstances/v3/{serviceId}/operations/{operationId}|
-+--------------------+------------------------------------------------------------------------+
-|Operation Type |GET |
-+--------------------+------------------------------------------------------------------------+
++--------------------+-----------------------------------------------------------------------------------------------+
+|Operation Type |GET |
++--------------------+-----------------------------------------------------------------------------------------------+
Request Parameters:
@@ -1548,7 +1548,7 @@ Response:
+------------------+---------+-----------+-------+------------------------------------------------------------------------+
Inventory APIs
-----------------
+--------------
create or update an existing service-instance
+++++++++++++++++++++++++++++++++++++++++++++
@@ -1740,10 +1740,10 @@ Response:
VFC APIs
----------
+--------
Create NS
-+++++++++++
++++++++++
+--------------------+-------------------+
|Interface Definition|Description |
@@ -1778,7 +1778,7 @@ Response:
+-----------------+---------+-----------+----------------+-------------------+
Get NS
-+++++++
+++++++
+--------------------+-------------------+
|Interface Definition|Description |
@@ -1869,7 +1869,7 @@ vnffgInfo Array:
+----------------------+---------+-----------+----------------+-------------------+
Instantiate NS
-+++++++++++++++
+++++++++++++++
+--------------------+-------------------------------------+
|Interface Definition|Description |
@@ -1898,7 +1898,7 @@ LocationConstraints Array:
+----------------------+---------+-----------+-------+-----------------------+
|Attribute |Qualifier|Cardinality|Content|Description |
+======================+=========+===========+=======+=======================+
-|vnfProfileId |M |1 |String |vnfProfileId |
+|vnfProfileId |M |1 |String |vnfProfileId |
+----------------------+---------+-----------+-------+-----------------------+
|vimid |M |1 |String |vimid |
+----------------------+---------+-----------+-------+-----------------------+
@@ -1912,7 +1912,7 @@ Response:
+--------------+---------+-----------+-------+-----------------------+
Terminate NS
-+++++++++++++++
+++++++++++++
+--------------------+-------------------------------------+
|Interface Definition|Description |
@@ -1945,7 +1945,7 @@ Response:
+--------------+---------+-----------+-------+-----------------------+
Delete NS
-+++++++++++++++
++++++++++
+--------------------+-------------------------------------+
|Interface Definition|Description |
@@ -1964,9 +1964,9 @@ Request Parameters:
+----------------------------+---------+-----------+-------+-----------------------------+
MultiVIM API
-----------------
+------------
Get token
-++++++++++
++++++++++
https://developer.openstack.org/api-ref/identity/v3/#password-authentication-with-unscoped-authorization
@@ -2051,7 +2051,7 @@ Response:
+-------------------------+------------------+--------------------------------------------------------------------------+
Create stack
-+++++++++++++
+++++++++++++
https://developer.openstack.org/api-ref/orchestration/v1/#create-stack
@@ -2108,7 +2108,7 @@ Response:
+-------------------------+------------------+--------------------------------------------------------------------------+
Get stack
-+++++++++++++
++++++++++
https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details
@@ -2187,7 +2187,7 @@ Response:
+-------------------------+------------------+------------------------------------------------------------------------------+
Delete stack
-+++++++++++++
+++++++++++++
https://developer.openstack.org/api-ref/orchestration/v1/#show-stack-details
@@ -2346,7 +2346,7 @@ Request Body:
+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+
Create Keypair
-+++++++++++++++
+++++++++++++++
https://developer.openstack.org/api-ref/compute/#create-or-import-keypair
@@ -2397,7 +2397,7 @@ Response:
+-----------------+------------------+------------------------------------------------------------------------------+
Delete Keypair
-+++++++++++++++
+++++++++++++++
https://developer.openstack.org/api-ref/compute/#delete-keypair
@@ -2422,7 +2422,7 @@ Request Body:
+------------------+---------+-----------+--------------------------+-------------------------------------------------------------------------------------------------+
Create Network
-+++++++++++++++
+++++++++++++++
https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#create-network
@@ -2543,7 +2543,7 @@ Response:
+-----------------------------+------------------+------------------------------------------------------------------------------+
Delete Network
-+++++++++++++++
+++++++++++++++
https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail#delete-network
@@ -2566,7 +2566,7 @@ Request Body:
+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+
Create Subnet
-+++++++++++++++
++++++++++++++
https://developer.openstack.org/api-ref/network/v2/?expanded=create-network-detail,create-subnet-detail#create-subnet
@@ -2675,7 +2675,7 @@ Response:
+-----------------------------+------------------+------------------------------------------------------------------------------+
Delete Subnet
-+++++++++++++++
++++++++++++++
https://developer.openstack.org/api-ref/networking/v2/?expanded=create-network-detail,delete-subnet-detail#delete-subnet
@@ -2698,7 +2698,7 @@ Request Body:
+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+
Create Port
-+++++++++++++++
++++++++++++
https://developer.openstack.org/api-ref/networking/v2/#create-port
@@ -2829,7 +2829,7 @@ Response:
+-----------------------------+------------------+------------------------------------------------------------------------------+
Delete Port
-+++++++++++++++
++++++++++++
https://developer.openstack.org/api-ref/network/v2/#delete-port
@@ -2852,7 +2852,7 @@ Request Body:
+----------------------------+---------+-----------+--------------------------+--------------------------------------------------------------+
Create Security Group
-++++++++++++++++++++++
++++++++++++++++++++++
https://developer.openstack.org/api-ref/network/v2/#create-security-group
@@ -2909,7 +2909,7 @@ Response:
+-----------------------------+------------------+------------------------------------------------------------------------------+
Delete security group
-++++++++++++++++++++++
++++++++++++++++++++++
https://developer.openstack.org/api-ref/network/v2/#delete-security-group
@@ -3007,7 +3007,7 @@ Response:
+-----------------------------+------------------+-------------------------------------------------------------------------------------------------+
Delete security group
-++++++++++++++++++++++
++++++++++++++++++++++
https://developer.openstack.org/api-ref/networking/v2/#delete-security-group-rule
@@ -3948,139 +3948,139 @@ Request Parameters:
+-------------------+---------+-----------+-------+-------------------------------------------------------------+
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|transactionId |Y |1 |String |A unique ID to track an ONAP transaction. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|requestId |Y |1 |String |A unique ID to track multiple requests. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|callbackUrl |Y |1 |String |The end point of a callback service where recommendations are posted. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|callbackHeader |N |1 |String |The header information a client expecting in a async callback. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|sourceId |Y |1 |String |The unique ID of a client making an optimization call. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|requestType |Y |1 |String |The type of a request |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|numSolutions |N |1 |Integer|Expected number of solutions. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|optimizers |Y |1..N |List of Strings|A list of optimization services. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|timeout |N |1 |Integer|A tolerance window (in secs) for expecting solutions. Default is 600 secs.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+===============+==========================================================================+
+|transactionId |Y |1 |String |A unique ID to track an ONAP transaction. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|requestId |Y |1 |String |A unique ID to track multiple requests. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|callbackUrl |Y |1 |String |The end point of a callback service where recommendations are posted. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|callbackHeader |N |1 |String |The header information a client expecting in a async callback. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|sourceId |Y |1 |String |The unique ID of a client making an optimization call. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|requestType |Y |1 |String |The type of a request |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|numSolutions |N |1 |Integer |Expected number of solutions. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|optimizers |Y |1..N |List of Strings|A list of optimization services. |
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
+|timeout |N |1 |Integer |A tolerance window (in secs) for expecting solutions. Default is 600 secs.|
++-------------------+---------+-----------+---------------+--------------------------------------------------------------------------+
PlacementInfo Object
-+-------------------+---------+-----------+-------+-------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=============================================================+
-|requestParameters |C |1 |String |A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|placementDemands |Y |1..N |List of PlacementDemand Object|The resource information for a placement service.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|subscriberInfo |N |1 |Object |The information of a service subscriber. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+==============================+=======================================================================================================================================================================================================================================================================================================================================+
+|requestParameters |C |1 |String |A JSON object conaining service and customer-specific data. A client or service designer is required to specify the parameters of interest for a given service and their location in the JSON blob through optimization query policies. This attribute is only required if a request contains service or customer-specific information.|
++-------------------+---------+-----------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+|placementDemands |Y |1..N |List of PlacementDemand Object|The resource information for a placement service. |
++-------------------+---------+-----------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+|subscriberInfo |N |1 |Object |The information of a service subscriber. |
++-------------------+---------+-----------+------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
PlacementDemand Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|resourceModuleName |Y |1 |String |A resource name as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|tenantId |N |1 |String |A tenant Id as defined in the ordering system. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|resourceModelInfo |Y |1 |Object |Resource model information as defined in SDC. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|existingCandidates |N |1..N |List of Candidates Objects | The existing placement information of a resource. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|excludedCandidates |N |1..N |List of Candidates Objects |Candidates that need to be excluded from solutions.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|requiredCandidates |N |1..N |List of Candidates Objects |Candidates that must be included in solutions. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+============================+=======================================================================+
+|resourceModuleName |Y |1 |String |A resource name as defined in a service model. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|tenantId |N |1 |String |A tenant Id as defined in the ordering system. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|resourceModelInfo |Y |1 |Object |Resource model information as defined in SDC. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|existingCandidates |N |1..N |List of Candidates Objects | The existing placement information of a resource. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|excludedCandidates |N |1..N |List of Candidates Objects |Candidates that need to be excluded from solutions. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
+|requiredCandidates |N |1..N |List of Candidates Objects |Candidates that must be included in solutions. |
++-------------------+---------+-----------+----------------------------+-----------------------------------------------------------------------+
SubscriberInfo Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|globalSubscriberId |Y |1 |String |An ID of a subscriber. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|subscriberName |Y |1.N |String |The name of a subscriber. If the name is not known, the value must be 'unknown'.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|subscriberCommonSiteId |N |1 |String |Id representing a subscriber location. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-----------------------+---------+-----------+-------+-----------------------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content|Description |
++=======================+=========+===========+=======+===================================================================================+
+|globalSubscriberId |Y |1 |String |An ID of a subscriber. |
++-----------------------+---------+-----------+-------+-----------------------------------------------------------------------------------+
+|subscriberName |Y |1.N |String |The name of a subscriber. If the name is not known, the value must be 'unknown'. |
++-----------------------+---------+-----------+-------+-----------------------------------------------------------------------------------+
+|subscriberCommonSiteId |N |1 |String |Id representing a subscriber location. |
++-----------------------+---------+-----------+-------+-----------------------------------------------------------------------------------+
ModelMetaData Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|modelInvariantId |Y |1 |String |A model invariant Id as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelVersionId |Y |1 |String |A unique model Id as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelName |N |1 |String |A model name as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelType |N |1 |String |A model type as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelVersion |N |1 |String |A model version as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelCustomizationName |N |1 |String |A model customization name as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content|Description |
++========================+=========+===========+=======+=======================================================================+
+|modelInvariantId |Y |1 |String |A model invariant Id as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|modelVersionId |Y |1 |String |A unique model Id as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|modelName |N |1 |String |A model name as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|modelType |N |1 |String |A model type as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|modelVersion |N |1 |String |A model version as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
+|modelCustomizationName |N |1 |String |A model customization name as defined in a service model. |
++------------------------+---------+-----------+-------+-----------------------------------------------------------------------+
Candidates Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|identifierType |Y |1 |String |The type of a candidate. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|identifiers |Y |1..N |List |A list of identifiers. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|cloudOwner |C |1 |String |The name of a cloud owner. Only required if identifierType is cloud_region_id.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+-------+--------------------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content|Description |
++===================+=========+===========+=======+================================================================================+
+|identifierType |Y |1 |String |The type of a candidate. |
++-------------------+---------+-----------+-------+--------------------------------------------------------------------------------+
+|identifiers |Y |1..N |List |A list of identifiers. |
++-------------------+---------+-----------+-------+--------------------------------------------------------------------------------+
+|cloudOwner |C |1 |String |The name of a cloud owner. Only required if identifierType is cloud_region_id. |
++-------------------+---------+-----------+-------+--------------------------------------------------------------------------------+
ServiceInfo Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|serviceInstanceId |Y |1 |String |A service instance id associated with a request. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|modelInfo |Y |1 |ModelMetaData Object |A list of identifiers. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|serviceName |Y |1 |String |The name of a service |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+=====================+=======================================================================+
+|serviceInstanceId |Y |1 |String |A service instance id associated with a request. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|modelInfo |Y |1 |ModelMetaData Object |A list of identifiers. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|serviceName |Y |1 |String |The name of a service |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
LicenseInfo Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|licenseDemands |Y |1..N |List of LicenseDemands Object |A list of resources for license selection. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+------------------------------+-----------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+==============================+=======================================================================+
+|licenseDemands |Y |1..N |List of LicenseDemands Object |A list of resources for license selection. |
++-------------------+---------+-----------+------------------------------+-----------------------------------------------------------------------+
LicenseDemand Object
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|Attribute |Required |Cardinality|Content|Description |
-+===================+=========+===========+=======+=======================================================================+
-|resourceModuleName |Y |1 |String |A resource name as defined in a service model. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|resourceModelInfo |Y |1 |ModelMetaData Object |Resource model information as defined in a service model.|
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
-|existingLicenses |N |1 |LicenseModel Object |Existing license information assigned to a resource. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|Attribute |Required |Cardinality|Content |Description |
++===================+=========+===========+=====================+=======================================================================+
+|resourceModuleName |Y |1 |String |A resource name as defined in a service model. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|serviceResourceId |Y |1 |String |A unique resource Id with a local scope between client and OOF. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|resourceModelInfo |Y |1 |ModelMetaData Object |Resource model information as defined in a service model. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
+|existingLicenses |N |1 |LicenseModel Object |Existing license information assigned to a resource. |
++-------------------+---------+-----------+---------------------+-----------------------------------------------------------------------+
LicenseModel Object
@@ -4105,4 +4105,4 @@ Response Body
|statusMessage |N |1 |String |Reasoning if a requestStatus is failed. |
+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
|requestStatus |Y |1 |String |The status of a request. |
-+-------------------+---------+-----------+-------+-----------------------------------------------------------------------+ \ No newline at end of file
++-------------------+---------+-----------+-------+-----------------------------------------------------------------------+
diff --git a/docs/architecture/architecture.rst b/docs/architecture/architecture.rst
index 52eb38cfe4..7636792c41 100644
--- a/docs/architecture/architecture.rst
+++ b/docs/architecture/architecture.rst
@@ -3,10 +3,10 @@
.. Copyright 2018 Huawei Technologies Co., Ltd.
SO - Architecture
-===============
+=================
SO Functional View
---------------------
+------------------
.. image:: ../images/SO_Architecture_1.png
@@ -21,9 +21,9 @@ SO Sub-Components
**API Handler**
RESTful interface to northbound clients
-
- * Handle service-level and infrastructure (VNF & network) requests
-
+
+* Handle service-level and infrastructure (VNF & network) requests
+
Service-agnostic APIs
* “Service Instantiation API”
@@ -31,7 +31,7 @@ SO Sub-Components
* Use SO Catalog to map input requests to BPMN flows
* Dynamic lookup based on service-model + action
* Input data forwarded to BPMN flow
-
+
Track open and completed requests via SO Request DB
Multiple API-H modules may support different APIs
@@ -49,7 +49,7 @@ SO Sub-Components
* Request and configure network resources via SDN-C
* Manage cloud resources via PO (OpenStack)
* Update inventory via A&AI
-
+
Perform error handling/rollback
**Resource Adapters**
@@ -59,7 +59,7 @@ SO Sub-Components
* Hides the details of complex interfaces (e.g. OpenStack APIs)
* Expose interfaces to BPMN flows as SOAP or REST APIs
* Support synchronous and asynchronous operations
-
+
Provided as part of SO platform for use by all BPMN flows
Use SO Catalog to map resource requests to a recipe/template
@@ -69,10 +69,10 @@ SO Sub-Components
* Merge input parameters with templates at run-time
**Data Stores**
-
+
Request DB
* Tracks open and completed requests
-
+
SO Catalog
* SO view of the SDC Catalog
* service and resource models, recipes, and templates
@@ -81,13 +81,13 @@ SO Sub-Components
Camunda DB
* Maintain state for BPMN flows
* Supports multiple active engines
-
+
**SDC Distribution Client**
Receive updated service models from SDC
* Event-bus notifications when new models available
* HTTP retrieval of models (TOSCA) and artifacts (Heat)
-
+
Receive distributions as TOSCA models
Populate SO Catalog
@@ -119,11 +119,3 @@ Third Party and Open Source
Tomcat
MySQL/MariaDB
Openstack Java SDK (“woorea”)
-
-
-
-
-
-
-
-
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java
index a1c1dd1cc4..2fd426dec2 100644
--- a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandler/filters/RequestIdFilter.java
@@ -24,22 +24,27 @@ import javax.annotation.Priority;
import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;
-import org.apache.http.HttpStatus;
import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.apihandler.common.ErrorNumbers;
+import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestIdException;
import org.onap.so.db.request.beans.InfraActiveRequests;
import org.onap.so.db.request.client.RequestsDbClient;
-import org.slf4j.MDC;
+import org.onap.so.serviceinstancebeans.RequestError;
+import org.onap.so.serviceinstancebeans.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
@Priority(2)
@Provider
@Component
public class RequestIdFilter implements ContainerRequestFilter {
- protected static Logger logger = LoggerFactory.getLogger(RequestIdFilter.class);
+ private static Logger logger = LoggerFactory.getLogger(RequestIdFilter.class);
@Autowired
private RequestsDbClient infraActiveRequestsClient;
@@ -48,11 +53,33 @@ public class RequestIdFilter implements ContainerRequestFilter {
public void filter(ContainerRequestContext context) throws IOException {
String requestId = MDC.get(ONAPLogConstants.MDCs.REQUEST_ID);
+ logger.info("Checking if requestId: {} already exists in requestDb InfraActiveRequests table", requestId);
InfraActiveRequests infraActiveRequests = infraActiveRequestsClient.getInfraActiveRequestbyRequestId(requestId);
if (infraActiveRequests != null) {
- MDC.put(ONAPLogConstants.MDCs.RESPONSE_CODE, String.valueOf(HttpStatus.SC_BAD_REQUEST));
- logger.error("RequestID exists in RequestDB.InfraActiveRequests : {}", requestId);
+ logger.error(
+ "RequestId: {} already exists in RequestDB InfraActiveRequests table, throwing DuplicateRequestIdException",
+ requestId);
+ throw new DuplicateRequestIdException(createRequestError(requestId, "InfraActiveRequests"));
+ }
+ }
+
+ protected String createRequestError(String requestId, String requestTable) {
+ ObjectMapper mapper = new ObjectMapper();
+ RequestError error = new RequestError();
+ ServiceException serviceException = new ServiceException();
+ serviceException.setMessageId(ErrorNumbers.SVC_BAD_PARAMETER);
+ serviceException
+ .setText("RequestId: " + requestId + " already exists in the RequestDB " + requestTable + " table");
+ error.setServiceException(serviceException);
+ String errorMessage = null;
+
+ try {
+ errorMessage = mapper.writeValueAsString(error);
+ } catch (JsonProcessingException e) {
+ return "Unable to write requestError to String when requestId already exists in the RequestDb due to error: "
+ + e.getMessage();
}
+ return errorMessage;
}
}
diff --git a/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java
new file mode 100644
index 0000000000..f56b4218ba
--- /dev/null
+++ b/mso-api-handlers/mso-api-handler-common/src/main/java/org/onap/so/apihandlerinfra/exceptions/DuplicateRequestIdException.java
@@ -0,0 +1,31 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.so.apihandlerinfra.exceptions;
+
+import javax.ws.rs.WebApplicationException;
+import javax.ws.rs.core.Response;
+
+public class DuplicateRequestIdException extends WebApplicationException {
+
+ public DuplicateRequestIdException(String response) {
+ super(Response.status(Response.Status.BAD_REQUEST).entity(response).build());
+ }
+}
diff --git a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java
index 9bf83153b3..8716047603 100644
--- a/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java
+++ b/mso-api-handlers/mso-api-handler-common/src/test/java/org/onap/so/apihandler/filters/RequestIdFilterTest.java
@@ -20,67 +20,85 @@
package org.onap.so.apihandler.filters;
-import static org.junit.Assert.assertEquals;
+import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs;
+import static org.junit.Assert.assertThat;
import static org.mockito.Mockito.doReturn;
import java.io.IOException;
+import java.util.Collections;
import javax.ws.rs.container.ContainerRequestContext;
-import org.apache.http.HttpStatus;
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.Mockito;
import org.mockito.Spy;
-import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoJUnitRunner;
-import org.mockito.junit.MockitoRule;
import org.onap.logging.ref.slf4j.ONAPLogConstants;
+import org.onap.so.apihandlerinfra.exceptions.DuplicateRequestIdException;
import org.onap.so.db.request.beans.InfraActiveRequests;
import org.onap.so.db.request.client.RequestsDbClient;
+import org.onap.so.serviceinstancebeans.RequestError;
+import org.onap.so.serviceinstancebeans.ServiceException;
import org.slf4j.MDC;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
@RunWith(MockitoJUnitRunner.class)
public class RequestIdFilterTest {
@Mock
- ContainerRequestContext mockContext;
+ private ContainerRequestContext mockContext;
@Mock
- protected RequestsDbClient requestsDbClient;
+ private RequestsDbClient requestsDbClient;
@InjectMocks
@Spy
- RequestIdFilter requestIdFilter;
+ private RequestIdFilter requestIdFilter;
@Rule
public ExpectedException thrown = ExpectedException.none();
- @Rule
- public MockitoRule mockitoRule = MockitoJUnit.rule();
+ private static final String REQUEST_ID = "32807a28-1a14-4b88-b7b3-2950918aa769";
+ private ObjectMapper mapper = new ObjectMapper();
- @Test
- public void filterTest() throws IOException {
+ private RequestError getRequestError() throws IOException {
+ RequestError requestError = new RequestError();
+ mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, false);
+ ServiceException serviceException = new ServiceException();
+ serviceException.setMessageId("SVC0002");
+ serviceException.setText(
+ "RequestId: 32807a28-1a14-4b88-b7b3-2950918aa769 already exists in the RequestDB InfraActiveRequests table");
+ serviceException.setVariables(Collections.emptyList());
+ requestError.setServiceException(serviceException);
+ return requestError;
+ }
- String requestId = "32807a28-1a14-4b88-b7b3-2950918aa769";
+ @Test
+ public void filterTestInfra() throws IOException {
+ String error = mapper.writeValueAsString(getRequestError());
+ String requestId = REQUEST_ID;
MDC.put(ONAPLogConstants.MDCs.REQUEST_ID, requestId);
// ExpectedRecord InfraActiveRequests
InfraActiveRequests infraActiveRequests = new InfraActiveRequests();
- infraActiveRequests.setRequestStatus("FAILED");
- infraActiveRequests.setProgress(100L);
- infraActiveRequests.setLastModifiedBy("APIH");
- infraActiveRequests.setRequestScope("network");
- infraActiveRequests.setRequestAction("deleteInstance");
- infraActiveRequests.setRequestId("32807a28-1a14-4b88-b7b3-2950918aa769");
+ infraActiveRequests.setRequestId(REQUEST_ID);
doReturn(infraActiveRequests).when(requestsDbClient).getInfraActiveRequestbyRequestId(requestId);
+ doReturn(error).when(requestIdFilter).createRequestError(REQUEST_ID, "InfraActiveRequests");
+ thrown.expect(DuplicateRequestIdException.class);
+ thrown.expectMessage("HTTP 400 Bad Request");
requestIdFilter.filter(mockContext);
+ }
- Mockito.verify(requestIdFilter, Mockito.times(1)).filter(mockContext);
- assertEquals(MDC.get(ONAPLogConstants.MDCs.RESPONSE_CODE), String.valueOf(HttpStatus.SC_BAD_REQUEST));
+ @Test
+ public void createRequestErrorTest() throws IOException {
+ RequestError requestError = getRequestError();
+ String result = requestIdFilter.createRequestError(REQUEST_ID, "InfraActiveRequests");
+ RequestError resultingError = mapper.readValue(result, RequestError.class);
+ assertThat(resultingError, sameBeanAs(requestError));
}
}