From fa84c610d97ea983203fa0e79635b7167578d745 Mon Sep 17 00:00:00 2001 From: Sonali Das Date: Wed, 13 Feb 2019 16:28:02 -0500 Subject: Support multiple Ansible servers Issue-ID: APPC-1364 Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa Signed-off-by: Sonali Das Review Comment update Issue-ID: APPC-1364 Change-Id: I03fa97d60c6497218c14b53531c2dea69c7fba34 Signed-off-by: Sonali Das Review Comment update Issue-ID: APPC-1364 Change-Id: I03fa97d60c6497218c14b53531c2dea69c7fba34 Signed-off-by: Sonali Das Support multiple Ansible servers Issue-ID: APPC-1364 Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa Signed-off-by: Sonali Das Support multiple Ansible servers Issue-ID: APPC-1364 Change-Id: I63cf89f5964bcfaba7d1f0b0eac2477f827b69fa Signed-off-by: Sonali Das --- .../artifact/handler/node/ArtifactHandlerNode.java | 278 +++++++++++++-------- .../handler/utils/SdcArtifactHandlerConstants.java | 4 +- .../handler/node/ArtifactHandlerNodeTest.java | 145 +++++++++++ 3 files changed, 320 insertions(+), 107 deletions(-) (limited to 'appc-inbound/appc-artifact-handler/provider/src') diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java index 0b8aa5f81..b2cc984fb 100644 --- a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java +++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java @@ -81,6 +81,7 @@ import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.V import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.VNF_TYPE; import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.URL; import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.OPENSTACK; +import static org.onap.appc.artifact.handler.utils.SdcArtifactHandlerConstants.ANSIBLE; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; @@ -104,6 +105,11 @@ import org.onap.ccsdk.sli.core.sli.SvcLogicJavaPlugin; import org.onap.sdnc.config.params.transformer.tosca.ArtifactProcessorImpl; import org.onap.sdnc.config.params.transformer.tosca.exceptions.ArtifactProcessorException; +import org.json.JSONException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + public class ArtifactHandlerNode implements SvcLogicJavaPlugin { private static final EELFLogger log = EELFManager.getInstance().getLogger(ArtifactHandlerNode.class); @@ -120,7 +126,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { return; } String postData = inParams.get("postData"); - if (postData == null || postData.isEmpty()) { + if ( StringUtils.isBlank(postData)) { return; } try { @@ -129,7 +135,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { storeUpdateSdcArtifacts(input); } catch (Exception e) { log.error("Error when processing artifact", e); - throw new ArtifactProcessorException("Error occurred while processing artifact", e); + throw new ArtifactProcessorException("Error occurred while processing artifact, " + e.getMessage(), e); } } @@ -139,35 +145,113 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { JSONObject requestInfo = (JSONObject) postDataJson.get(REQUEST_INFORMATION); JSONObject documentInfo = (JSONObject) postDataJson.get(DOCUMENT_PARAMETERS); String artifactName = documentInfo.getString(ARTIFACT_NAME); - if (artifactName != null) { - updateStoreArtifacts(requestInfo, documentInfo); - if (artifactName.toLowerCase().startsWith(REFERENCE)) { - return storeReferenceData(requestInfo, documentInfo); - } else if (artifactName.toLowerCase().startsWith(PD)) { - return createDataForPD(requestInfo, documentInfo); - } - } else { - throw new ArtifactHandlerInternalException("Missing Artifact Name for Request: " - + requestInfo.getString(REQUEST_ID)); + if (StringUtils.isBlank(artifactName)) + throw new ArtifactHandlerInternalException("Missing Artifact Name "); + + if (artifactName.toLowerCase().startsWith(ANSIBLE)) { + validateAnsibleAdminArtifact(documentInfo); + log.info("validateAnsibleAdminArtifact sucessfully done"); } + + updateStoreArtifacts(requestInfo, documentInfo); + if (artifactName.toLowerCase().startsWith(REFERENCE)) { + return storeReferenceData(requestInfo, documentInfo); + } else if (artifactName.toLowerCase().startsWith(PD)) { + return createDataForPD(requestInfo, documentInfo); + } + } catch (Exception e) { log.error("Error while processing request with id: " - + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e); - + + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e); throw new ArtifactHandlerInternalException("Error while processing request with id: " - + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID), e); + + ((JSONObject) postDataJson.get(REQUEST_INFORMATION)).getString(REQUEST_ID) + + ", Exception Message : " + e.getMessage(), e); } return false; } + public void validateAnsibleAdminArtifact(JSONObject documentInfo) throws ArtifactHandlerInternalException { + String fn = "ArtifactHandlerNode.validateAnsibleAdminArtifact"; + String artifactName = documentInfo.getString(ARTIFACT_NAME); + log.info(fn + ": Received Admin File Name: " + artifactName + " ArtifactCotent : " + + documentInfo.getString(ARTIFACT_CONTENTS)); + try { + ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil(); + String contentString = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS)); + JSONObject artifact = new JSONObject(contentString); + JSONArray fqdnList = artifact.getJSONArray("fqdn-list"); + Map> artifactMap = new HashMap<>(); + + + for (int i = 0; i < fqdnList.length(); i++) { + JSONObject fqdn = fqdnList.getJSONObject(i); + List valuesforFQDN = populateValueForFQDN(fqdn); + artifactMap.put(fqdn.getString("vnf-management-server-fqdn"), valuesforFQDN); + } + + validateKeyValue(artifactMap); + + } catch (JSONException je) { + log.error( + fn + " ansible_admin artifact content may not be a valid JSON, error message : " + je.getMessage()); + throw new ArtifactHandlerInternalException( + "JSON Exception:ansible admin artifact content may not be a valid JSON, error message : " + je.getMessage(), je); + } catch (ArtifactHandlerInternalException ae) { + throw ae; + } catch (Exception e) { + + log.error(fn + "Error while creating Admin data records", e); + throw new ArtifactHandlerInternalException("Error while processing ansible admin artifact" + e.getMessage(), e); + } + + } + private void validateKeyValue(Map> artifactMap) throws ArtifactHandlerInternalException { + for (Map.Entry> entry1:artifactMap.entrySet()) { + for (String value : entry1.getValue()) { + for(Map.Entry> entry2:artifactMap.entrySet() ) { + if (!entry1.getKey().equals(entry2.getKey()) && entry2.getValue().contains(value)) { + log.info("Validation Failure, error message : Ansible Admin artifact has CloudOwner-RegionId-Tenant : " + value + + " mapped to multiple FQDN :" + entry1.getKey() + " & " + entry2.getKey()); + throw new ArtifactHandlerInternalException( + "Validation Failure, error message : Ansible Admin artifact has CloudOwner-RegionId-Tenant : " + value + + " mapped to multiple FQDN :" + entry1.getKey() + " & " + entry2.getKey()); + } + + + } + } + } +} + + private List populateValueForFQDN(JSONObject fqdn) { + log.info("Inside populateValueForFQDN :" + fqdn.getString("vnf-management-server-fqdn")); + List valuesforFQDN = new ArrayList<>(); + JSONArray cloudJsonList = fqdn.getJSONArray("cloud-owner-list"); + for (int j = 0; j < cloudJsonList.length(); j++) { + String cloudOwner = cloudJsonList.getJSONObject(j).getString("cloud-owner"); + JSONArray regionList = cloudJsonList.getJSONObject(j).getJSONArray("region-id-list"); + for (int i = 0; i < regionList.length(); i++) { + String region = regionList.getJSONObject(i).getString("region-id"); + JSONArray tenantList = regionList.getJSONObject(i).getJSONArray("tenant-id-list"); + + for (int k = 0; k < tenantList.length(); k++) { + String tenant = tenantList.getString(k); + String valueforFQDN = cloudOwner + "-" + region + "-" + tenant; + log.info("valueforFQDN for i " + i + " & j " + j + " :" + valueforFQDN); + valuesforFQDN.add(valueforFQDN); + } + } + } + return valuesforFQDN; + } + private boolean createDataForPD(JSONObject requestInfo, JSONObject documentInfo) - throws ArtifactHandlerInternalException { + throws ArtifactHandlerInternalException { String fn = "ArtifactHandlerNode.createReferenceDataForPD"; String artifactName = documentInfo.getString(ARTIFACT_NAME); - log.info(fn + "Received PD File Name: " + artifactName + " and suffix length " - + PD.length()); + log.info(fn + "Received PD File Name: " + artifactName + " and suffix length " + PD.length()); try { String suffix = artifactName.substring(PD.length()); @@ -180,11 +264,11 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void createArtifactRecords(JSONObject requestInfo, JSONObject documentInfo, String suffix) - throws ArtifactHandlerInternalException { + throws ArtifactHandlerInternalException { try { log.info("Creating Tosca Records and storing into SDC Artifacs"); - String[] docs = {TOSCA_PARAM, YANG_PARAM}; + String[] docs = { TOSCA_PARAM, YANG_PARAM }; ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil(); String pdFileContents = documentInfo.getString(ARTIFACT_CONTENTS); @@ -240,17 +324,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { return dbservice.getArtifactID(context, yangName); } - protected boolean updateStoreArtifacts(JSONObject requestInfo, JSONObject documentInfo) - throws SvcLogicException { + protected boolean updateStoreArtifacts(JSONObject requestInfo, JSONObject documentInfo) throws SvcLogicException { log.info("UpdateStoreArtifactsStarted storing of SDC Artifacs "); SvcLogicContext context = new SvcLogicContext(); DBService dbservice = DBService.initialise(); ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil(); int intversion = 0; - context.setAttribute("artifact_name", - documentInfo.getString(ARTIFACT_NAME)); - String internalVersion = dbservice.getInternalVersionNumber(context, - documentInfo.getString(ARTIFACT_NAME), null); + context.setAttribute("artifact_name", documentInfo.getString(ARTIFACT_NAME)); + String internalVersion = dbservice.getInternalVersionNumber(context, documentInfo.getString(ARTIFACT_NAME), + null); log.info("Internal Version number received from Database : " + internalVersion); if (internalVersion != null) { intversion = Integer.parseInt(internalVersion); @@ -276,18 +358,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } public boolean storeReferenceData(JSONObject requestInfo, JSONObject documentInfo) - throws ArtifactHandlerInternalException { + throws ArtifactHandlerInternalException { log.info("Started storing of SDC Artifacs into Handler"); try { DBService dbservice = DBService.initialise(); ArtifactHandlerProviderUtil ahpUtil = new ArtifactHandlerProviderUtil(); - String contentString = - ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS)); - String artifactName = - ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_NAME)); - String capabilityArtifactName = - StringUtils.replace(artifactName, ARTIFACT_NAME_REFERENCE, + String contentString = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_CONTENTS)); + String artifactName = ahpUtil.escapeSql(documentInfo.getString(ARTIFACT_NAME)); + String capabilityArtifactName = StringUtils.replace(artifactName, ARTIFACT_NAME_REFERENCE, ARTIFACT_NAME_CAPABILITY); JSONObject capabilities = new JSONObject(); JSONArray vnfActionList = new JSONArray(); @@ -311,7 +390,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { setAttribute(context, content::getString, ACTION_LEVEL); setAttribute(context, documentInfo::getString, ARTIFACT_TYPE); processActionLists(content, actionLevel, vnfcActionList, vfModuleActionList, vnfActionList, - vmActionVnfcFunctionCodesList); + vmActionVnfcFunctionCodesList); JSONArray vnfcTypeList = setVnfcTypeInformation(scope, context); storeCapabilityArtifact = isCapabilityArtifactNeeded(context); if (content.has(DEVICE_PROTOCOL)) { @@ -329,17 +408,16 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { processArtifactList(content, dbservice, context, vnfcTypeList); processConfigTypeActions(content, dbservice, context); dbservice.processDeviceAuthentication(context, - dbservice.isArtifactUpdateRequired(context, DB_DEVICE_AUTHENTICATION)); + dbservice.isArtifactUpdateRequired(context, DB_DEVICE_AUTHENTICATION)); String actionProtocol = tryGetProtocol(content); if (!StringUtils.equalsIgnoreCase(actionProtocol, OPENSTACK)) { - populateProtocolReference(dbservice, content); + populateProtocolReference(dbservice, content); } context.setAttribute(VNFC_TYPE, null); - if (content.has(VM) - && content.get(VM) instanceof JSONArray) { + if (content.has(VM) && content.get(VM) instanceof JSONArray) { processVmList(content, context, dbservice); } } @@ -348,9 +426,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { capabilities.put("vf-module", vfModuleActionList); capabilities.put("vnfc", vnfcActionList); capabilities.put("vm", vmActionVnfcFunctionCodesList); - processAndStoreCapabilitiesArtifact(dbservice, documentInfo, capabilities, - capabilityArtifactName, - vnfType); + processAndStoreCapabilitiesArtifact(dbservice, documentInfo, capabilities, capabilityArtifactName, + vnfType); } } catch (Exception e) { @@ -365,22 +442,20 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { public boolean isCapabilityArtifactNeeded(SvcLogicContext context) { String vnfcType = context.getAttribute(VNFC_TYPE); if (StringUtils.isNotBlank(vnfcType)) { - log.info("No capability Artifact for this reference data as it is at VNFC level!!" ); + log.info("No capability Artifact for this reference data as it is at VNFC level!!"); return false; - } - else { + } else { return true; } } public JSONArray setVnfcTypeInformation(JSONObject scope, SvcLogicContext context) { JSONArray vnfcTypeList = null; - if (scope.has(VNFC_TYPE) - && !scope.isNull(VNFC_TYPE)) { + if (scope.has(VNFC_TYPE) && !scope.isNull(VNFC_TYPE)) { String vnfcTypeScope = scope.getString(VNFC_TYPE); if (StringUtils.isNotBlank(vnfcTypeScope)) { setAttribute(context, scope::getString, VNFC_TYPE); - log.info("VNFC Type has been set for this reference artifact!!"+vnfcTypeScope); + log.info("VNFC Type has been set for this reference artifact!!" + vnfcTypeScope); } else { context.setAttribute(VNFC_TYPE, null); } @@ -388,16 +463,15 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { context.setAttribute(VNFC_TYPE, null); } if (scope.has(VNFC_TYPE_LIST) && !scope.isNull(VNFC_TYPE_LIST) - && scope.get(VNFC_TYPE_LIST) instanceof JSONArray) { + && scope.get(VNFC_TYPE_LIST) instanceof JSONArray) { vnfcTypeList = scope.getJSONArray(VNFC_TYPE_LIST); - log.info("VNFC TYPE LIST found for this artifact!! "+ vnfcTypeList.toString()); + log.info("VNFC TYPE LIST found for this artifact!! " + vnfcTypeList.toString()); } return vnfcTypeList; } public void processActionLists(JSONObject content, String actionLevel, JSONArray vnfcActionList, - JSONArray vfModuleActionList, - JSONArray vnfActionList, JSONArray vmActionVnfcFunctionCodesList) { + JSONArray vfModuleActionList, JSONArray vnfActionList, JSONArray vmActionVnfcFunctionCodesList) { if (validateActionLevel(actionLevel, ACTION_LEVEL_VNFC)) { vnfcActionList.put(content.getString(ACTION)); } @@ -408,9 +482,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { vnfActionList.put(content.getString(ACTION)); } if (validateActionLevel(actionLevel, ACTION_LEVEL_VM)) { - if (content.has(VNFC_FUNCTION_CODE_LIST) - && !content.isNull(VNFC_FUNCTION_CODE_LIST) && content.get( - VNFC_FUNCTION_CODE_LIST) instanceof JSONArray) { + if (content.has(VNFC_FUNCTION_CODE_LIST) && !content.isNull(VNFC_FUNCTION_CODE_LIST) + && content.get(VNFC_FUNCTION_CODE_LIST) instanceof JSONArray) { log.info("Found vnfc-function-code-list!!"); JSONArray vnfcList = content.getJSONArray(VNFC_FUNCTION_CODE_LIST); JSONObject obj = new JSONObject(); @@ -427,9 +500,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { return null != actionLevel && actionLevel.equalsIgnoreCase(actionLevelVnfc); } - public void processArtifactList(JSONObject content, DBService dbservice, SvcLogicContext context, JSONArray vnfcTypeList) - throws ArtifactHandlerInternalException { - + public void processArtifactList(JSONObject content, DBService dbservice, SvcLogicContext context, + JSONArray vnfcTypeList) throws ArtifactHandlerInternalException { try { if (content.has(ARTIFACT_LIST_PARAM) && content.get(ARTIFACT_LIST_PARAM) instanceof JSONArray) { @@ -437,7 +509,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { JSONArray templateIdList = null; if (content.has("template-id-list") && null != content.get("template-id-list") && content.get("template-id-list") instanceof JSONArray) { - templateIdList = content.getJSONArray("template-id-list"); + templateIdList = content.getJSONArray("template-id-list"); } doProcessArtifactList(dbservice, context, artifactLists, templateIdList, vnfcTypeList); @@ -449,30 +521,30 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void doProcessArtifactList(DBService dbservice, SvcLogicContext context, JSONArray artifactLists, - JSONArray templateIdList, JSONArray vnfcTypeList) - throws SvcLogicException, SQLException, ConfigurationException, DBException { + JSONArray templateIdList, JSONArray vnfcTypeList) + throws SvcLogicException, SQLException, ConfigurationException, DBException { boolean pdFile = false; - int modelInd = 0, vnfcRefInd = 0; + int modelInd = 0, vnfcRefInd = 0; for (int i = 0; i < artifactLists.length(); i++) { String suffix = null; String model = null; JSONObject artifact = (JSONObject) artifactLists.get(i); log.info("artifact is " + artifact); - //Get Model details - if (null != templateIdList && i>0 && i%2 == 0) {//Should this be changed to 3 to account for 3 artifacts + // Get Model details + if (null != templateIdList && i > 0 && i % 2 == 0) {// Should this be changed to 3 to account for 3 + // artifacts modelInd++; } - if (null != vnfcTypeList && i>0 && i%3 == 0) { - //TDP 517180 - CD tool has made changes to send 3 artifacts instead of 2 + if (null != vnfcTypeList && i > 0 && i % 3 == 0) { + // TDP 517180 - CD tool has made changes to send 3 artifacts instead of 2 vnfcRefInd++; } setAttribute(context, artifact::getString, ARTIFACT_NAME); - context.setAttribute(FILE_CATEGORY, - artifact.getString(ARTIFACT_TYPE)); + context.setAttribute(FILE_CATEGORY, artifact.getString(ARTIFACT_TYPE)); if (artifact.getString(ARTIFACT_NAME) != null - && artifact.getString(ARTIFACT_NAME).toLowerCase().startsWith(PD)) { + && artifact.getString(ARTIFACT_NAME).toLowerCase().startsWith(PD)) { suffix = artifact.getString(ARTIFACT_NAME).substring(PD.length()); pdFile = true; @@ -480,11 +552,11 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { log.info("Artifact-type = " + context.getAttribute(FILE_CATEGORY)); log.info("Artifact-name = " + context.getAttribute(ARTIFACT_NAME)); - if (null != templateIdList && modelInd < templateIdList.length()) { + if (null != templateIdList && modelInd < templateIdList.length()) { model = templateIdList.getString(modelInd); - log.info("Model is ::: "+model+" ,modelInd = " + modelInd); + log.info("Model is ::: " + model + " ,modelInd = " + modelInd); } - if (null != vnfcTypeList && vnfcRefInd < vnfcTypeList.length() ) { + if (null != vnfcTypeList && vnfcRefInd < vnfcTypeList.length()) { String vnfcType = vnfcTypeList.getString(vnfcRefInd); if (StringUtils.isNotBlank(vnfcType)) { context.setAttribute(VNFC_TYPE, vnfcType); @@ -492,60 +564,55 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { log.info("Setting vnfc type from vnfc-type-list ::" + vnfcType); } if (StringUtils.isNotBlank(model)) { - dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context, - DB_SDC_REFERENCE, model), model); - } - else { - dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context, - DB_SDC_REFERENCE)); + dbservice.processSdcReferences(context, + dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model); + } else { + dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE)); } cleanArtifactInstanceData(context); - //Moving this into the for loop to account for mulitple artifact sets with pds + // Moving this into the for loop to account for mulitple artifact sets with pds if (pdFile) { log.info("Sending information related to pdfile Artifact"); tryUpdateContext(dbservice, context, pdFile, suffix, model); - pdFile = false;//set to false afterprocessing yang and Tosca + pdFile = false;// set to false afterprocessing yang and Tosca } } } - private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile, - String suffix, String model) - throws SvcLogicException, SQLException, ConfigurationException, DBException { + private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile, String suffix, + String model) throws SvcLogicException, SQLException, ConfigurationException, DBException { if (pdFile) { context.setAttribute(ARTIFACT_NAME, "Tosca".concat(suffix)); context.setAttribute(FILE_CATEGORY, TOSCA_MODEL); dbservice.processSdcReferences(context, - dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model); + dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model); context.setAttribute(ARTIFACT_NAME, "Yang".concat(suffix)); context.setAttribute(FILE_CATEGORY, PARAMETER_YANG); dbservice.processSdcReferences(context, - dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model); + dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model); } } public void processConfigTypeActions(JSONObject content, DBService dbservice, SvcLogicContext context) - throws ArtifactHandlerInternalException { + throws ArtifactHandlerInternalException { try { - if (contentsActionEquals(content, CONFIGURE_PARAM) - || contentsActionEquals(content, CONFIG_MODIFY_PARAM) - || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) { + if (contentsActionEquals(content, CONFIGURE_PARAM) || contentsActionEquals(content, CONFIG_MODIFY_PARAM) + || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) { if (content.has(DOWNLOAD_DG_REFERENCE) && content.getString(DOWNLOAD_DG_REFERENCE).length() > 0) { setAttribute(context, content::getString, DOWNLOAD_DG_REFERENCE); dbservice.processDownloadDgReference(context, - dbservice.isArtifactUpdateRequired(context, DB_DOWNLOAD_DG_REFERENCE)); + dbservice.isArtifactUpdateRequired(context, DB_DOWNLOAD_DG_REFERENCE)); } if (StringUtils.isBlank(context.getAttribute(DOWNLOAD_DG_REFERENCE))) { - context.setAttribute(DOWNLOAD_DG_REFERENCE, - dbservice.getDownLoadDGReference(context)); + context.setAttribute(DOWNLOAD_DG_REFERENCE, dbservice.getDownLoadDGReference(context)); } - dbservice - .processConfigActionDg(context, dbservice.isArtifactUpdateRequired(context, DB_CONFIG_ACTION_DG)); + dbservice.processConfigActionDg(context, + dbservice.isArtifactUpdateRequired(context, DB_CONFIG_ACTION_DG)); tryProcessInterfaceProtocol(content, dbservice, context); } @@ -556,13 +623,12 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void tryProcessInterfaceProtocol(JSONObject content, DBService dbservice, SvcLogicContext context) - throws SvcLogicException, SQLException, ConfigurationException, DBException { + throws SvcLogicException, SQLException, ConfigurationException, DBException { if (contentsActionEquals(content, CONFIGURE_PARAM) || contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM)) { boolean isUpdateRequired = dbservice.isArtifactUpdateRequired(context, DB_DEVICE_INTERFACE_PROTOCOL); if (contentsActionEquals(content, CONFIGURE_PARAM) - || (contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM) - && !isUpdateRequired)) { + || (contentsActionEquals(content, CONFIG_SCALE_OUT_PARAM) && !isUpdateRequired)) { dbservice.processDeviceInterfaceProtocol(context, isUpdateRequired); } @@ -574,7 +640,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } public void processVmList(JSONObject content, SvcLogicContext context, DBService dbservice) - throws SvcLogicException { + throws SvcLogicException { JSONArray vmList = (JSONArray) content.get(VM); dbservice.cleanUpVnfcReferencesForVnf(context); for (int i = 0; i < vmList.length(); i++) { @@ -608,9 +674,9 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void tryProcessVnfcReference(JSONObject content, SvcLogicContext context, DBService dbservice) - throws SvcLogicException { + throws SvcLogicException { if (content.getString(ACTION).equals(CONFIGURE_PARAM) - || content.getString(ACTION).equals(CONFIG_SCALE_OUT_PARAM)) { + || content.getString(ACTION).equals(CONFIG_SCALE_OUT_PARAM)) { dbservice.processVnfcReference(context, false); } @@ -645,8 +711,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void processAndStoreCapabilitiesArtifact(DBService dbService, JSONObject documentInfo, - JSONObject capabilities, String capabilityArtifactName, String vnfType) - throws ArtifactHandlerInternalException { + JSONObject capabilities, String capabilityArtifactName, String vnfType) + throws ArtifactHandlerInternalException { log.info("Begin-->processAndStoreCapabilitiesArtifact "); @@ -663,8 +729,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { context.setAttribute(ARTIFACT_CONTENTS, newCapabilitiesObject.toString()); dbService.processSdcReferences(context, dbService.isArtifactUpdateRequired(context, DB_SDC_REFERENCE)); int intVersion = 0; - String internalVersion = dbService.getInternalVersionNumber(context, - context.getAttribute(ARTIFACT_NAME), null); + String internalVersion = dbService.getInternalVersionNumber(context, context.getAttribute(ARTIFACT_NAME), + null); log.info("Internal Version number received from Database : " + internalVersion); if (internalVersion != null) { intVersion = Integer.parseInt(internalVersion) + 1; @@ -694,7 +760,7 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { } private void populateProtocolReference(DBService dbservice, JSONObject content) - throws ArtifactHandlerInternalException { + throws ArtifactHandlerInternalException { log.info("Begin-->populateProtocolReference "); try { SvcLogicContext context = new SvcLogicContext(); @@ -705,8 +771,8 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin { String actionLevel = tryGetActionLevel(content); String template = tryGetTemplate(content); - boolean isUpdateNeeded = dbservice - .isProtocolReferenceUpdateRequired(context, vnfType, protocol, action, actionLevel, template); + boolean isUpdateNeeded = dbservice.isProtocolReferenceUpdateRequired(context, vnfType, protocol, action, + actionLevel, template); if (isUpdateNeeded) { dbservice.updateProtocolReference(context, vnfType, protocol, action, actionLevel, template); } else { diff --git a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/utils/SdcArtifactHandlerConstants.java b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/utils/SdcArtifactHandlerConstants.java index 13941b369..f4f623cce 100644 --- a/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/utils/SdcArtifactHandlerConstants.java +++ b/appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/utils/SdcArtifactHandlerConstants.java @@ -92,6 +92,8 @@ public class SdcArtifactHandlerConstants { public static final String ARTIFACT_NAME_CAPABILITY = "capability"; public static final String APPC_CONFIG_DIR="/opt/appcauth"; public static final String URL="url"; - public static final String OPENSTACK = "OS"; + public static final String OPENSTACK = "OS"; + public static final String ANSIBLE = "ansible"; + } diff --git a/appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java index 0d25fbcb4..7adee0da9 100644 --- a/appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java +++ b/appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java @@ -58,6 +58,8 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + @RunWith(PowerMockRunner.class) @PrepareForTest({DBService.class, YANGGeneratorFactory.class}) @@ -298,4 +300,147 @@ public class ArtifactHandlerNodeTest { documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "12345"); return documentInfo; } + + + @Test + public void testValidateAnsibleAdminArtifact() throws Exception { + String contentStr = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\"," + + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\"," + + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\"," + + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\"," + + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\"," + + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid5\"," + + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\"," + + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}]," + + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\"," + + "\"modify-username\":\"\",\"modify-date\":\"\"}]}"; + + JSONObject documentInfo = new JSONObject(); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStr); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json"); + artifactHandlerNode.validateAnsibleAdminArtifact(documentInfo); + } + + @Test + public void testValidateAnsibleAdminArtifactWithException() throws Exception { + String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\"," + + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]},{\"region-id\":\"san4b\"," + + "\"tenant-id-list\":[\"tenantuuid1\",\"tenantuuid2\"]}]},{\"cloud-owner\":\"nc1.0\",\"region-id-list\":[{\"region-id\":\"san4a\"," + + "\"tenant-id-list\":[\"tenantuuid3\",\"tenantuuid4\"]}]}],\"description\":\"fqdn for east zone Production\",\"username\":\"attuid\"," + + "\"create-date\":\"\",\"modify-username\":\"\",\"modify-date\":\"\"},{\"vnf-management-server-fqdn\":\"fqdn-value2 url:port\"," + + "\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\",\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid1\"," + + "\"tenantuuid6\"]},{\"region-id\":\"san4b\",\"tenant-id-list\":[\"tenantuuid5\",\"tenantuuid6\"]}]},{\"cloud-owner\":\"nc1.0\"," + + "\"region-id-list\":[{\"region-id\":\"san4a\",\"tenant-id-list\":[\"tenantuuid7\",\"tenantuuid8\"]}]}]," + + "\"description\":\"fqdn for east zone Test\",\"username\":\"attuid\",\"create-date\":\"\"," + + "\"modify-username\":\"\",\"modify-date\":\"\"}]}"; + JSONObject documentInfoOne = new JSONObject(); + documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne); + documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json"); + + try { + artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne); + fail("Missing exception"); + }catch(ArtifactHandlerInternalException e) { + assertTrue(e.getMessage().contains("Validation Failure")); + } + + } + + @Test + public void testValidateAnsibleAdminArtifactWithJSONException() throws Exception { + String contentStrOne = "{\"fqdn-list\":[{\"vnf-management-server-fqdn\":\"fqdn-value1 url:port\",\"cloud-owner-list\":[{\"cloud-owner\":\"aic3.0\"}"; + + JSONObject documentInfoOne = new JSONObject(); + documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, contentStrOne); + documentInfoOne.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.1V.json"); + + try { + artifactHandlerNode.validateAnsibleAdminArtifact(documentInfoOne); + fail("Missing exception"); + }catch(ArtifactHandlerInternalException je) { + assertTrue(je.getMessage().contains("JSON Exception")); + + } + + } + + @Test + public void testProcessArtifactWithException() throws Exception { + SvcLogicContext ctx = new SvcLogicContext(); + ctx.setAttribute("test", "test"); + Map inParams = new HashMap<>(); + JSONObject postData = new JSONObject(); + JSONObject input = new JSONObject(); + inParams.put("response_prefix", "prefix"); + JSONObject requestInfo = new JSONObject(); + JSONObject documentInfo = new JSONObject(); + String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader() + .getResourceAsStream("templates/reference_template"), Charset.defaultCharset()); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, ""); + requestInfo.put("RequestInfo", "testValue"); + requestInfo.put("request-id","testREQUEST_ID"); + input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo); + input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo); + postData.put("input", input); + inParams.put("postData", postData.toString()); + try { + artifactHandlerNode.processArtifact(inParams, ctx); + fail("Missing exception"); + }catch(Exception e) { + assertTrue(e.getMessage().contains("Missing Artifact Name")); + } + + } + @Test + public void testProcessArtifactWithExceptionforAnsible() throws Exception { + SvcLogicContext ctx = new SvcLogicContext(); + ctx.setAttribute("test", "test"); + Map inParams = new HashMap<>(); + JSONObject postData = new JSONObject(); + JSONObject input = new JSONObject(); + inParams.put("response_prefix", "prefix"); + JSONObject requestInfo = new JSONObject(); + JSONObject documentInfo = new JSONObject(); + String artifactContent = IOUtils.toString(ArtifactHandlerProviderUtilTest.class.getClassLoader() + .getResourceAsStream("templates/reference_template"), Charset.defaultCharset()); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_CONTENTS, artifactContent); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_NAME, "ansible_admin_FQDN_Artifact_0.0.2V.json"); + requestInfo.put("RequestInfo", "testValue"); + requestInfo.put("request-id","testREQUEST_ID"); + input.put(SdcArtifactHandlerConstants.DOCUMENT_PARAMETERS, documentInfo); + input.put(SdcArtifactHandlerConstants.REQUEST_INFORMATION, requestInfo); + postData.put("input", input); + inParams.put("postData", postData.toString()); + + try { + artifactHandlerNode.processArtifact(inParams, ctx); + fail("Missing exception"); + }catch(Exception e) { + assertTrue(e.getMessage().contains("JSON Exception:ansible admin")); + } + } + + @Test + public void testProcessAndStoreCapablitiesArtifact() throws Exception { + ArtifactHandlerNode ah = new ArtifactHandlerNode(); + JSONObject capabilities = new JSONObject(); + JSONObject documentInfo = new JSONObject(); + MockDBService dbService = MockDBService.initialise(); + documentInfo.put(SdcArtifactHandlerConstants.SERVICE_UUID, "testuid"); + documentInfo.put(SdcArtifactHandlerConstants.DISTRIBUTION_ID, "testDist"); + documentInfo.put(SdcArtifactHandlerConstants.SERVICE_NAME, "testName"); + documentInfo.put(SdcArtifactHandlerConstants.SERVICE_DESCRIPTION, "testDesc"); + documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_UUID, "testRes"); + documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_INSTANCE_NAME, "testResIns"); + documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_VERSION, "testVers"); + documentInfo.put(SdcArtifactHandlerConstants.RESOURCE_TYPE, "testResType"); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_UUID, "testArtifactUuid"); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_VERSION, "testArtifactVers"); + documentInfo.put(SdcArtifactHandlerConstants.ARTIFACT_DESRIPTION, "testArtifactDesc"); + Whitebox.invokeMethod(ah, "processAndStoreCapabilitiesArtifact", dbService, documentInfo, capabilities, + "artifactName", "someVnf"); + } + + } -- cgit 1.2.3-korg