diff options
Diffstat (limited to 'bpmn/MSOCommonBPMN')
22 files changed, 567 insertions, 364 deletions
diff --git a/bpmn/MSOCommonBPMN/pom.xml b/bpmn/MSOCommonBPMN/pom.xml index 456b8ae074..926e09c498 100644 --- a/bpmn/MSOCommonBPMN/pom.xml +++ b/bpmn/MSOCommonBPMN/pom.xml @@ -293,12 +293,12 @@ <dependency> <groupId>org.onap.appc.client</groupId> <artifactId>client-lib</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> </dependency> <dependency> <groupId>org.onap.appc.client</groupId> <artifactId>client-kit</artifactId> - <version>1.3.0</version> + <version>1.4.0</version> </dependency> <dependency> diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AbstractServiceTaskProcessor.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AbstractServiceTaskProcessor.groovy index 00bd8e9ef8..9e71313e09 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AbstractServiceTaskProcessor.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AbstractServiceTaskProcessor.groovy @@ -694,32 +694,6 @@ public abstract class AbstractServiceTaskProcessor implements ServiceTaskProcess } /** - * Constructs a workflow message callback URL for the specified message type and correlator. - * This type of callback URL is used when a workflow wants an MSO adapter (like the SDNC - * adapter) to call it back. In other words, this is for callbacks internal to the MSO - * complex. Use <code>createWorkflowMessageAdapterCallbackURL</code> if the callback - * will come from outside the MSO complex. - * @param endpoint endpoint address to contruct URL from - * @param messageType the message type (e.g. SDNCAResponse or VNFAResponse) - * @param correlator the correlator value (e.g. a request ID) - */ - public String createCallbackURL(String endpoint, String messageType, String correlator) { - if (endpoint == null || endpoint.isEmpty()) { - ExceptionUtil exceptionUtil = new ExceptionUtil() - exceptionUtil.buildAndThrowWorkflowException(execution, 2000, - 'mso:workflow:message:endpoint was not passed in') - } - - while (endpoint.endsWith('/')) { - endpoint = endpoint.substring(0, endpoint.length()-1) - } - - return endpoint + - '/' + UriUtils.encodePathSegment(messageType, 'UTF-8') + - '/' + UriUtils.encodePathSegment(correlator, 'UTF-8') - } - - /** * * Constructs a workflow message callback URL for the specified message type and correlator. * This type of callback URL is used when a workflow wants a system outside the MSO complex diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtils.groovy index e4bc5f8fa2..c337a21987 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtils.groovy @@ -137,7 +137,7 @@ class AllottedResourceUtils { try { AAIResourcesClient client = new AAIResourcesClient() AAIResourceUri uri = AAIUriFactory.createResourceUri(AAIObjectType.ALLOTTED_RESOURCE, allottedResourceId) - AaiUtil aaiUtil = new AaiUtil() + AaiUtil aaiUtil = new AaiUtil(taskProcessor) arLink = aaiUtil.createAaiUri(uri) } catch (NotFoundException e) { msoLogger.debug("GET AR received a Not Found (404) Response") @@ -323,5 +323,25 @@ class AllottedResourceUtils { msoLogger.trace("Exit BuildAAIErrorResponse Process") throw new BpmnError("MSOWorkflowException") } + + public String createARUrl(DelegateExecution execution, AAIResourceUri uri, String allottedResourceId) { + AaiUtil aaiUriUtil = new AaiUtil(taskProcessor) + AAIResourceUri siResourceLink= uri + + String siUri = "" + + if(siResourceLink != null) { + msoLogger.debug("Incoming PSI Resource Link is: " + siResourceLink.build().toString()) + } + else + { + String msg = "Parent Service Link in AAI is null" + msoLogger.debug(msg) + exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg) + } + AAIResourceUri arUri = AAIUriFactory.createResourceFromParentURI(siResourceLink, AAIObjectType.ALLOTTED_RESOURCE, allottedResourceId) + + return aaiUriUtil.createAaiUri(arUri) + } } diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy index f9ddd0d430..9a3e1b7349 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/MsoUtils.groovy @@ -939,7 +939,8 @@ class MsoUtils { if (moduleIndexList == null || moduleIndexList.size() == 0) { return "0" } - def sortedModuleIndexList = moduleIndexList.sort { a, b -> a.compareTo b } + + def sortedModuleIndexList = moduleIndexList.sort{ a, b -> a as Integer <=> b as Integer} for (i in 0..sortedModuleIndexList.size()-1) { if (Integer.parseInt(sortedModuleIndexList[i]) != i) { diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy index aa0d8ace6a..c50ef3530e 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofHoming.groovy @@ -18,13 +18,11 @@ * ============LICENSE_END========================================================= */ package org.onap.so.bpmn.common.scripts + import org.onap.so.bpmn.core.UrnPropertiesReader import org.camunda.bpm.engine.delegate.BpmnError import org.camunda.bpm.engine.delegate.DelegateExecution -import org.onap.so.bpmn.common.scripts.AaiUtil -import org.onap.so.bpmn.common.scripts.ExceptionUtil - import org.onap.so.bpmn.core.domain.InventoryType import org.onap.so.bpmn.core.domain.Resource import org.onap.so.bpmn.core.domain.ResourceType @@ -32,15 +30,17 @@ import org.onap.so.bpmn.core.domain.ServiceDecomposition import org.onap.so.bpmn.core.domain.Subscriber import org.onap.so.bpmn.core.domain.VnfResource import org.onap.so.bpmn.core.json.JsonUtils +import org.onap.so.db.catalog.beans.AuthenticationType import org.onap.so.db.catalog.beans.CloudIdentity import org.onap.so.db.catalog.beans.CloudSite +import org.onap.so.db.catalog.beans.ServerType import org.onap.so.rest.APIResponse import org.onap.so.rest.RESTClient import org.onap.so.rest.RESTConfig -import org.onap.so.bpmn.common.scripts.AbstractServiceTaskProcessor import org.json.JSONArray import org.json.JSONObject +import org.springframework.web.util.UriUtils import static org.onap.so.bpmn.common.scripts.GenericUtils.* @@ -213,17 +213,12 @@ class OofHoming extends AbstractServiceTaskProcessor { for (int j = 0; j < arrSol.length(); j++) { JSONObject placement = arrSol.getJSONObject(j) utils.log("DEBUG", "****** Placement Solution is: " + placement + " *****", "true") - String jsonServiceResourceId = placement.getString("serviceResourceId") - String jsonResourceModuleName = placement.getString("resourceModuleName") + String jsonServiceResourceId = jsonUtil.getJsonValue( placement.toString(), "serviceResourceId") + utils.log("DEBUG", "****** homing serviceResourceId is: " + jsonServiceResourceId + " *****", "true") for (Resource resource : resourceList) { String serviceResourceId = resource.getResourceId() - String resourceModuleName = "" - if (resource.getResourceType() == ResourceType.ALLOTTED_RESOURCE || - resource.getResourceType() == ResourceType.VNF) { - resourceModuleName = resource.getNfFunction() - } - if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId) || - resourceModuleName.equalsIgnoreCase(jsonResourceModuleName)) { + utils.log("DEBUG", "****** decomp serviceResourceId is: " + serviceResourceId + " *****", "true") + if (serviceResourceId.equalsIgnoreCase(jsonServiceResourceId)) { JSONObject solution = placement.getJSONObject("solution") String solutionType = solution.getString("identifierType") String inventoryType = "" @@ -232,43 +227,79 @@ class OofHoming extends AbstractServiceTaskProcessor { } else { inventoryType = "cloud" } + utils.log("DEBUG", "****** homing inventoryType is: " + inventoryType + " *****", "true") resource.getHomingSolution().setInventoryType(InventoryType.valueOf(inventoryType)) JSONArray assignmentArr = placement.getJSONArray("assignmentInfo") + utils.log("DEBUG", "****** assignmentInfo is: " + assignmentArr.toString() + " *****", "true") + + Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, + assignmentArr.toString(), "key", "value") String oofDirectives = null - assignmentArr.each { element -> - JSONObject jsonObject = new JSONObject(element.toString()) - if (jsonUtil.getJsonRawValue(jsonObject.toString(), "key") == "oof_directives") { - oofDirectives = jsonUtil.getJsonRawValue(jsonObject.toString(), "value") + assignmentMap.each { key, value -> + utils.log("DEBUG", "****** element: " + key + " *****", "true") + if (key == "oof_directives") { + oofDirectives = value + utils.log("DEBUG", "****** homing oofDirectives: " + oofDirectives + " *****", "true") } } - Map<String, String> assignmentMap = jsonUtil.entryArrayToMap(execution, - assignmentArr.toString(), "key", "value") String cloudOwner = assignmentMap.get("cloudOwner") + utils.log("DEBUG", "****** homing cloudOwner: " + cloudOwner + " *****", "true") String cloudRegionId = assignmentMap.get("locationId") + utils.log("DEBUG", "****** homing cloudRegionId: " + cloudRegionId + " *****", "true") resource.getHomingSolution().setCloudOwner(cloudOwner) resource.getHomingSolution().setCloudRegionId(cloudRegionId) - CloudSite cloudSite = new CloudSite(); + CloudSite cloudSite = new CloudSite() cloudSite.setId(cloudRegionId) cloudSite.setRegionId(cloudRegionId) String orchestrator = execution.getVariable("orchestrator") - if ((orchestrator != null) || (orchestrator != "")) { + if ((orchestrator != null) && (orchestrator != "")) { cloudSite.setOrchestrator(orchestrator) + utils.log("DEBUG", "****** orchestrator: " + orchestrator + " *****", "true") + } else { + cloudSite.setOrchestrator("multicloud") } - CloudIdentity cloudIdentity = new CloudIdentity(); - cloudIdentity.setId(cloudRegionId); - cloudIdentity.setIdentityUrl("/api/multicloud /v1/" + cloudOwner + "/" + cloudRegionId + "/infra_workload") - cloudSite.setIdentityService(cloudIdentity); + CloudIdentity cloudIdentity = new CloudIdentity() + cloudIdentity.setId(cloudRegionId) + cloudIdentity.setIdentityServerType(ServerType."KEYSTONE") + cloudIdentity.setAdminTenant("service") + cloudIdentity.setIdentityAuthenticationType(AuthenticationType.USERNAME_PASSWORD) + String msoMulticloudUserName = UrnPropertiesReader + .getVariable("mso.multicloud.api.password", execution, + "apih") + String msoMulticloudPassword = UrnPropertiesReader + .getVariable("mso.multicloud.api.password", execution, + "abc123") + cloudIdentity.setMsoId(msoMulticloudUserName) + cloudIdentity.setMsoPass(msoMulticloudPassword) + // Get MSB Url + String msbHost = oofUtils.getMsbHost(execution) + String multicloudApiEndpoint = UrnPropertiesReader + .getVariable("mso.multicloud.api.endpoint", execution, + "/api/multicloud-titaniumcloud/v1") + cloudIdentity.setIdentityUrl(msbHost + multicloudApiEndpoint + + "/" + cloudOwner + "/" + + cloudRegionId + "/infra_workload") + utils.log("DEBUG", "****** Cloud IdentityUrl: " + msbHost + multicloudApiEndpoint + + "/" + cloudOwner + "/" + + cloudRegionId + "/infra_workload" + + " *****", "true") + utils.log("DEBUG", "****** CloudIdentity: " + cloudIdentity.toString() + + " *****", "true") + cloudSite.setIdentityService(cloudIdentity) + utils.log("DEBUG", "****** CloudSite: " + cloudSite.toString() + + " *****", "true") // Set cloudsite in catalog DB here - oofUtils.createCloudSiteCatalogDb(cloudSite) + // TODO Get cloudsite and compare, set if not present + oofUtils.createCloudSiteCatalogDb(cloudSite, execution) if (oofDirectives != null && oofDirectives != "") { resource.getHomingSolution().setOofDirectives(oofDirectives) execution.setVariable("oofDirectives", oofDirectives) - utils.log("DEBUG", "***** OofDirectives is: " + oofDirectives + + utils.log("DEBUG", "***** OofDirectives set to: " + oofDirectives + " *****", "true") } @@ -279,6 +310,12 @@ class OofHoming extends AbstractServiceTaskProcessor { resource.getHomingSolution().setVnf(vnf) resource.getHomingSolution().setServiceInstanceId(solution.getJSONArray("identifiers")[0].toString()) } + } else { + utils.log("DEBUG", "ProcessHomingSolution Exception: no matching serviceResourceIds returned in " + + "homing solution", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - " + + "Occurred in Homing ProcessHomingSolution: no matching serviceResourceIds returned") + } } } @@ -308,8 +345,10 @@ class OofHoming extends AbstractServiceTaskProcessor { utils.log("DEBUG", "*** Completed Homing Process Homing Solution ***", isDebugEnabled) } catch (BpmnError b) { + utils.log("DEBUG", "ProcessHomingSolution Error: " + b, isDebugEnabled) throw b } catch (Exception e) { + utils.log("DEBUG", "ProcessHomingSolution Exception: " + e, isDebugEnabled) msoLogger.error(e); exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occurred in Homing ProcessHomingSolution") } @@ -338,4 +377,37 @@ class OofHoming extends AbstractServiceTaskProcessor { */ public void preProcessRequest(DelegateExecution execution) {} // Not Implemented Method + + /** + * Constructs a workflow message callback URL for the specified message type and correlator. + * This type of callback URL is used when a workflow wants an MSO adapter (like the SDNC + * adapter) to call it back. In other words, this is for callbacks internal to the MSO + * complex. Use <code>createWorkflowMessageAdapterCallbackURL</code> if the callback + * will come from outside the MSO complex. + * @param endpoint endpoint address to contruct URL from + * @param messageType the message type (e.g. SDNCAResponse or VNFAResponse) + * @param correlator the correlator value (e.g. a request ID) + */ + public String createHomingCallbackURL(String endpoint, String messageType, String correlator) { + try { + if (endpoint == null || endpoint.isEmpty()) { + ExceptionUtil exceptionUtil = new ExceptionUtil() + exceptionUtil.buildAndThrowWorkflowException(execution, 2000, + 'mso:workflow:message:endpoint was not passed in') + } + + utils.log("DEBUG", "passed in endpoint: " + endpoint + " *****", "true") + + while (endpoint.endsWith('/')) { + endpoint = endpoint.substring(0, endpoint.length() - 1) + } + utils.log("DEBUG", "processed endpoint: " + endpoint + " *****", "true") + + return endpoint + + '/' + UriUtils.encodePathSegment(messageType, 'UTF-8') + + '/' + UriUtils.encodePathSegment(correlator, 'UTF-8') + } catch (Exception ex) { + utils.log("DEBUG", "createCallbackURL Exception: " + ex + " *****", "true") + } + } } diff --git a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy index b1da7cf49b..19d19b8cea 100644 --- a/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy +++ b/bpmn/MSOCommonBPMN/src/main/groovy/org/onap/so/bpmn/common/scripts/OofUtils.groovy @@ -33,22 +33,18 @@ import org.onap.so.bpmn.core.domain.ServiceInstance import org.onap.so.bpmn.core.domain.Subscriber import org.onap.so.bpmn.core.domain.VnfResource import org.onap.so.bpmn.core.json.JsonUtils +import org.onap.so.db.catalog.beans.CloudIdentity import org.onap.so.db.catalog.beans.CloudSite +import org.onap.so.db.catalog.client.CatalogDbClient import org.onap.so.rest.APIResponse import org.onap.so.rest.RESTClient import org.onap.so.rest.RESTConfig import org.springframework.http.HttpEntity import org.springframework.http.HttpHeaders -import org.springframework.http.HttpMethod -import org.springframework.http.ResponseEntity -import org.springframework.http.client.BufferingClientHttpRequestFactory -import org.springframework.http.client.HttpComponentsClientHttpRequestFactory -import org.springframework.web.client.RestTemplate import org.springframework.web.util.UriComponentsBuilder import javax.ws.rs.core.MediaType -import javax.ws.rs.core.Response -import javax.xml.ws.http.HTTPException +import javax.ws.rs.core.UriBuilder import static org.onap.so.bpmn.common.scripts.GenericUtils.* @@ -89,138 +85,152 @@ class OofUtils { utils.log("DEBUG", "Started Building OOF Request", isDebugEnabled) String callbackEndpoint = UrnPropertiesReader.getVariable("mso.oof.callbackEndpoint", execution) utils.log("DEBUG", "mso.oof.callbackEndpoint is: " + callbackEndpoint, isDebugEnabled) - def callbackUrl = utils.createWorkflowMessageAdapterCallbackURL(callbackEndpoint, "oofResponse", requestId) - def transactionId = requestId - //ServiceInstance Info - ServiceInstance serviceInstance = decomposition.getServiceInstance() - def serviceInstanceId = "" - def serviceName = "" - - serviceInstanceId = execution.getVariable("serviceInstanceId") - serviceName = execution.getVariable("subscriptionServiceType") - - if (serviceInstanceId == null || serviceInstanceId == "null") { - utils.log("DEBUG", "Unable to obtain Service Instance Id", isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " + - "obtain Service Instance Id, execution.getVariable(\"serviceInstanceId\") is null") - } - if (serviceName == null || serviceName == "null") { - utils.log("DEBUG", "Unable to obtain Service Name", isDebugEnabled) - exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " + - "obtain Service Name, execution.getVariable(\"subscriptionServiceType\") is null") - } - //Model Info - ModelInfo model = decomposition.getModelInfo() - String modelType = model.getModelType() - String modelInvariantId = model.getModelInvariantUuid() - String modelVersionId = model.getModelUuid() - String modelName = model.getModelName() - String modelVersion = model.getModelVersion() - //Subscriber Info - String subscriberId = "" - String subscriberName = "" - String commonSiteId = "" - if (subscriber != null){ - subscriberId = subscriber.getGlobalId() - subscriberName = subscriber.getName() - commonSiteId = subscriber.getCommonSiteId() - } - - //Determine RequestType - //TODO Figure out better way to determine this - String requestType = "create" - List<Resource> resources = decomposition.getServiceResources() - for(Resource r:resources){ - HomingSolution currentSolution = (HomingSolution) r.getCurrentHomingSolution() - if(currentSolution != null){ - requestType = "speed changed" + try { + def callbackUrl = utils.createHomingCallbackURL(callbackEndpoint, "oofResponse", requestId) + utils.log("DEBUG", "callbackUrl is: " + callbackUrl, isDebugEnabled) + + + def transactionId = requestId + utils.log("DEBUG", "transactionId is: " + transactionId, isDebugEnabled) + //ServiceInstance Info + ServiceInstance serviceInstance = decomposition.getServiceInstance() + def serviceInstanceId = "" + def serviceName = "" + + serviceInstanceId = execution.getVariable("serviceInstanceId") + utils.log("DEBUG", "serviceInstanceId is: " + serviceInstanceId, isDebugEnabled) + serviceName = execution.getVariable("subscriptionServiceType") + utils.log("DEBUG", "serviceName is: " + serviceName, isDebugEnabled) + + if (serviceInstanceId == null || serviceInstanceId == "null") { + utils.log("DEBUG", "Unable to obtain Service Instance Id", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " + + "obtain Service Instance Id, execution.getVariable(\"serviceInstanceId\") is null") + } + if (serviceName == null || serviceName == "null") { + utils.log("DEBUG", "Unable to obtain Service Name", isDebugEnabled) + exceptionUtil.buildAndThrowWorkflowException(execution, 400, "Internal Error - Unable to " + + "obtain Service Name, execution.getVariable(\"subscriptionServiceType\") is null") + } + //Model Info + ModelInfo model = decomposition.getModelInfo() + utils.log("DEBUG", "ModelInfo: " + model.toString(), isDebugEnabled) + String modelType = model.getModelType() + String modelInvariantId = model.getModelInvariantUuid() + String modelVersionId = model.getModelUuid() + String modelName = model.getModelName() + String modelVersion = model.getModelVersion() + //Subscriber Info + String subscriberId = "" + String subscriberName = "" + String commonSiteId = "" + if (subscriber != null) { + subscriberId = subscriber.getGlobalId() + subscriberName = subscriber.getName() + commonSiteId = subscriber.getCommonSiteId() } - } - //Demands - String placementDemands = "" - StringBuilder sb = new StringBuilder() - List<AllottedResource> allottedResourceList = decomposition.getAllottedResources() - List<VnfResource> vnfResourceList = decomposition.getVnfResources() + //Determine RequestType + //TODO Figure out better way to determine this + String requestType = "create" + List<Resource> resources = decomposition.getServiceResources() + for (Resource r : resources) { + HomingSolution currentSolution = (HomingSolution) r.getCurrentHomingSolution() + if (currentSolution != null) { + requestType = "speed changed" + } + } - if (allottedResourceList == null || allottedResourceList.isEmpty() ) { - utils.log("DEBUG", "Allotted Resources List is empty - will try to get service VNFs instead.", - isDebugEnabled) - allottedResourceList = decomposition.getVnfResources() - } + //Demands + String placementDemands = "" + StringBuilder sb = new StringBuilder() + List<AllottedResource> allottedResourceList = decomposition.getAllottedResources() + List<VnfResource> vnfResourceList = decomposition.getVnfResources() - if (allottedResourceList == null || allottedResourceList.isEmpty()) { - utils.log("DEBUG", "Resources List is Empty", isDebugEnabled) - } else { - for (AllottedResource resource : allottedResourceList) { - utils.log("DEBUG", "Allotted Resource: " + resource.toString(), + if (allottedResourceList == null || allottedResourceList.isEmpty()) { + utils.log("DEBUG", "Allotted Resources List is empty - will try to get service VNFs instead.", isDebugEnabled) - def serviceResourceId = resource.getResourceId() - def resourceModelInvariantId = resource.getModelInfo().getModelInvariantUuid() - def resourceModelVersionId = resource.getModelInfo().getModelUuid() - def resourceModelName = resource.getModelInfo().getModelName() - def resourceModelVersion = resource.getModelInfo().getModelVersion() - def resourceModelType = resource.getModelInfo().getModelType() - def tenantId = execution.getVariable("tenantId") - def requiredCandidatesJson = "" - - requiredCandidatesJson = createCandidateJson( - existingCandidates, - excludedCandidates, - requiredCandidates) - - String demand = - " {\n" + - " \"resourceModuleName\": \"${resourceModelName}\",\n" + - " \"serviceResourceId\": \"${serviceResourceId}\",\n" + - " \"tenantId\": \"${tenantId}\",\n" + - " \"resourceModelInfo\": {\n" + - " \"modelInvariantId\": \"${resourceModelInvariantId}\",\n" + - " \"modelVersionId\": \"${resourceModelVersionId}\",\n" + - " \"modelName\": \"${resourceModelName}\",\n" + - " \"modelType\": \"${resourceModelType}\",\n" + - " \"modelVersion\": \"${resourceModelVersion}\",\n" + - " \"modelCustomizationName\": \"\"\n" + - " }" + requiredCandidatesJson + "\n" + - " }," - - placementDemands = sb.append(demand) + } else { + for (AllottedResource resource : allottedResourceList) { + utils.log("DEBUG", "Allotted Resource: " + resource.toString(), + isDebugEnabled) + def serviceResourceId = resource.getResourceId() + def toscaNodeType = resource.getToscaNodeType() + def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1) + def resourceModelInvariantId = resource.getModelInfo().getModelInvariantUuid() + def resourceModelVersionId = resource.getModelInfo().getModelUuid() + def resourceModelName = resource.getModelInfo().getModelName() + def resourceModelVersion = resource.getModelInfo().getModelVersion() + def resourceModelType = resource.getModelInfo().getModelType() + def tenantId = execution.getVariable("tenantId") + def requiredCandidatesJson = "" + + requiredCandidatesJson = createCandidateJson( + existingCandidates, + excludedCandidates, + requiredCandidates) + + String demand = + " {\n" + + " \"resourceModuleName\": \"${resourceModuleName}\",\n" + + " \"serviceResourceId\": \"${serviceResourceId}\",\n" + + " \"tenantId\": \"${tenantId}\",\n" + + " \"resourceModelInfo\": {\n" + + " \"modelInvariantId\": \"${resourceModelInvariantId}\",\n" + + " \"modelVersionId\": \"${resourceModelVersionId}\",\n" + + " \"modelName\": \"${resourceModelName}\",\n" + + " \"modelType\": \"${resourceModelType}\",\n" + + " \"modelVersion\": \"${resourceModelVersion}\",\n" + + " \"modelCustomizationName\": \"\"\n" + + " }" + requiredCandidatesJson + "\n" + + " }," + + placementDemands = sb.append(demand) + } } - for (VnfResource vnfResource : vnfResourceList) { - utils.log("DEBUG", "VNF Resource: " + vnfResource.toString(), + + if (vnfResourceList == null || vnfResourceList.isEmpty()) { + utils.log("DEBUG", "VNF Resources List is empty", isDebugEnabled) - ModelInfo vnfResourceModelInfo = vnfResource.getModelInfo() - def serviceResourceId = vnfResource.getResourceId() - def resourceModelInvariantId = vnfResourceModelInfo.getModelInvariantUuid() - def resourceModelName = vnfResourceModelInfo.getModelName() - def resourceModelVersion = vnfResourceModelInfo.getModelVersion() - def resourceModelVersionId = vnfResourceModelInfo.getModelUuid() - def resourceModelType = vnfResourceModelInfo.getModelType() - def tenantId = execution.getVariable("tenantId") - def requiredCandidatesJson = "" - - - String placementDemand = - " {\n" + - " \"resourceModuleName\": \"${resourceModelName}\",\n" + - " \"serviceResourceId\": \"${serviceResourceId}\",\n" + - " \"tenantId\": \"${tenantId}\",\n" + - " \"resourceModelInfo\": {\n" + - " \"modelInvariantId\": \"${resourceModelInvariantId}\",\n" + - " \"modelVersionId\": \"${resourceModelVersionId}\",\n" + - " \"modelName\": \"${resourceModelName}\",\n" + - " \"modelType\": \"${resourceModelType}\",\n" + - " \"modelVersion\": \"${resourceModelVersion}\",\n" + - " \"modelCustomizationName\": \"\"\n" + - " }" + requiredCandidatesJson + "\n" + - " }," - - placementDemands = sb.append(placementDemand) + } else { + + for (VnfResource vnfResource : vnfResourceList) { + utils.log("DEBUG", "VNF Resource: " + vnfResource.toString(), + isDebugEnabled) + ModelInfo vnfResourceModelInfo = vnfResource.getModelInfo() + def toscaNodeType = vnfResource.getToscaNodeType() + def resourceModuleName = toscaNodeType.substring(toscaNodeType.lastIndexOf(".") + 1) + def serviceResourceId = vnfResource.getResourceId() + def resourceModelInvariantId = vnfResourceModelInfo.getModelInvariantUuid() + def resourceModelName = vnfResourceModelInfo.getModelName() + def resourceModelVersion = vnfResourceModelInfo.getModelVersion() + def resourceModelVersionId = vnfResourceModelInfo.getModelUuid() + def resourceModelType = vnfResourceModelInfo.getModelType() + def tenantId = execution.getVariable("tenantId") + def requiredCandidatesJson = "" + + + String placementDemand = + " {\n" + + " \"resourceModuleName\": \"${resourceModuleName}\",\n" + + " \"serviceResourceId\": \"${serviceResourceId}\",\n" + + " \"tenantId\": \"${tenantId}\",\n" + + " \"resourceModelInfo\": {\n" + + " \"modelInvariantId\": \"${resourceModelInvariantId}\",\n" + + " \"modelVersionId\": \"${resourceModelVersionId}\",\n" + + " \"modelName\": \"${resourceModelName}\",\n" + + " \"modelType\": \"${resourceModelType}\",\n" + + " \"modelVersion\": \"${resourceModelVersion}\",\n" + + " \"modelCustomizationName\": \"\"\n" + + " }" + requiredCandidatesJson + "\n" + + " }," + + placementDemands = sb.append(placementDemand) + } + placementDemands = placementDemands.substring(0, placementDemands.length() - 1) } - placementDemands = placementDemands.substring(0, placementDemands.length() - 1) - } - /* Commenting Out Licensing as OOF doesn't support for Beijing + /* Commenting Out Licensing as OOF doesn't support for Beijing String licenseDemands = "" sb = new StringBuilder() if (vnfResourceList.isEmpty() || vnfResourceList == null) { @@ -265,50 +275,53 @@ class OofUtils { licenseDemands = licenseDemands.substring(0, licenseDemands.length() - 1) }*/ - String request = - "{\n" + - " \"requestInfo\": {\n" + - " \"transactionId\": \"${transactionId}\",\n" + - " \"requestId\": \"${requestId}\",\n" + - " \"callbackUrl\": \"${callbackUrl}\",\n" + - " \"sourceId\": \"so\",\n" + - " \"requestType\": \"${requestType}\"," + - " \"numSolutions\": 1,\n" + - " \"optimizers\": [\"placement\"],\n" + - " \"timeout\": 600\n" + - " },\n" + - " \"placementInfo\": {\n" + - " \"requestParameters\": {\n" + - " \"customerLatitude\": \"${customerLocation.customerLatitude}\",\n" + - " \"customerLongitude\": \"${customerLocation.customerLongitude}\",\n" + - " \"customerName\": \"${customerLocation.customerName}\"\n" + - " }," + - " \"subscriberInfo\": { \n" + - " \"globalSubscriberId\": \"${subscriberId}\",\n" + - " \"subscriberName\": \"${subscriberName}\",\n" + - " \"subscriberCommonSiteId\": \"${commonSiteId}\"\n" + - " },\n" + - " \"placementDemands\": [\n" + - " ${placementDemands}\n" + - " ]\n" + - " },\n" + - " \"serviceInfo\": {\n" + - " \"serviceInstanceId\": \"${serviceInstanceId}\",\n" + - " \"serviceName\": \"${serviceName}\",\n" + - " \"modelInfo\": {\n" + - " \"modelType\": \"${modelType}\",\n" + - " \"modelInvariantId\": \"${modelInvariantId}\",\n" + - " \"modelVersionId\": \"${modelVersionId}\",\n" + - " \"modelName\": \"${modelName}\",\n" + - " \"modelVersion\": \"${modelVersion}\",\n" + - " \"modelCustomizationName\": \"\"\n" + - " }\n" + - " }\n" + - "}" - - - utils.log("DEBUG", "Completed Building OOF Request", isDebugEnabled) - return request + String request = + "{\n" + + " \"requestInfo\": {\n" + + " \"transactionId\": \"${transactionId}\",\n" + + " \"requestId\": \"${requestId}\",\n" + + " \"callbackUrl\": \"${callbackUrl}\",\n" + + " \"sourceId\": \"so\",\n" + + " \"requestType\": \"${requestType}\"," + + " \"numSolutions\": 1,\n" + + " \"optimizers\": [\"placement\"],\n" + + " \"timeout\": 600\n" + + " },\n" + + " \"placementInfo\": {\n" + + " \"requestParameters\": {\n" + + " \"customerLatitude\": \"${customerLocation.customerLatitude}\",\n" + + " \"customerLongitude\": \"${customerLocation.customerLongitude}\",\n" + + " \"customerName\": \"${customerLocation.customerName}\"\n" + + " }," + + " \"subscriberInfo\": { \n" + + " \"globalSubscriberId\": \"${subscriberId}\",\n" + + " \"subscriberName\": \"${subscriberName}\",\n" + + " \"subscriberCommonSiteId\": \"${commonSiteId}\"\n" + + " },\n" + + " \"placementDemands\": [\n" + + " ${placementDemands}\n" + + " ]\n" + + " },\n" + + " \"serviceInfo\": {\n" + + " \"serviceInstanceId\": \"${serviceInstanceId}\",\n" + + " \"serviceName\": \"${serviceName}\",\n" + + " \"modelInfo\": {\n" + + " \"modelType\": \"${modelType}\",\n" + + " \"modelInvariantId\": \"${modelInvariantId}\",\n" + + " \"modelVersionId\": \"${modelVersionId}\",\n" + + " \"modelName\": \"${modelName}\",\n" + + " \"modelVersion\": \"${modelVersion}\",\n" + + " \"modelCustomizationName\": \"\"\n" + + " }\n" + + " }\n" + + "}" + + + utils.log("DEBUG", "Completed Building OOF Request", isDebugEnabled) + return request + } catch (Exception ex) { + utils.log("DEBUG", "buildRequest Exception: " + ex, isDebugEnabled) + } } /** @@ -486,31 +499,29 @@ class OofUtils { * @return void */ Void createCloudSiteCatalogDb(CloudSite cloudSite, DelegateExecution execution) { - + def isDebugEnabled = execution.getVariable("isDebugLogEnabled") String endpoint = UrnPropertiesReader.getVariable("mso.catalog.db.spring.endpoint", execution) String auth = UrnPropertiesReader.getVariable("mso.db.auth", execution) - String uri = "/cloudSite" - - HttpHeaders headers = new HttpHeaders() - - headers.set(HttpHeaders.AUTHORIZATION, auth) - headers.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON) - headers.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + CloudSite getCloudsite = null + + CatalogDbClient catalogDbClient = new CatalogDbClient(endpoint, auth) + try { + getCloudsite = catalogDbClient.getCloudSite(cloudSite.getId().toString()) + } catch (Exception e) { + e = null + utils.log("DEBUG", "Could not find cloudsite : " + cloudSite.getId(), isDebugEnabled) + utils.log("DEBUG", "Creating cloudSite: " + cloudSite.toString(), isDebugEnabled) + } + if (getCloudsite?.getId() != cloudSite.getId()) { + catalogDbClient.postCloudSite(cloudSite) + } + } - UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(endpoint + uri) - HttpEntity<CloudSite> request = new HttpEntity<CloudSite>(cloudSite, headers) - RESTConfig config = new RESTConfig(endpoint + uri) - RESTClient client = new RESTClient(config).addAuthorizationHeader(auth). - addHeader(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON).addHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) - APIResponse response = client.httpPost(request.getBody().toString()) + String getMsbHost(DelegateExecution execution) { + String msbHost = UrnPropertiesReader.getVariable("mso.msb.host", execution, "msb-iag.onap") - int responseCode = response.getStatusCode() - logDebug("CatalogDB response code is: " + responseCode, isDebugEnabled) - String syncResponse = response.getResponseBodyAsString() - logDebug("CatalogDB response is: " + syncResponse, isDebugEnabled) + Integer msbPort = UrnPropertiesReader.getVariable("mso.msb.port", execution, "80").toInteger() - if(responseCode != 202){ - exceptionUtil.buildAndThrowWorkflowException(execution, responseCode, "Received a Bad Sync Response from CatalogDB.") - } + return UriBuilder.fromPath("").host(msbHost).port(msbPort).scheme("http").build().toString() } } diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/SpringContextHelper.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/SpringContextHelper.java deleted file mode 100644 index edc544d939..0000000000 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/common/SpringContextHelper.java +++ /dev/null @@ -1,41 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP - SO - * ================================================================================ - * Copyright (C) 2017 - 2018 AT&T Intellectual Property. All rights reserved. - * ================================================================================ - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============LICENSE_END========================================================= - */ - -package org.onap.so.bpmn.common; - -import org.springframework.beans.BeansException; -import org.springframework.context.ApplicationContext; -import org.springframework.context.ApplicationContextAware; -import org.springframework.stereotype.Component; - -@Component -public class SpringContextHelper implements ApplicationContextAware { - - private static ApplicationContext context; - - @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { - context = applicationContext; - } - - public static ApplicationContext getAppContext() { - return context; - } -} diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayer.java b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayer.java index d463fde09c..1e77c35ee3 100644 --- a/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayer.java +++ b/bpmn/MSOCommonBPMN/src/main/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayer.java @@ -22,6 +22,7 @@ package org.onap.so.bpmn.servicedecomposition.tasks; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Optional; @@ -84,6 +85,8 @@ import org.springframework.stereotype.Component; @Component("BBInputSetupMapperLayer") public class BBInputSetupMapperLayer { + private static final String USER_PARAM_NAME_KEY = "name"; + private static final String USER_PARAM_VALUE_KEY = "value"; private static final MsoLogger msoLogger = MsoLogger.getMsoLogger(MsoLogger.Catalog.BPEL, BBInputSetupMapperLayer.class); @@ -332,6 +335,10 @@ public class BBInputSetupMapperLayer { if (null != requestParameters) { context.setSubscriptionServiceType(requestParameters.getSubscriptionServiceType()); context.setRequestParameters(this.mapRequestParameters(requestDetails.getRequestParameters())); + context.setUserParams(this.mapNameValueUserParams(requestDetails.getRequestParameters())); + } + if (requestDetails.getConfigurationParameters() != null) { + context.setConfigurationParameters(requestDetails.getConfigurationParameters()); } return context; } @@ -344,6 +351,20 @@ public class BBInputSetupMapperLayer { requestParams.setPayload(requestParameters.getPayload()); return requestParams; } + + protected HashMap<String,String> mapNameValueUserParams(org.onap.so.serviceinstancebeans.RequestParameters requestParameters) { + HashMap<String,String> userParamsResult = new HashMap<String,String>(); + if (requestParameters.getUserParams() != null) { + List<Map<String, Object>> userParams = requestParameters.getUserParams(); + for (Map<String, Object> userParamsMap : userParams) { + if ( userParamsMap.containsKey(USER_PARAM_NAME_KEY) && (userParamsMap.get(USER_PARAM_NAME_KEY) instanceof String) + && userParamsMap.containsKey(USER_PARAM_VALUE_KEY) && (userParamsMap.get(USER_PARAM_VALUE_KEY) instanceof String)) { + userParamsResult.put((String) userParamsMap.get(USER_PARAM_NAME_KEY), (String) userParamsMap.get(USER_PARAM_VALUE_KEY)); + } + } + } + return userParamsResult; + } protected OrchestrationContext mapOrchestrationContext(RequestDetails requestDetails) { OrchestrationContext context = new OrchestrationContext(); diff --git a/bpmn/MSOCommonBPMN/src/main/resources/META-INF/processes.xml b/bpmn/MSOCommonBPMN/src/main/resources/META-INF/processes.xml deleted file mode 100644 index 33c8cb1ac0..0000000000 --- a/bpmn/MSOCommonBPMN/src/main/resources/META-INF/processes.xml +++ /dev/null @@ -1,31 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!-- - ============LICENSE_START======================================================= - ONAP SO - ================================================================================ - 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========================================================= - --> - -<process-application - xmlns="http://www.camunda.org/schema/1.0/ProcessApplication" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> - - <process-archive name="MSOCommonBPMN"> - <properties> - <property name="isDeleteUponUndeploy">false</property> - <property name="isScanForProcessDefinitions">true</property> - </properties> - </process-archive> - -</process-application> diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy new file mode 100644 index 0000000000..5058961992 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/AllottedResourceUtilsTest.groovy @@ -0,0 +1,39 @@ +package org.onap.so.bpmn.common.scripts + +import static org.junit.Assert.assertEquals +import static org.mockito.Matchers.eq +import static org.mockito.Mockito.mock +import static org.mockito.Mockito.when + +import org.camunda.bpm.engine.delegate.DelegateExecution +import org.camunda.bpm.extension.mockito.delegate.DelegateExecutionFake +import org.junit.Test +import org.onap.so.bpmn.core.UrnPropertiesReader +import org.onap.so.client.aai.entities.uri.AAIResourceUri +import org.springframework.core.env.Environment + +class AllottedResourceUtilsTest { + + + @Test + public void createARUrlTest() { + AllottedResourceUtils utils = new AllottedResourceUtils(mock(AbstractServiceTaskProcessor.class)) + DelegateExecution execution = new DelegateExecutionFake() + String allottedResourceId = "my-id" + UrnPropertiesReader reader = new UrnPropertiesReader() + Environment env = mock(Environment.class); + + when(env.getProperty(eq("mso.workflow.global.default.aai.version"))).thenReturn("14") + when(env.getProperty(eq("aai.endpoint"))).thenReturn("http://localhost:8080") + + + reader.setEnvironment(env) + + + AAIResourceUri uri = mock(AAIResourceUri.class) + when(uri.build()).thenReturn(new URI("/business/customers/customer/1/service-subscriptions/service-subscription/2/service-instances/service-instance/3")) + String actual = utils.createARUrl(execution, uri, allottedResourceId) + + assertEquals("http://localhost:8080/aai/v14/business/customers/customer/1/service-subscriptions/service-subscription/2/service-instances/service-instance/3/allotted-resources/allotted-resource/my-id", actual) + } +} diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupTenantTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupTenantTest.groovy index 1b76f5cb3f..5a01c83a80 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupTenantTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/ConfirmVolumeGroupTenantTest.groovy @@ -77,7 +77,7 @@ class ConfirmVolumeGroupTenantTest extends MsoGroovyTest { when(mockExecution.getVariable("aicCloudRegion")).thenReturn('aicCloudRegion') when(mockExecution.getVariable("isDebugLogEnabled")).thenReturn('true') when(mockExecution.getVariable("mso.workflow.global.default.aai.version")).thenReturn('8') - when(mockExecution.getVariable("mso.workflow.default.aai.v8.cloud-region.uri")).thenReturn('/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic') + when(mockExecution.getVariable("mso.workflow.default.aai.v8.cloud-region.uri")).thenReturn('/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner') when(mockExecution.getVariable("mso.workflow.global.default.aai.namespace")).thenReturn('http://org.openecomp.aai.inventory/') @@ -89,17 +89,17 @@ class ConfirmVolumeGroupTenantTest extends MsoGroovyTest { /* Mockito.verify(mockExecution, times(5)).setVariable(captor.capture(), captor.capture())*/ verify(mockExecution).setVariable("prefix", "CVGT_") verify(mockExecution).setVariable("queryVolumeGroupResponseCode", 200) - verify(mockExecution).setVariable("queryAAIVolumeGroupResponse", "<volume-group xmlns=\"http://org.openecomp.aai.inventory/v10\"><volume-group-id>17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c</volume-group-id><volume-group-name>MSOTESTVOL103a-vSAMP12_base_module-0_vol</volume-group-name><heat-stack-id>9d1f53e3-3158-44f8-8032-a6bf40bbc9db</heat-stack-id><vnf-type>pcrf-capacity</vnf-type><orchestration-status>Active</orchestration-status><resource-version>0000020</resource-version><relationship-list><relationship><related-to>tenant</related-to><relationship-data><relationship-key>cloud-region.cloud-owner</relationship-key><relationship-value>att-aic</relationship-value></relationship-data><relationship-data><relationship-key>cloud-region.cloud-region-id</relationship-key><relationship-value>RegionOne</relationship-value></relationship-data><relationship-data><relationship-key>tenant.tenant-id</relationship-key><relationship-value>22eb191dd41a4f3c9be370fc638322f4</relationship-value></relationship-data></relationship></relationship-list></volume-group>") + verify(mockExecution).setVariable("queryAAIVolumeGroupResponse", "<volume-group xmlns=\"http://org.openecomp.aai.inventory/v10\"><volume-group-id>17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c</volume-group-id><volume-group-name>MSOTESTVOL103a-vSAMP12_base_module-0_vol</volume-group-name><heat-stack-id>9d1f53e3-3158-44f8-8032-a6bf40bbc9db</heat-stack-id><vnf-type>pcrf-capacity</vnf-type><orchestration-status>Active</orchestration-status><resource-version>0000020</resource-version><relationship-list><relationship><related-to>tenant</related-to><relationship-data><relationship-key>cloud-region.cloud-owner</relationship-key><relationship-value>CloudOwner</relationship-value></relationship-data><relationship-data><relationship-key>cloud-region.cloud-region-id</relationship-key><relationship-value>RegionOne</relationship-value></relationship-data><relationship-data><relationship-key>tenant.tenant-id</relationship-key><relationship-value>22eb191dd41a4f3c9be370fc638322f4</relationship-value></relationship-data></relationship></relationship-list></volume-group>") verify(mockExecution).setVariable("tenantIdsMatch", false) verify(mockExecution).setVariable("groupNamesMatch", false) } private void mockData() { - stubFor(get(urlMatching("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/att-aic/aicCloudRegion/volume-groups/volume-group/testVolumeGroupId")) + stubFor(get(urlMatching("/aai/v8/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/aicCloudRegion/volume-groups/volume-group/testVolumeGroupId")) .willReturn(aResponse() .withStatus(200) - .withBody("<volume-group xmlns=\"http://org.openecomp.aai.inventory/v10\"><volume-group-id>17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c</volume-group-id><volume-group-name>MSOTESTVOL103a-vSAMP12_base_module-0_vol</volume-group-name><heat-stack-id>9d1f53e3-3158-44f8-8032-a6bf40bbc9db</heat-stack-id><vnf-type>pcrf-capacity</vnf-type><orchestration-status>Active</orchestration-status><resource-version>0000020</resource-version><relationship-list><relationship><related-to>tenant</related-to><relationship-data><relationship-key>cloud-region.cloud-owner</relationship-key><relationship-value>att-aic</relationship-value></relationship-data><relationship-data><relationship-key>cloud-region.cloud-region-id</relationship-key><relationship-value>RegionOne</relationship-value></relationship-data><relationship-data><relationship-key>tenant.tenant-id</relationship-key><relationship-value>22eb191dd41a4f3c9be370fc638322f4</relationship-value></relationship-data></relationship></relationship-list></volume-group>"))) + .withBody("<volume-group xmlns=\"http://org.openecomp.aai.inventory/v10\"><volume-group-id>17ef4658-bd1f-4ef0-9ca0-ea76e2bf122c</volume-group-id><volume-group-name>MSOTESTVOL103a-vSAMP12_base_module-0_vol</volume-group-name><heat-stack-id>9d1f53e3-3158-44f8-8032-a6bf40bbc9db</heat-stack-id><vnf-type>pcrf-capacity</vnf-type><orchestration-status>Active</orchestration-status><resource-version>0000020</resource-version><relationship-list><relationship><related-to>tenant</related-to><relationship-data><relationship-key>cloud-region.cloud-owner</relationship-key><relationship-value>CloudOwner</relationship-value></relationship-data><relationship-data><relationship-key>cloud-region.cloud-region-id</relationship-key><relationship-value>RegionOne</relationship-value></relationship-data><relationship-data><relationship-key>tenant.tenant-id</relationship-key><relationship-value>22eb191dd41a4f3c9be370fc638322f4</relationship-value></relationship-data></relationship></relationship-list></volume-group>"))) } private ExecutionEntity setupMock() { diff --git a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy index dfcf69a931..968a694e11 100644 --- a/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy +++ b/bpmn/MSOCommonBPMN/src/test/groovy/org/onap/so/bpmn/common/scripts/MsoUtilsTest.groovy @@ -287,5 +287,13 @@ class MsoUtilsTest { } } - + @Test + public void testGetLowestUnusedIndex() { + def responseAsString = getFile("vfModuleCount.xml") + def index = utils.getLowestUnusedIndex(responseAsString) + println " lowest module count test: " + println " actual - " + index + println " expected - " + "14" + assertEquals("expected vs actual", "14", index) + } }
\ No newline at end of file diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/mock/StubResponseAAI.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/mock/StubResponseAAI.java index 38be9f3790..79b0d33062 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/mock/StubResponseAAI.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/mock/StubResponseAAI.java @@ -505,7 +505,7 @@ public class StubResponseAAI { } public static void MockGetNetworkCloudRegion(String responseFile, String cloudRegion) { - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/"+cloudRegion)) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/"+cloudRegion)) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "text/xml") @@ -529,7 +529,7 @@ public class StubResponseAAI { } public static void MockGetNetworkCloudRegion_404(String cloudRegion) { - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/"+cloudRegion)) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/"+cloudRegion)) .willReturn(aResponse() .withStatus(404))); } @@ -722,12 +722,12 @@ public class StubResponseAAI { .withStatus(200) .withHeader("Content-Type", "text/xml") .withBodyFile("VfModularity/ConfirmVolumeGroupTenantResponse.xml"))); - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/MDTWNJ21/volume-groups/volume-group/78987")) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/MDTWNJ21/volume-groups/volume-group/78987")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "text/xml") .withBodyFile("VfModularity/VolumeGroup.xml"))); - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/volume-groups/volume-group/78987")) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/AAIAIC25/volume-groups/volume-group/78987")) .willReturn(aResponse() .withStatus(200) .withHeader("Content-Type", "text/xml") @@ -757,7 +757,7 @@ public class StubResponseAAI { */ public static void MockGetCloudRegion(String cloudRegionId, int statusCode, String responseFile) { - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId)) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId)) .willReturn(aResponse() .withStatus(statusCode) .withHeader("Content-Type", "text/xml") @@ -772,7 +772,7 @@ public class StubResponseAAI { } public static void MockGetVolumeGroupById(String cloudRegionId, String volumeGroupId, String responseFile, int responseCode) { - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId)) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId)) .willReturn(aResponse() .withStatus(responseCode) .withHeader("Content-Type", "text/xml") @@ -780,7 +780,7 @@ public class StubResponseAAI { } public static void MockPutVolumeGroupById(String cloudRegionId, String volumeGroupId, String responseFile, int statusCode) { - stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId)) + stubFor(put(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId)) .willReturn(aResponse() .withStatus(statusCode) .withHeader("Content-Type", "text/xml") @@ -788,7 +788,7 @@ public class StubResponseAAI { } public static void MockGetVolumeGroupByName(String cloudRegionId, String volumeGroupName, String responseFile, int statusCode) { - stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups[?]volume-group-name=" + volumeGroupName)) + stubFor(get(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups[?]volume-group-name=" + volumeGroupName)) .willReturn(aResponse() .withStatus(statusCode) .withHeader("Content-Type", "text/xml") @@ -796,19 +796,19 @@ public class StubResponseAAI { } public static void MockDeleteVolumeGroupById(String cloudRegionId, String volumeGroupId, String resourceVersion, int statusCode) { - stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId + "[?]resource-version=" + resourceVersion)) + stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId + "[?]resource-version=" + resourceVersion)) .willReturn(aResponse() .withStatus(statusCode))); } public static void MockGetVolumeGroupByName_404(String cloudRegionId, String volumeGroupName) { - stubFor(get(urlMatching("/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups[?]volume-group-name=" + volumeGroupName)) + stubFor(get(urlMatching("/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups[?]volume-group-name=" + volumeGroupName)) .willReturn(aResponse() .withStatus(404))); } public static void MockDeleteVolumeGroup(String cloudRegionId, String volumeGroupId, String resourceVersion) { - stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId + "[?]resource-version=" + resourceVersion)) + stubFor(delete(urlMatching("/aai/v[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/" + cloudRegionId + "/volume-groups/volume-group/" + volumeGroupId + "[?]resource-version=" + resourceVersion)) .willReturn(aResponse() .withStatus(200))); } @@ -913,7 +913,7 @@ public class StubResponseAAI { } public static void MockGetDefaultCloudRegionByCloudRegionId(String cloudRegionId, String responseFile, int statusCode) { - stubFor(get(urlMatching("/aai/v1[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/att-aic/"+cloudRegionId + ".*")) + stubFor(get(urlMatching("/aai/v1[0-9]+/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/"+cloudRegionId + ".*")) .willReturn(aResponse() .withStatus(statusCode) .withHeader("Content-Type", "application/json; charset=utf-8") diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayerTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayerTest.java index 94dbbf427c..1babac68ca 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayerTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupMapperLayerTest.java @@ -23,6 +23,8 @@ package org.onap.so.bpmn.servicedecomposition.tasks; import static com.shazam.shazamcrest.MatcherAssert.assertThat; import static com.shazam.shazamcrest.matcher.Matchers.sameBeanAs; import static org.hamcrest.CoreMatchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; import java.io.File; import java.io.IOException; @@ -33,7 +35,6 @@ import java.util.List; import java.util.Map; import org.junit.Test; -import org.mockito.InjectMocks; import org.onap.so.bpmn.servicedecomposition.bbobjects.CloudRegion; import org.onap.so.bpmn.servicedecomposition.bbobjects.Collection; import org.onap.so.bpmn.servicedecomposition.bbobjects.Configuration; @@ -636,4 +637,20 @@ public class BBInputSetupMapperLayerTest { assertThat(actual, sameBeanAs(expected)); } + + @Test + public void testMapNameValueUserParams() throws IOException { + RequestDetails requestDetails = mapper.readValue(new File(RESOURCE_PATH + "RequestDetailsInput_mapReqContext.json"), RequestDetails.class); + HashMap<String,String> actual = bbInputSetupMapperLayer.mapNameValueUserParams(requestDetails.getRequestParameters()); + + assertTrue(actual.containsKey("name1")); + assertTrue(actual.containsValue("value1")); + assertTrue(actual.get("name1").equals("value1")); + assertTrue(actual.containsKey("name2")); + assertTrue(actual.containsValue("value2")); + assertTrue(actual.get("name2").equals("value2")); + assertFalse(actual.containsKey("ignore")); + assertFalse(actual.containsValue("ignore")); + } + } diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java index eed4b1411f..0db2f9fc12 100644 --- a/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java +++ b/bpmn/MSOCommonBPMN/src/test/java/org/onap/so/bpmn/servicedecomposition/tasks/BBInputSetupTest.java @@ -118,7 +118,7 @@ public class BBInputSetupTest { private static final String RESOURCE_PATH = "src/test/resources/__files/ExecuteBuildingBlock/"; protected ObjectMapper mapper = new ObjectMapper(); - private static final String CLOUD_OWNER = "att-aic"; + private static final String CLOUD_OWNER = "CloudOwner"; @Spy private BBInputSetup SPY_bbInputSetup = new BBInputSetup(); diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockCMExpected.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockCMExpected.json index 60dd880040..a53ed4dfde 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockCMExpected.json +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockCMExpected.json @@ -1,6 +1,7 @@ { "requestContext": { "source": "VID", + "user-params": {}, "mso-request-id": "requestId", "action": "createInstance", "requestParameters": { @@ -14,7 +15,7 @@ }, "cloudRegion": { "lcp-cloud-region-id" : "myRegionId", - "cloud-owner": "att-aic" + "cloud-owner": "CloudOwner" }, "userInput": null, "customer": { diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockExpected.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockExpected.json index cf65143c9a..5eb9a26901 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockExpected.json +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/GeneralBuildingBlockExpected.json @@ -5,12 +5,35 @@ "requestor-id": "requestorId", "mso-request-id": "requestId", "subscription-service-type": "subscriptionServiceType", - "user-params": null, + "user-params": { + "name1": "value1", + "name2": "value2" + }, "action": "createInstance", "callback-url": "callbackURL", "requestParameters": { - "subscriptionServiceType": "subscriptionServiceType" - } + "subscriptionServiceType": "subscriptionServiceType", + "userParams": [ + { + "name": "name1", + "value": "value1" + }, + { + "name": "name2", + "value": "value2" + }, + { + "ignore": "false", + "skip": "ignore" + } + ] + }, + "configurationParameters": [ + { + "availability-zone":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]", + "xtz-123":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]" + } + ] }, "orchContext": { "is-rollback-enabled": false diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestContextExpected.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestContextExpected.json index 6f82a9dd75..906903e0b2 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestContextExpected.json +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestContextExpected.json @@ -2,11 +2,34 @@ "product-family-id": "productFamilyId", "source": "source", "requestor-id": "requestorId", - "subscription-service-type": "subscriptionServiceType", - "user-params": null, + "subscription-service-type": "subscriptionServiceType", "action": null, "callback-url": "callbackURL", + "user-params": { + "name1": "value1", + "name2": "value2" + }, "requestParameters": { - "subscriptionServiceType": "subscriptionServiceType" - } + "subscriptionServiceType": "subscriptionServiceType", + "userParams": [ + { + "name": "name1", + "value": "value1" + }, + { + "name": "name2", + "value": "value2" + }, + { + "ignore": "false", + "skip": "ignore" + } + ] + }, + "configurationParameters": [ + { + "availability-zone":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]", + "xtz-123":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]" + } + ] } diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestDetailsInput_mapReqContext.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestDetailsInput_mapReqContext.json index e91875135b..9afbdd9150 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestDetailsInput_mapReqContext.json +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/ExecuteBuildingBlock/RequestDetailsInput_mapReqContext.json @@ -7,7 +7,28 @@ "requestorId": "requestorId" }, "requestParameters": { - "subscriptionServiceType": "subscriptionServiceType" - } + "subscriptionServiceType": "subscriptionServiceType", + "userParams": [ + { + "name": "name1", + "value": "value1" + }, + { + "name": "name2", + "value": "value2" + }, + { + "ignore": "false", + "skip": "ignore" + } + ] + + }, + "configurationParameters": [ + { + "availability-zone":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]", + "xtz-123":"$.vnf-topology.vnf-resource-assignments.availability-zones.availability-zone[0]" + } + ] } diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml index 4167e2e87d..dff05c908a 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai-volume-group-id-info.xml @@ -11,7 +11,7 @@ <tns:related-to>tenant</tns:related-to> <tns:relationship-data> <tns:relationship-key>cloud-region.cloud-owner</tns:relationship-key> - <tns:relationship-value>att-aic</tns:relationship-value> + <tns:relationship-value>CloudOwner</tns:relationship-value> </tns:relationship-data> <tns:relationship-data> <tns:relationship-key>cloud-region.cloud-region-id</tns:relationship-key> diff --git a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/resources/e2e-complex.json b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/resources/e2e-complex.json index 21bacbd5ce..e3d830e978 100644 --- a/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/resources/e2e-complex.json +++ b/bpmn/MSOCommonBPMN/src/test/resources/__files/aai/resources/e2e-complex.json @@ -547,11 +547,11 @@ }, { "related-to": "cloud-region", - "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/mtcnj2", + "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/mtcnj2", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", - "relationship-value": "att-aic" + "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", @@ -567,11 +567,11 @@ }, { "related-to": "oam-network", - "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/oam-networks/oam-network/f9263cat-4eaa-43a0-bea4-adcf6e123456", + "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/AAIAIC25/oam-networks/oam-network/f9263cat-4eaa-43a0-bea4-adcf6e123456", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", - "relationship-value": "att-aic" + "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", @@ -591,11 +591,11 @@ }, { "related-to": "oam-network", - "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/oam-networks/oam-network/b9263fab-4eaa-43a0-bea4-adcf6e999999", + "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/AAIAIC25/oam-networks/oam-network/b9263fab-4eaa-43a0-bea4-adcf6e999999", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", - "relationship-value": "att-aic" + "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", @@ -615,11 +615,11 @@ }, { "related-to": "oam-network", - "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/oam-networks/oam-network/cf33dc95-c5d2-48fd-8078-fd949363f63b", + "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/AAIAIC25/oam-networks/oam-network/cf33dc95-c5d2-48fd-8078-fd949363f63b", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", - "relationship-value": "att-aic" + "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", @@ -639,11 +639,11 @@ }, { "related-to": "availability-zone", - "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/availability-zones/availability-zone/mtcnj-esx-az01", + "related-link": "https://localhost:8443/aai/v9/cloud-infrastructure/cloud-regions/cloud-region/CloudOwner/AAIAIC25/availability-zones/availability-zone/mtcnj-esx-az01", "relationship-data": [ { "relationship-key": "cloud-region.cloud-owner", - "relationship-value": "att-aic" + "relationship-value": "CloudOwner" }, { "relationship-key": "cloud-region.cloud-region-id", diff --git a/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml b/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml new file mode 100644 index 0000000000..b7dee68a77 --- /dev/null +++ b/bpmn/MSOCommonBPMN/src/test/resources/vfModuleCount.xml @@ -0,0 +1,44 @@ +<vfModules> + <vf-module> + <module-index>0</module-index> + </vf-module> + <vf-module> + <module-index>1</module-index> + </vf-module> + <vf-module> + <module-index>2</module-index> + </vf-module> + <vf-module> + <module-index>3</module-index> + </vf-module> + <vf-module> + <module-index>4</module-index> + </vf-module> + <vf-module> + <module-index>5</module-index> + </vf-module> + <vf-module> + <module-index>6</module-index> + </vf-module> + <vf-module> + <module-index>7</module-index> + </vf-module> + <vf-module> + <module-index>8</module-index> + </vf-module> + <vf-module> + <module-index>9</module-index> + </vf-module> + <vf-module> + <module-index>10</module-index> + </vf-module> + <vf-module> + <module-index>11</module-index> + </vf-module> + <vf-module> + <module-index>12</module-index> + </vf-module> + <vf-module> + <module-index>13</module-index> + </vf-module> +</vfModules>
\ No newline at end of file |