From a6e5540e815fcb1897e9e2dd4dcbd7ff0cf3b067 Mon Sep 17 00:00:00 2001 From: "Leigh, Phillip (pl876u)" Date: Tue, 12 Mar 2019 15:49:49 -0400 Subject: SdcCtxBulder:set UUID svcInstanceId & versioning Also fixed the versioning support Issue-ID: LOG-712 Issue-ID: LOG-658 Change-Id: Iaf3327d2c891671bae45f3f2c5a7fc5b6e9cf180 Signed-off-by: Leigh, Phillip (pl876u) --- .../model/handlers/ToscaCsarArtifactHandler.java | 371 ++++++++++--------- .../sdc/model/handlers/ToscaModelConverter.java | 278 +++++++-------- .../sdc/service/SpringServiceImpl.java | 120 +++---- .../contextbuilder/sdc/service/rs/RestService.java | 118 +++---- .../sdc/model/test/ArtifactInfoTest.java | 119 ++++--- .../sdc/test/SDCClientConfigurationTest.java | 108 +++--- .../sdc/test/ToscaBuildConfigTest.java | 116 +++--- .../unittest/service/SDCContextBuilderTest.java | 392 +++++++++++---------- 8 files changed, 815 insertions(+), 807 deletions(-) diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java index 9fac21e..dceb4ef 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaCsarArtifactHandler.java @@ -1,186 +1,185 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.model.handlers; - - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import java.io.IOException; -import java.io.OutputStream; -import java.nio.file.Files; -import java.nio.file.Path; -import java.nio.file.Paths; -import java.nio.file.StandardOpenOption; -import java.text.MessageFormat; -import java.util.HashMap; -import java.util.Map; -import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig; -import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; -import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo; -import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; -import org.onap.sdc.api.results.IDistributionClientDownloadResult; -import org.onap.sdc.http.SdcConnectorClient; -import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; -import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; -import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; -import org.onap.sdc.utils.DistributionActionResultEnum; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -@Component("ToscaCsarArtifactHandler") -public class ToscaCsarArtifactHandler { - - private static final String DEFAULT_CSAR_FILE_EXTENSION = ".zip"; - - private static Logger log = LoggerFactory.getLogger(ToscaCsarArtifactHandler.class); - - private Map sdcCsarHelpers = new HashMap<>(); - - @Autowired - private SdcConnectorClient client; - @Autowired - private ToscaBuilderConfig config; - - - /** - * Retrieves a subset of the TOSCA model for the given version ID. - * If the model is not cached, a request to download the CSAR file is sent to SDC. - * @param modelVersionId - * @return Response containing a subset of the model data - * @throws ToscaCsarException - */ - public SDCContextResponse getToscaModel(String modelVersionId) throws ToscaCsarException { - - ISdcCsarHelper helper = sdcCsarHelpers.get(modelVersionId); - if(helper == null) { - log.debug("No CSAR file cached for " + modelVersionId); - helper = retrieveToscaCsarArtifact(modelVersionId); - if(helper != null) { - sdcCsarHelpers.put(modelVersionId, helper); - } - } - - SDCContextResponse response = new SDCContextResponse(); - - if(helper == null) { - log.debug("CSAR artifact not found for model-version-id: " + modelVersionId); - response.setModelData(""); - return response; - } - - Gson gson = new GsonBuilder().create(); - String modelData = gson.toJson(ToscaModelConverter.convert(helper)); - response.setModelData(modelData); - return response; - } - - - /** - * Retrieves the CSAR file from SDC for the given model version ID - * @param modelVersionId - * @return Returns NULL if CSAR file couldn't be retrieved - * @throws ToscaCsarException - */ - private ISdcCsarHelper retrieveToscaCsarArtifact(String modelVersionId) throws ToscaCsarException { - - if (config.getTestToscaCsarFile() != null && !config.getTestToscaCsarFile().isEmpty()) { - return getSdcToscaContext(config.getTestToscaCsarFile()); - } - - String url = generateURL(modelVersionId); - log.debug("Downloading CSAR using URL suffix: " + url); - - ArtifactInfo artifact = new ArtifactInfo(); - artifact.setArtifactType(config.getArtifactType()); - artifact.setArtifactURL(url); - artifact.setArtifactChecksum("value_not_used_by_sdc_distribution_client_lib"); - - String csarFile = generateTemporaryFile(modelVersionId); - try (OutputStream outputStream = Files.newOutputStream(Paths.get(csarFile), StandardOpenOption.CREATE);) { - IDistributionClientDownloadResult downloadResult = client.dowloadArtifact(artifact); - if (downloadResult.getDistributionActionResult() == DistributionActionResultEnum.ARTIFACT_NOT_FOUND) { - log.debug("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); - return null; - } else if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { - throw new ToscaCsarException("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); - } - - byte[] payload = downloadResult.getArtifactPayload(); - if ((payload == null) || (payload.length == 0)) { - log.debug("Retrieved CSAR payload is empty"); - return null; - } - outputStream.write(payload); - } catch (IOException e){ - throw new ToscaCsarException("Failed to write temporary CSAR file '" + csarFile + "'", e); - } - - ISdcCsarHelper helper = getSdcToscaContext(csarFile); - try { - Files.delete(Paths.get(csarFile)); - } catch (IOException e) { - log.error("Failed to delete temporary CSAR file '" + csarFile + "': " + e.getMessage()); - } - return helper; - } - - - private String generateURL(String uuid) { - return MessageFormat.format(config.getUrlTemplate(), uuid); - } - - - /** - * Creates a temporary file for downloaded CSAR file - * @param uuid - * @return - * @throws ToscaCsarException - */ - private String generateTemporaryFile(String uuid) throws ToscaCsarException { - try { - String fullPrefix = config.getCsarFilePrefix() + uuid + "-"; - String suffix = (config.getCsarFileSuffix() == null ? DEFAULT_CSAR_FILE_EXTENSION : config.getCsarFileSuffix()); - Path downloadFile = Files.createTempFile(fullPrefix, suffix); - log.debug("Temporary CSAR file name: " + downloadFile.toString()); - return downloadFile.toString(); - } catch (IOException e) { - throw new ToscaCsarException("Failed to create temporary CSAR file: " + e.getMessage()); - } - } - - - /** - * Parses a CSAR file - * @param csarFile - * @return - * @throws ToscaCsarException - */ - private ISdcCsarHelper getSdcToscaContext(String csarFile) throws ToscaCsarException { - - log.info("Loading and parsing SDC csar file ..."); - try { - SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - return factory.getSdcCsarHelper(csarFile); - } catch (SdcToscaParserException e) { - throw new ToscaCsarException("Failed to parse CSAR file", e); - } - } - -} +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.model.handlers; + + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import java.io.IOException; +import java.io.OutputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.nio.file.StandardOpenOption; +import java.text.MessageFormat; +import java.util.HashMap; +import java.util.Map; +import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; +import org.onap.sdc.api.results.IDistributionClientDownloadResult; +import org.onap.sdc.http.SdcConnectorClient; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; +import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory; +import org.onap.sdc.utils.DistributionActionResultEnum; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +@Component("ToscaCsarArtifactHandler") +public class ToscaCsarArtifactHandler { + + private static final String DEFAULT_CSAR_FILE_EXTENSION = ".zip"; + + private static Logger log = LoggerFactory.getLogger(ToscaCsarArtifactHandler.class); + + private Map sdcCsarHelpers = new HashMap<>(); + + @Autowired + private SdcConnectorClient client; + @Autowired + private ToscaBuilderConfig config; + + + /** + * Retrieves a subset of the TOSCA model for the given version ID. + * If the model is not cached, a request to download the CSAR file is sent to SDC. + * @param modelVersionId + * @return Response containing a subset of the model data + * @throws ToscaCsarException + */ + public SDCContextResponse getToscaModel(String modelVersionId, String serviceInstanceId) throws ToscaCsarException { + + ISdcCsarHelper helper = sdcCsarHelpers.get(modelVersionId); + if(helper == null) { + log.debug("No CSAR file cached for " + modelVersionId); + helper = retrieveToscaCsarArtifact(modelVersionId); + if(helper != null) { + sdcCsarHelpers.put(modelVersionId, helper); + } + } + + SDCContextResponse response = new SDCContextResponse(); + + if(helper == null) { + log.debug("CSAR artifact not found for model-version-id: " + modelVersionId); + response.setModelData(""); + return response; + } + + Gson gson = new GsonBuilder().create(); + String modelData = gson.toJson(ToscaModelConverter.convert(helper, modelVersionId, serviceInstanceId)); + response.setModelData(modelData); + return response; + } + + + /** + * Retrieves the CSAR file from SDC for the given model version ID + * @param modelVersionId + * @return Returns NULL if CSAR file couldn't be retrieved + * @throws ToscaCsarException + */ + private ISdcCsarHelper retrieveToscaCsarArtifact(String modelVersionId) throws ToscaCsarException { + + if (config.getTestToscaCsarFile() != null && !config.getTestToscaCsarFile().isEmpty()) { + return getSdcToscaContext(config.getTestToscaCsarFile()); + } + String url = generateURL(modelVersionId); + log.debug("Downloading CSAR using URL suffix: " + url); + + ArtifactInfo artifact = new ArtifactInfo(); + artifact.setArtifactType(config.getArtifactType()); + artifact.setArtifactURL(url); + artifact.setArtifactChecksum("value_not_used_by_sdc_distribution_client_lib"); + + String csarFile = generateTemporaryFile(modelVersionId); + try (OutputStream outputStream = Files.newOutputStream(Paths.get(csarFile), StandardOpenOption.CREATE);) { + IDistributionClientDownloadResult downloadResult = client.dowloadArtifact(artifact); + if (downloadResult.getDistributionActionResult() == DistributionActionResultEnum.ARTIFACT_NOT_FOUND) { + log.debug("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); + return null; + } else if (downloadResult.getDistributionActionResult() != DistributionActionResultEnum.SUCCESS) { + throw new ToscaCsarException("Failed to retrieve CSAR artifact from SDC: " + downloadResult.getDistributionMessageResult()); + } + + byte[] payload = downloadResult.getArtifactPayload(); + if ((payload == null) || (payload.length == 0)) { + log.debug("Retrieved CSAR payload is empty"); + return null; + } + outputStream.write(payload); + } catch (IOException e){ + throw new ToscaCsarException("Failed to write temporary CSAR file '" + csarFile + "'", e); + } + + ISdcCsarHelper helper = getSdcToscaContext(csarFile); + try { + Files.delete(Paths.get(csarFile)); + } catch (IOException e) { + log.error("Failed to delete temporary CSAR file '" + csarFile + "': " + e.getMessage()); + } + return helper; + } + + + private String generateURL(String modelVersionId) { + return MessageFormat.format(config.getUrlTemplate(), modelVersionId); + } + + + /** + * Creates a temporary file for downloaded CSAR file + * @param modelVersionId + * @return + * @throws ToscaCsarException + */ + private String generateTemporaryFile(String modelVersionId) throws ToscaCsarException { + try { + String fullPrefix = config.getCsarFilePrefix() + modelVersionId + "-"; + String suffix = (config.getCsarFileSuffix() == null ? DEFAULT_CSAR_FILE_EXTENSION : config.getCsarFileSuffix()); + Path downloadFile = Files.createTempFile(fullPrefix, suffix); + log.debug("Temporary CSAR file name: " + downloadFile.toString()); + return downloadFile.toString(); + } catch (IOException e) { + throw new ToscaCsarException("Failed to create temporary CSAR file: " + e.getMessage()); + } + } + + + /** + * Parses a CSAR file + * @param csarFile + * @return + * @throws ToscaCsarException + */ + private ISdcCsarHelper getSdcToscaContext(String csarFile) throws ToscaCsarException { + + log.info("Loading and parsing SDC csar file ..."); + try { + SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); + return factory.getSdcCsarHelper(csarFile); + } catch (SdcToscaParserException e) { + throw new ToscaCsarException("Failed to parse CSAR file", e); + } + } + +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java index b01e75b..5c565a3 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/model/handlers/ToscaModelConverter.java @@ -1,139 +1,139 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.model.handlers; - -import java.util.ArrayList; -import java.util.List; -import org.onap.pomba.common.datatypes.ModelContext; -import org.onap.pomba.common.datatypes.Service; -import org.onap.pomba.common.datatypes.VFModule; -import org.onap.pomba.common.datatypes.VNF; -import org.onap.pomba.common.datatypes.VNFC; -import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; -import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; -import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; -import org.onap.sdc.toscaparser.api.Group; -import org.onap.sdc.toscaparser.api.NodeTemplate; -import org.onap.sdc.toscaparser.api.elements.Metadata; - -public class ToscaModelConverter { - - private ToscaModelConverter() { - - } - - /** - * Conversion from SDC model to the common model - * @param helper - * @return - * @throws ToscaCsarException - */ - public static ModelContext convert(ISdcCsarHelper helper) throws ToscaCsarException { - ModelContext context = new ModelContext(); - context.setService(generateService(helper.getServiceMetadata())); - context.setVnfs(generateVnfList(helper)); - return context; - } - - /** - * Instantiates a service based on the SDC Service metadata - * @param serviceMetadata - * @return - * @throws ToscaCsarException - */ - private static Service generateService(Metadata serviceMetadata) throws ToscaCsarException { - Service service = new Service(); - if (serviceMetadata != null) { - service.setName(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_NAME)); - service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); - service.setUuid(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); - } - return service; - } - - /** - * Generates a list of VFs from the SDC VF-Resources - * @param helper - * @return - * @throws ToscaCsarException - */ - private static List generateVnfList(ISdcCsarHelper helper) throws ToscaCsarException { - - List vnfList = new ArrayList<>(); - List vfNodeTemplateList = helper.getServiceVfList(); - for (NodeTemplate vfNodeTemplate : vfNodeTemplateList) { - VNF vnf = new VNF(); - vnf.setName(vfNodeTemplate.getName()); - vnf.setType(vfNodeTemplate.getType()); - vnf.setModelInvariantUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); - vnf.setUuid(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); - - String customizationUUID = vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID); - vnf.setVnfcs(generateVnfcList(helper.getVfcListByVf(customizationUUID))); - vnf.setVfModules(generateVfModuleList(helper.getVfModulesByVf(customizationUUID))); - - vnfList.add(vnf); - } - return vnfList; - } - - /** - * Generates a list of VFNCs from the SDC VF-Resources's VNFCs - * @param vfcNodeTemplateList - * @return - * @throws ToscaCsarException - */ - private static List generateVnfcList(List vfcNodeTemplateList) throws ToscaCsarException { - List vnfcList = new ArrayList<>(); - for (NodeTemplate vfcNodeTemplate : vfcNodeTemplateList) { - VNFC vnfc = new VNFC(); - vnfc.setName(vfcNodeTemplate.getName()); - vnfc.setModelInvariantUUID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); - vnfc.setUuid(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); - vnfcList.add(vnfc); - } - return vnfcList; - } - - /** - * Generates a list of VFModules from the SDC VF-Resource's VF-Modules - * @param vfModuleGroupList - * @return - * @throws ToscaCsarException - */ - private static List generateVfModuleList(List vfModuleGroupList) throws ToscaCsarException { - List vfModuleList = new ArrayList<>(); - for (Group moduleGroup : vfModuleGroupList) { - VFModule vfModule = new VFModule(); - vfModule.setModelInvariantUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)); - vfModule.setUuid(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)); - - Object minInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); - if (minInstances != null) { - vfModule.setMinInstances((Integer)minInstances); - } - Object maxInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); - if (maxInstances != null) { - vfModule.setMaxInstances((Integer)maxInstances); - } - - vfModuleList.add(vfModule); - } - return vfModuleList; - } -} +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.model.handlers; + +import java.util.ArrayList; +import java.util.List; +import org.onap.pomba.common.datatypes.ModelContext; +import org.onap.pomba.common.datatypes.Service; +import org.onap.pomba.common.datatypes.VFModule; +import org.onap.pomba.common.datatypes.VNF; +import org.onap.pomba.common.datatypes.VNFC; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.sdc.tosca.parser.api.ISdcCsarHelper; +import org.onap.sdc.tosca.parser.impl.SdcPropertyNames; +import org.onap.sdc.toscaparser.api.Group; +import org.onap.sdc.toscaparser.api.NodeTemplate; +import org.onap.sdc.toscaparser.api.elements.Metadata; + +public class ToscaModelConverter { + + private ToscaModelConverter() { + + } + + /** + * Conversion from SDC model to the common model + * @param helper + * @return + * @throws ToscaCsarException + */ + public static ModelContext convert(ISdcCsarHelper helper,String modelVersionId, String serviceInstanceId) throws ToscaCsarException { + ModelContext context = new ModelContext(); + context.setService(generateService(helper.getServiceMetadata(), serviceInstanceId)); + context.setVnfs(generateVnfList(helper)); + return context; + } + + /** + * Instantiates a service based on the SDC Service metadata + * @param serviceMetadata + * @return + * @throws ToscaCsarException + */ + private static Service generateService(Metadata serviceMetadata, String serviceInstanceId) throws ToscaCsarException { + Service service = new Service(); + if (serviceMetadata != null) { + service.setModelInvariantUUID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + service.setModelVersionID(serviceMetadata.getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + service.setUuid(serviceInstanceId); + } + return service; + } + + /** + * Generates a list of VFs from the SDC VF-Resources + * @param helper + * @return + * @throws ToscaCsarException + */ + private static List generateVnfList(ISdcCsarHelper helper) throws ToscaCsarException { + + List vnfList = new ArrayList<>(); + List vfNodeTemplateList = helper.getServiceVfList(); + for (NodeTemplate vfNodeTemplate : vfNodeTemplateList) { + VNF vnf = new VNF(); + vnf.setType(vfNodeTemplate.getType()); + vnf.setModelInvariantUUID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + vnf.setModelVersionID(vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + + String customizationUUID = vfNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_CUSTOMIZATIONUUID); + vnf.setVnfcs(generateVnfcList(helper.getVfcListByVf(customizationUUID))); + vnf.setVfModules(generateVfModuleList(helper.getVfModulesByVf(customizationUUID))); + + vnfList.add(vnf); + } + return vnfList; + } + + /** + * Generates a list of VFNCs from the SDC VF-Resources's VNFCs + * @param vfcNodeTemplateList + * @return + * @throws ToscaCsarException + */ + private static List generateVnfcList(List vfcNodeTemplateList) throws ToscaCsarException { + List vnfcList = new ArrayList<>(); + for (NodeTemplate vfcNodeTemplate : vfcNodeTemplateList) { + VNFC vnfc = new VNFC(); + vnfc.setModelInvariantUUID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_INVARIANTUUID)); + vnfc.setModelVersionID(vfcNodeTemplate.getMetaData().getValue(SdcPropertyNames.PROPERTY_NAME_UUID)); //assign sdc UUID to ModelVersionID based on common model mapping + vnfcList.add(vnfc); + } + return vnfcList; + } + + /** + * Generates a list of VFModules from the SDC VF-Resource's VF-Modules + * @param vfModuleGroupList + * @return + * @throws ToscaCsarException + */ + private static List generateVfModuleList(List vfModuleGroupList) throws ToscaCsarException { + List vfModuleList = new ArrayList<>(); + for (Group moduleGroup : vfModuleGroupList) { + VFModule vfModule = new VFModule(); + vfModule.setModelInvariantUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELINVARIANTUUID)); + vfModule.setModelVersionID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULEMODELUUID)); + vfModule.setModelCustomizationUUID(moduleGroup.getMetadata().getValue(SdcPropertyNames.PROPERTY_NAME_VFMODULECUSTOMIZATIONUUID)); + + + Object minInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); + if (minInstances != null) { + vfModule.setMinInstances((Integer)minInstances); + } + Object maxInstances = moduleGroup.getPropertyValue(SdcPropertyNames.PROPERTY_NAME_MINVFMODULEINSTANCES); + if (maxInstances != null) { + vfModule.setMaxInstances((Integer)maxInstances); + } + + vfModuleList.add(vfModule); + } + return vfModuleList; + } +} diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java index 1ef7fd0..1315fc2 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/SpringServiceImpl.java @@ -1,61 +1,61 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.service; - -import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; -import org.onap.pomba.contextbuilder.sdc.logging.LoggingUtil; -import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest; -import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; -import org.onap.pomba.contextbuilder.sdc.model.handlers.ToscaCsarArtifactHandler; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class SpringServiceImpl implements SpringService { - - private static Logger log = LoggerFactory.getLogger(SpringService.class); - - - @Autowired - protected ToscaCsarArtifactHandler toscaCsarArtifactHandler; - - @Autowired - private String httpBasicAuthorization; - - @Override - public SDCContextResponse getModelData(SDCContextRequest ctxRequest) throws ToscaCsarException { - - LoggingUtil.initMdc(ctxRequest.getTransactionId(), ctxRequest.getFromAppId(), ctxRequest.getRemoteAddr()); - SDCContextResponse sdcContextResponse = null; - try { - ctxRequest.validate(httpBasicAuthorization); - sdcContextResponse = toscaCsarArtifactHandler.getToscaModel(ctxRequest.getModelVersionId()); - } catch (ToscaCsarException e) { - log.error(e.getStatus().getStatusCode() + " " + e.getStatus()+ ", Reason: " + e.getMessage()); - sdcContextResponse = new SDCContextResponse(e.getStatus(), e.getMessage()); - } finally { - LoggingUtil.closeMdc(); - } - return sdcContextResponse; - - } - - +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.service; + +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; +import org.onap.pomba.contextbuilder.sdc.logging.LoggingUtil; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; +import org.onap.pomba.contextbuilder.sdc.model.handlers.ToscaCsarArtifactHandler; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class SpringServiceImpl implements SpringService { + + private static Logger log = LoggerFactory.getLogger(SpringService.class); + + + @Autowired + protected ToscaCsarArtifactHandler toscaCsarArtifactHandler; + + @Autowired + private String httpBasicAuthorization; + + @Override + public SDCContextResponse getModelData(SDCContextRequest ctxRequest) throws ToscaCsarException { + + LoggingUtil.initMdc(ctxRequest.getTransactionId(), ctxRequest.getFromAppId(), ctxRequest.getRemoteAddr()); + SDCContextResponse sdcContextResponse = null; + try { + ctxRequest.validate(httpBasicAuthorization); + sdcContextResponse = toscaCsarArtifactHandler.getToscaModel(ctxRequest.getModelVersionId(), ctxRequest.getServiceInstanceId()); + } catch (ToscaCsarException e) { + log.error(e.getStatus().getStatusCode() + " " + e.getStatus()+ ", Reason: " + e.getMessage()); + sdcContextResponse = new SDCContextResponse(e.getStatus(), e.getMessage()); + } finally { + LoggingUtil.closeMdc(); + } + return sdcContextResponse; + + } + + } \ No newline at end of file diff --git a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java index ea0ae0d..91a3569 100644 --- a/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java +++ b/src/main/java/org/onap/pomba/contextbuilder/sdc/service/rs/RestService.java @@ -1,60 +1,60 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.service.rs; - -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; -import javax.ws.rs.GET; -import javax.ws.rs.HeaderParam; -import javax.ws.rs.Path; -import javax.ws.rs.Produces; -import javax.ws.rs.QueryParam; -import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; - - -@Api -@Path("/service") -@Produces({MediaType.APPLICATION_JSON}) -public interface RestService { - - - @GET - @Path("/context") - @Produces({ MediaType.APPLICATION_JSON }) - @ApiOperation( - value = "Retrieve SDC CSAR file for a give UUID", - notes = "This method returns SDC CSAR encoded value. ", - response = Response.class) - @ApiResponses(value = { - @ApiResponse(code = 404, message = "Service not available"), - @ApiResponse(code = 400, message = "Bad request"), - @ApiResponse(code = 401, message = "Unauthorized"), - @ApiResponse(code = 500, message = "Unexpected Runtime error") }) - public Response getContext( - @HeaderParam("Authorization") String authorization, - @HeaderParam("X-FromAppId") String xFromAppId, - @HeaderParam("X-TransactionId") String xTransactionId, - @QueryParam("serviceInstanceId") String serviceInstanceId, - @QueryParam("modelVersionId") String modelVersionId, - @QueryParam("modelInvariantId") String modelInvariantId - ) throws ToscaCsarException; +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.service.rs; + +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import org.onap.pomba.contextbuilder.sdc.exception.ToscaCsarException; + + +@Api +@Path("{version: v2}/service") +@Produces({MediaType.APPLICATION_JSON}) +public interface RestService { + + + @GET + @Path("/context") + @Produces({ MediaType.APPLICATION_JSON }) + @ApiOperation( + value = "Retrieve SDC CSAR file for a give UUID", + notes = "This method returns SDC CSAR encoded value. ", + response = Response.class) + @ApiResponses(value = { + @ApiResponse(code = 404, message = "Service not available"), + @ApiResponse(code = 400, message = "Bad request"), + @ApiResponse(code = 401, message = "Unauthorized"), + @ApiResponse(code = 500, message = "Unexpected Runtime error") }) + public Response getContext( + @HeaderParam("Authorization") String authorization, + @HeaderParam("X-FromAppId") String xFromAppId, + @HeaderParam("X-TransactionId") String xTransactionId, + @QueryParam("serviceInstanceId") String serviceInstanceId, + @QueryParam("modelVersionId") String modelVersionId, + @QueryParam("modelInvariantId") String modelInvariantId + ) throws ToscaCsarException; } \ No newline at end of file diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdc/model/test/ArtifactInfoTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdc/model/test/ArtifactInfoTest.java index 5f58fad..d137ac4 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdc/model/test/ArtifactInfoTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdc/model/test/ArtifactInfoTest.java @@ -1,57 +1,64 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.model.test; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; -import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo; -import org.onap.sdc.api.notification.IArtifactInfo; - -public class ArtifactInfoTest { - - @Test - public void testArtifactInfo() throws Exception { - String url = "/sdc/v1/catalog/services/e9851a43-c068-4eb2-9fe7-2d123bd94ff0/toscaModel"; - String artifactType = "TOSCA_CSAR"; - ArtifactInfo artifact = new ArtifactInfo(); - artifact.setArtifactType(artifactType); - artifact.setArtifactURL(url); - artifact.setArtifactChecksum("artifactChecksum"); - artifact.setArtifactDescription("artifactDescription"); - artifact.setArtifactName("artifactName"); - artifact.setArtifactTimeout(1000); - artifact.setArtifactUUID("ae04b88e-e2ee-4ce9-a62d-3d08cf0f46db"); - artifact.setArtifactVersion("artifactVersion"); - - IArtifactInfo generatedArtifactTest = (IArtifactInfo)artifact; - artifact.setGeneratedArtifact(generatedArtifactTest); - - assertEquals(artifactType, artifact.getArtifactType()); - assertEquals(url, artifact.getArtifactURL()); - assertEquals("artifactChecksum", artifact.getArtifactChecksum()); - assertEquals("artifactDescription", artifact.getArtifactDescription()); - assertEquals("artifactName", artifact.getArtifactName()); - assertEquals(Integer.valueOf(1000), artifact.getArtifactTimeout()); - assertEquals("ae04b88e-e2ee-4ce9-a62d-3d08cf0f46db", artifact.getArtifactUUID()); - assertEquals("artifactVersion", artifact.getArtifactVersion()); - assertEquals(generatedArtifactTest, artifact.getGeneratedArtifact()); - - } +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.model.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.pomba.contextbuilder.sdc.model.ArtifactInfo; +import org.onap.sdc.api.notification.IArtifactInfo; + +public class ArtifactInfoTest { + + @Test + public void testArtifactInfo() throws Exception { + String url = "/sdc/v1/catalog/services/e9851a43-c068-4eb2-9fe7-2d123bd94ff0/toscaModel"; + String artifactType = "TOSCA_CSAR"; + ArtifactInfo artifact = new ArtifactInfo(); + artifact.setArtifactType(artifactType); + artifact.setArtifactURL(url); + artifact.setArtifactChecksum("artifactChecksum"); + artifact.setArtifactDescription("artifactDescription"); + artifact.setArtifactName("artifactName"); + artifact.setArtifactTimeout(1000); + artifact.setArtifactUUID("ae04b88e-e2ee-4ce9-a62d-3d08cf0f46db"); + artifact.setArtifactVersion("artifactVersion"); + + ArtifactInfo artifact2 = new ArtifactInfo(); + + artifact2.equals(artifact); + artifact.toString(); + artifact.hashCode(); + + IArtifactInfo generatedArtifactTest = (IArtifactInfo)artifact; + artifact.setGeneratedArtifact(generatedArtifactTest); + + + assertEquals(artifactType, artifact.getArtifactType()); + assertEquals(url, artifact.getArtifactURL()); + assertEquals("artifactChecksum", artifact.getArtifactChecksum()); + assertEquals("artifactDescription", artifact.getArtifactDescription()); + assertEquals("artifactName", artifact.getArtifactName()); + assertEquals(Integer.valueOf(1000), artifact.getArtifactTimeout()); + assertEquals("ae04b88e-e2ee-4ce9-a62d-3d08cf0f46db", artifact.getArtifactUUID()); + assertEquals("artifactVersion", artifact.getArtifactVersion()); + assertEquals(generatedArtifactTest, artifact.getGeneratedArtifact()); + + } } \ No newline at end of file diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdc/test/SDCClientConfigurationTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdc/test/SDCClientConfigurationTest.java index 7bd5f86..acaff43 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdc/test/SDCClientConfigurationTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdc/test/SDCClientConfigurationTest.java @@ -1,65 +1,43 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.test; - -import static org.junit.Assert.assertEquals; - -import org.eclipse.jetty.util.security.Password; -import org.junit.Test; -import org.onap.pomba.contextbuilder.sdc.SDCClientConfiguration; -import org.onap.sdc.api.consumer.IConfiguration; -import org.onap.sdc.http.SdcConnectorClient; - -public class SDCClientConfigurationTest { - - @Test - public void testSDCClientConfig() throws Exception { - SDCClientConfiguration config = new SDCClientConfiguration(); - config.setUsername("pomba"); - config.setSdcAddress("10.147.58.6:30204"); - config.setPassword("OBF:1uha1uh81w8v1ugi1ugg"); - config.setConsumerID("consumerID"); - config.setPollingTimeout("6666"); - - assertEquals("pomba", config.getUsername()); - assertEquals("10.147.58.6:30204", config.getSdcAddress()); - assertEquals("consumerID", config.getConsumerID()); - assertEquals("pomba", Password.deobfuscate(config.getPassword())); - assertEquals("6666", config.getPollingTimeout()); - - SdcConnectorClient sdcClient = config.asdcConnectorClient(); - IConfiguration sdcClientConfig = sdcClient.getConfiguration(); - assertEquals("pomba", sdcClientConfig.getUser()); - assertEquals("10.147.58.6:30204", sdcClientConfig.getAsdcAddress()); - assertEquals("consumerID", sdcClientConfig.getConsumerID()); - assertEquals("pomba", sdcClientConfig.getPassword()); - assertEquals(6666, sdcClientConfig.getPollingTimeout()); - - } - - - @Test - public void testGetHttpBasicAuth() { - String msg = "Basic YWRtaW46YWRtaW4="; - SDCClientConfiguration config = new SDCClientConfiguration(); - config.setHttpUserId("admin"); - config.setHttpPassword("OBF:1u2a1toa1w8v1tok1u30"); - assertEquals(msg, config.getHttpBasicAuth()); - } -} +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.test; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.onap.pomba.contextbuilder.sdc.SDCClientConfiguration; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class SDCClientConfigurationTest { + SDCClientConfiguration configuration = mock(SDCClientConfiguration.class); + + @Test + public void testGetHttpBasicAuth() { + + SDCClientConfiguration configuration2 = new SDCClientConfiguration(); + configuration2.equals(configuration); + configuration.hashCode(); + configuration.toString(); + + String msg = "Basic YWRtaW46YWRtaW4="; + when(configuration.getHttpBasicAuth()).thenReturn(msg); + assertEquals(msg, configuration.getHttpBasicAuth()); + } +} diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdc/test/ToscaBuildConfigTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdc/test/ToscaBuildConfigTest.java index b865dc1..964e2bb 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdc/test/ToscaBuildConfigTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdc/test/ToscaBuildConfigTest.java @@ -1,56 +1,60 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.test; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import org.junit.Test; -import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig; - -public class ToscaBuildConfigTest { - - - @Test - public void testToscaBuilderConfig() throws Exception { - - String urlTemplate = "/sdc/v1/catalog/services/e9851a43-c068-4eb2-9fe7-2d123bd94ff0/toscaModel"; - ToscaBuilderConfig configTest = new ToscaBuilderConfig(); - configTest.setCsarFilePrefix("csar-"); - configTest.setCsarFileSuffix(".zip"); - configTest.setArtifactType("TOSCA_CSAR"); - configTest.setUrlTemplate(urlTemplate); - configTest.setTestToscaCsarFile("/src/test/toscaModel.zip"); - - assertEquals("csar-", configTest.getCsarFilePrefix()); - assertEquals(".zip", configTest.getCsarFileSuffix()); - assertEquals("TOSCA_CSAR", configTest.getArtifactType()); - assertEquals(urlTemplate, configTest.getUrlTemplate()); - assertEquals("/src/test/toscaModel.zip", configTest.getTestToscaCsarFile()); - - String str = configTest.toString(); - assertTrue(str.contains("TOSCA_CSAR")); - assertTrue(str.contains("csar-")); - assertTrue(str.contains(".zip")); - assertTrue(str.contains("/sdc/v1/catalog/services/e9851a43-c068-4eb2-9fe7-2d123bd94ff0/toscaModel")); - assertTrue(str.contains("/src/test/toscaModel.zip")); - - } - -} +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.test; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import org.junit.Test; +import org.onap.pomba.contextbuilder.sdc.ToscaBuilderConfig; + +public class ToscaBuildConfigTest { + + + @Test + public void testToscaBuilderConfig() throws Exception { + + ToscaBuilderConfig configTest = mock(ToscaBuilderConfig.class); + + ToscaBuilderConfig configTest2 = new ToscaBuilderConfig(); + configTest.equals(configTest2); + configTest.toString(); + configTest.hashCode(); + + String fPrefix = "csar-"; + when(configTest.getCsarFilePrefix()).thenReturn(fPrefix); + String fSuffix = ".zip"; + when(configTest.getCsarFileSuffix()).thenReturn(fSuffix); + String artifactType = "TOSCA_CSAR"; + when(configTest.getArtifactType()).thenReturn(artifactType); + String urlTemplate = "/sdc/v1/catalog/services/e9851a43-c068-4eb2-9fe7-2d123bd94ff0/toscaModel"; + when(configTest.getUrlTemplate()).thenReturn(urlTemplate); + String toscaCsarFile = "/src/test/toscaModel.zip"; + configTest.setTestToscaCsarFile(toscaCsarFile); + when(configTest.getTestToscaCsarFile()).thenReturn(toscaCsarFile); + + configTest.toString(); + assertEquals("csar-", configTest.getCsarFilePrefix()); + assertEquals(".zip", configTest.getCsarFileSuffix()); + assertEquals("TOSCA_CSAR", configTest.getArtifactType()); + assertEquals(urlTemplate, configTest.getUrlTemplate()); + assertEquals("/src/test/toscaModel.zip", configTest.getTestToscaCsarFile()); + } + +} diff --git a/src/test/java/org/onap/pomba/contextbuilder/sdc/unittest/service/SDCContextBuilderTest.java b/src/test/java/org/onap/pomba/contextbuilder/sdc/unittest/service/SDCContextBuilderTest.java index 1dd000c..b889b9d 100644 --- a/src/test/java/org/onap/pomba/contextbuilder/sdc/unittest/service/SDCContextBuilderTest.java +++ b/src/test/java/org/onap/pomba/contextbuilder/sdc/unittest/service/SDCContextBuilderTest.java @@ -1,186 +1,206 @@ -/* - * ============LICENSE_START=================================================== - * Copyright (c) 2018 Amdocs - * ============================================================================ - * 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.pomba.contextbuilder.sdc.unittest.service; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; - -import java.nio.charset.StandardCharsets; -import java.nio.file.Paths; -import java.util.Base64; -import java.util.UUID; -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest; -import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; -import org.onap.pomba.contextbuilder.sdc.service.SpringService; -import org.onap.pomba.contextbuilder.sdc.service.rs.RestService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; -import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import org.springframework.test.context.web.WebAppConfiguration; - - -@RunWith(SpringJUnit4ClassRunner.class) -@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) -@WebAppConfiguration -@SpringBootTest -public class SDCContextBuilderTest { - - static { - System.setProperty("test.tosca.csar.file", - Paths.get(System.getProperty("user.dir"), - "src/test/resources/toscaModel.csar.zip").toString()); - } - - - @Autowired - private RestService service; - @Autowired - private SpringService springService; - - - private String authorization = "Basic " - + Base64.getEncoder() - .encodeToString(("admin" + ":" + "admin") - .getBytes(StandardCharsets.UTF_8)); - private String fromAppId = "POMBA"; - private String transactionId = UUID.randomUUID().toString(); - private String serviceInstanceId = "b06270ab-99e6-4a58-9bc0-db2df5c36f4d"; - private String modelVersionId = "e9851a43-c068-4eb2-9fe7-2d123bd94ff0"; - private String modelInvariantId = "4fd21763-23ed-4f69-8654-e121626df327" ; - - @Before - public void setUp() throws Exception { - } - - @After - public void tearDown() throws Exception { - } - - - @Test - public void testNoAuthHeader() throws Exception { - Response response = this.service.getContext(null, - fromAppId, - transactionId, - serviceInstanceId, - modelVersionId, - modelInvariantId); - assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); - - } - - @Test - public void testBadAuthoriztion() throws Exception { - String authorizationTest = "Basic " - + Base64.getEncoder() - .encodeToString(("Test" + ":" + "Fake") - .getBytes(StandardCharsets.UTF_8)); - Response response = this.service.getContext(authorizationTest, - fromAppId, - transactionId, - serviceInstanceId, - modelVersionId, - modelInvariantId); - assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); - } - - @Test - public void testNullXFromAppId() throws Exception { - Response response = this.service.getContext(authorization, - null, - transactionId, - serviceInstanceId, - modelVersionId, - modelInvariantId); - assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertTrue(((String)response.getEntity()).contains("X-FromAppId")); - } - - - @Test - public void testEmptyXFromAppId() throws Exception { - Response response = this.service.getContext(authorization, - "", - transactionId, - serviceInstanceId, - modelVersionId, - modelInvariantId); - assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertTrue(((String)response.getEntity()).contains("X-FromAppId")); - } - - - @Test - public void testNullModelVersionId() throws Exception { - Response response = this.service.getContext(authorization, - fromAppId, - transactionId, - serviceInstanceId, - null, - modelInvariantId); - assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertTrue(((String)response.getEntity()).contains("modelVersionId")); - } - - - @Test - public void testEmptyModelVersionId() throws Exception { - Response response = this.service.getContext(authorization, - fromAppId, - transactionId, - serviceInstanceId, - "", - modelInvariantId); - assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); - assertTrue(((String)response.getEntity()).contains("modelVersionId")); - } - - - @Test - public void testRestAPISuccess() throws Exception { - Response response = this.service.getContext(authorization, - fromAppId, - transactionId, - serviceInstanceId, - modelVersionId, - modelInvariantId); - assertEquals(200, response.getStatus()); - } - - - @Test - public void testSDCContextResponse() throws Exception { - SDCContextRequest request = new SDCContextRequest(null, authorization, fromAppId, transactionId, - serviceInstanceId, modelVersionId, modelInvariantId); - SDCContextResponse sdcResponse = springService.getModelData(request); - assertTrue(sdcResponse.getModelData().contains("service")); - assertTrue(sdcResponse.getModelData().contains("vnfList")); - } - - -} +/* + * ============LICENSE_START=================================================== + * Copyright (c) 2018 Amdocs + * ============================================================================ + * 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.pomba.contextbuilder.sdc.unittest.service; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import java.nio.charset.StandardCharsets; +import java.nio.file.Paths; +import java.util.Base64; +import java.util.UUID; +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextRequest; +import org.onap.pomba.contextbuilder.sdc.model.SDCContextResponse; +import org.onap.pomba.contextbuilder.sdc.service.SpringService; +import org.onap.pomba.contextbuilder.sdc.service.rs.RestService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.EnableAutoConfiguration; +import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; +import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import org.springframework.test.context.web.WebAppConfiguration; + +import java.util.List; +import org.onap.pomba.common.datatypes.ModelContext; +import org.onap.pomba.common.datatypes.VFModule; +import org.onap.pomba.common.datatypes.VNF; +import com.google.gson.Gson; + +@RunWith(SpringJUnit4ClassRunner.class) +@EnableAutoConfiguration(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class }) +@WebAppConfiguration +@SpringBootTest +public class SDCContextBuilderTest { + + static { + System.setProperty("test.tosca.csar.file", + Paths.get(System.getProperty("user.dir"), + "src/test/resources/toscaModel.csar.zip").toString()); + } + + + @Autowired + private RestService service; + @Autowired + private SpringService springService; + + + private String authorization = "Basic " + + Base64.getEncoder() + .encodeToString(("admin" + ":" + "admin") + .getBytes(StandardCharsets.UTF_8)); + private String fromAppId = "POMBA"; + private String transactionId = UUID.randomUUID().toString(); + private String serviceInstanceId = "b06270ab-99e6-4a58-9bc0-db2df5c36f4d"; + private String modelVersionId = "f55354f4-da10-48ee-b4a5-cca31cdebc72"; + private String modelInvariantId = "4fd21763-23ed-4f69-8654-e121626df327" ; + + @Before + public void setUp() throws Exception { + } + + @After + public void tearDown() throws Exception { + } + + + @Test + public void testNoAuthHeader() throws Exception { + Response response = this.service.getContext(null, + fromAppId, + transactionId, + serviceInstanceId, + modelVersionId, + modelInvariantId); + assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); + + } + + @Test + public void testBadAuthoriztion() throws Exception { + String authorizationTest = "Basic " + + Base64.getEncoder() + .encodeToString(("Test" + ":" + "Fake") + .getBytes(StandardCharsets.UTF_8)); + Response response = this.service.getContext(authorizationTest, + fromAppId, + transactionId, + serviceInstanceId, + modelVersionId, + modelInvariantId); + assertEquals(Status.UNAUTHORIZED.getStatusCode(), response.getStatus()); + } + + @Test + public void testNullXFromAppId() throws Exception { + Response response = this.service.getContext(authorization, + null, + transactionId, + serviceInstanceId, + modelVersionId, + modelInvariantId); + assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertTrue(((String)response.getEntity()).contains("X-FromAppId")); + } + + + @Test + public void testEmptyXFromAppId() throws Exception { + Response response = this.service.getContext(authorization, + "", + transactionId, + serviceInstanceId, + modelVersionId, + modelInvariantId); + assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertTrue(((String)response.getEntity()).contains("X-FromAppId")); + } + + + @Test + public void testNullModelVersionId() throws Exception { + Response response = this.service.getContext(authorization, + fromAppId, + transactionId, + serviceInstanceId, + null, + modelInvariantId); + assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertTrue(((String)response.getEntity()).contains("modelVersionId")); + } + + + @Test + public void testEmptyModelVersionId() throws Exception { + Response response = this.service.getContext(authorization, + fromAppId, + transactionId, + serviceInstanceId, + "", + modelInvariantId); + assertEquals(Status.BAD_REQUEST.getStatusCode(), response.getStatus()); + assertTrue(((String)response.getEntity()).contains("modelVersionId")); + } + + + @Test + public void testRestAPISuccess() throws Exception { + Response response = this.service.getContext(authorization, + fromAppId, + transactionId, + serviceInstanceId, + modelVersionId, + modelInvariantId); + assertEquals(200, response.getStatus()); + + Gson gson = new Gson(); + ModelContext modelCtx = gson.fromJson((String) response.getEntity(), ModelContext.class); + + + // verify results + assertEquals(serviceInstanceId, modelCtx.getService().getUuid()); + assertEquals(modelVersionId, modelCtx.getService().getModelVersionID()); + + List vnfList = modelCtx.getVnfs(); + assertEquals(vnfList.size(), 1); + List vfModuleList = vnfList.get(0).getVfModules(); + assertEquals(vfModuleList.size(), 1); + assertEquals("8e363c35-60eb-45c0-9f14-2f3936f460c9",vfModuleList.get(0).getModelVersionID() ); // ModelVersionId was set to vfModuleModelUUID of test data + + } + + + @Test + public void testSDCContextResponse() throws Exception { + SDCContextRequest request = new SDCContextRequest(null, authorization, fromAppId, transactionId, + serviceInstanceId, modelVersionId, modelInvariantId); + SDCContextResponse sdcResponse = springService.getModelData(request); + assertTrue(sdcResponse.getModelData().contains("service")); + assertTrue(sdcResponse.getModelData().contains("vnfList")); + } + + +} -- cgit 1.2.3-korg