From: sebdet Date: Thu, 28 May 2020 15:26:39 +0000 (+0200) Subject: Fix crash at SDC deploy X-Git-Tag: 5.1.0~43^2~1 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=clamp.git;a=commitdiff_plain;h=badc1b5e02d60e15d08e231883cf74d2a28d92e1 Fix crash at SDC deploy If CDS properties are not there, it can crash a standard VF resource blueprint deployment. Issue-ID: CLAMP-857 Signed-off-by: sebdet Change-Id: I4172427046250fed52984c2b94531370727f0fa0 --- diff --git a/src/main/java/org/onap/clamp/loop/cds/CdsDataInstaller.java b/src/main/java/org/onap/clamp/loop/cds/CdsDataInstaller.java index 9c1cd3bc..d18cae1d 100644 --- a/src/main/java/org/onap/clamp/loop/cds/CdsDataInstaller.java +++ b/src/main/java/org/onap/clamp/loop/cds/CdsDataInstaller.java @@ -73,18 +73,23 @@ public class CdsDataInstaller { for (NodeTemplate nodeTemplate : csar.getSdcCsarHelper().getServiceNodeTemplateBySdcType(type)) { // get cds artifact information and save in resources Prop if (SdcTypes.PNF == type || SdcTypes.VF == type) { - JsonObject controllerProperties = createCdsArtifactProperties(nodeTemplate.getPropertyValue( - SDNC_MODEL_NAME).toString(), - nodeTemplate.getPropertyValue(SDNC_MODEL_VERSION).toString()); + JsonObject controllerProperties = createCdsArtifactProperties( + String.valueOf(nodeTemplate.getPropertyValue(SDNC_MODEL_NAME)), + String.valueOf(nodeTemplate.getPropertyValue(SDNC_MODEL_VERSION))); if (controllerProperties != null) { resourcesPropByType.getAsJsonObject(nodeTemplate.getName()) .add(CONTROLLER_PROPERTIES, controllerProperties); + logger.info("Successfully installed the CDS data in Service"); + } + else { + logger.warn("Skipping CDS data installation in Service, as sdnc_model_name and " + + "sdnc_model_version are not provided in the CSAR"); } } } } serviceRepository.save(service); - logger.info("Successfully installed the CDS data in Service"); + return service; } @@ -129,7 +134,8 @@ public class CdsDataInstaller { * @return Returns CDS artifacts information */ private JsonObject createCdsArtifactProperties(String sdncModelName, String sdncModelVersion) { - if (sdncModelName != null && sdncModelVersion != null) { + if (sdncModelName != null && !"null".equals(sdncModelName) + && sdncModelVersion != null && !"null".equals(sdncModelVersion)) { JsonObject controllerProperties = new JsonObject(); controllerProperties.addProperty(SDNC_MODEL_NAME, sdncModelName); controllerProperties.addProperty(SDNC_MODEL_VERSION, sdncModelVersion); diff --git a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java index 7e148860..ffb9244d 100644 --- a/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/loop/CsarInstallerItCase.java @@ -77,7 +77,8 @@ import org.springframework.test.context.junit4.SpringRunner; @ActiveProfiles(profiles = "clamp-default,clamp-default-user,clamp-sdc-controller,legacy-operational-policy") public class CsarInstallerItCase { - private static final String CSAR_ARTIFACT_NAME = "example/sdc/service_Vloadbalancerms_csar.csar"; + private static final String CSAR_ARTIFACT_NAME_CDS = "example/sdc/service_Vloadbalancerms_cds.csar"; + private static final String CSAR_ARTIFACT_NAME_NO_CDS = "example/sdc/service_Vloadbalancerms_no_cds.csar"; private static final String INVARIANT_SERVICE_UUID = "4cc5b45a-1f63-4194-8100-cd8e14248c92"; private static final String INVARIANT_RESOURCE1_UUID = "07e266fc-49ab-4cd7-8378-ca4676f1b9ec"; private static final String INVARIANT_RESOURCE2_UUID = "023a3f0d-1161-45ff-b4cf-8918a8ccf3ad"; @@ -112,7 +113,8 @@ public class CsarInstallerItCase { return blueprintArtifact; } - private CsarHandler buildFakeCsarHandler(String generatedName) throws IOException, SdcToscaParserException { + private CsarHandler buildFakeCsarHandler(String generatedName, String csarFileName) throws IOException, + SdcToscaParserException { // Create fake notification INotificationData notificationData = Mockito.mock(INotificationData.class); Mockito.when(notificationData.getServiceVersion()).thenReturn("1.0"); @@ -151,7 +153,7 @@ public class CsarInstallerItCase { // Create helper based on real csar to test policy yaml and global properties // set SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance(); - String path = Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME).getFile(); + String path = Thread.currentThread().getContextClassLoader().getResource(csarFileName).getFile(); ISdcCsarHelper sdcHelper = factory.getSdcCsarHelper(path); Mockito.when(csarHandler.getSdcCsarHelper()).thenReturn(sdcHelper); @@ -180,7 +182,7 @@ public class CsarInstallerItCase { CsarHandler csarHandler = new CsarHandler(notificationData, "", ""); csarHandler - .setFilePath(Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME).getFile()); + .setFilePath(Thread.currentThread().getContextClassLoader().getResource(CSAR_ARTIFACT_NAME_CDS).getFile()); Assert.assertEquals(csarHandler.getPolicyModelYaml(), Optional .ofNullable(ResourceFileUtil.getResourceAsString("example/sdc/expected-result/policy-data.yaml"))); } @@ -190,7 +192,19 @@ public class CsarInstallerItCase { public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException, InterruptedException, BlueprintParserException { String generatedName = RandomStringUtils.randomAlphanumeric(5); - CsarHandler csarHandler = buildFakeCsarHandler(generatedName); + CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); + csarInstaller.installTheCsar(csarHandler); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); + } + + @Test + @Transactional + public void testWithoutCdsTca() throws SdcArtifactInstallerException, SdcToscaParserException, + CsarHandlerException, IOException, InterruptedException, BlueprintParserException { + String generatedName = RandomStringUtils.randomAlphanumeric(5); + CsarHandler csarHandler = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_NO_CDS); + assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isFalse(); csarInstaller.installTheCsar(csarHandler); assertThat(csarInstaller.isCsarAlreadyDeployed(csarHandler)).isTrue(); @@ -202,7 +216,7 @@ public class CsarInstallerItCase { public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException, JSONException, InterruptedException, BlueprintParserException { String generatedName = RandomStringUtils.randomAlphanumeric(5); - CsarHandler csar = buildFakeCsarHandler(generatedName); + CsarHandler csar = buildFakeCsarHandler(generatedName, CSAR_ARTIFACT_NAME_CDS); csarInstaller.installTheCsar(csar); assertThat(serviceRepository.existsById("63cac700-ab9a-4115-a74f-7eac85e3fce0")).isTrue(); // We should have CDS info diff --git a/src/test/resources/example/sdc/service_Vloadbalancerms_csar.csar b/src/test/resources/example/sdc/service_Vloadbalancerms_cds.csar similarity index 100% rename from src/test/resources/example/sdc/service_Vloadbalancerms_csar.csar rename to src/test/resources/example/sdc/service_Vloadbalancerms_cds.csar diff --git a/src/test/resources/example/sdc/service_Vloadbalancerms_no_cds.csar b/src/test/resources/example/sdc/service_Vloadbalancerms_no_cds.csar new file mode 100644 index 00000000..3330dd1e Binary files /dev/null and b/src/test/resources/example/sdc/service_Vloadbalancerms_no_cds.csar differ