From 26788e7e2f25cd296efa187cb5c911843d00c9a8 Mon Sep 17 00:00:00 2001 From: Tomasz Golabek Date: Thu, 21 Feb 2019 14:05:41 +0100 Subject: [PATCH] Parsing CSAR to retrieve policy model Content of policies.xml taken from the CSAR file and ready to store into the db. Change-Id: I9ee0d0474fa355ae4c9db1e1ee40a3f087002e88 Issue-ID: CLAMP-261 Signed-off-by: Tomasz Golabek --- .../exception/policy/PolicyModelException.java | 31 +++++++++++++++++++++ .../clds/sdc/controller/SdcSingleController.java | 7 ++++- .../clds/sdc/controller/installer/CsarHandler.java | 15 ++++++++++ .../sdc/controller/installer/CsarInstaller.java | 4 ++- .../controller/installer/CsarInstallerImpl.java | 15 +++++++++- .../controller/installer/CsarInstallerItCase.java | 7 +++-- .../sdc/controller/installer/CsarHandlerTest.java | 25 +++++++++++++++++ .../example/sdc/service-without-policy.csar | Bin 0 -> 56126 bytes 8 files changed, 98 insertions(+), 6 deletions(-) create mode 100644 src/main/java/org/onap/clamp/clds/exception/policy/PolicyModelException.java create mode 100644 src/test/resources/example/sdc/service-without-policy.csar diff --git a/src/main/java/org/onap/clamp/clds/exception/policy/PolicyModelException.java b/src/main/java/org/onap/clamp/clds/exception/policy/PolicyModelException.java new file mode 100644 index 000000000..0b64b78ea --- /dev/null +++ b/src/main/java/org/onap/clamp/clds/exception/policy/PolicyModelException.java @@ -0,0 +1,31 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia Intellectual Property. All rights + * reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END============================================ + * =================================================================== + * + */ + +package org.onap.clamp.clds.exception.policy; + +public class PolicyModelException extends Exception { + + public PolicyModelException(String msg, Throwable throwable) { + super(msg, throwable); + } +} diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java index 5959c0fb5..c9405d202 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/SdcSingleController.java @@ -33,6 +33,7 @@ import java.util.concurrent.ThreadLocalRandom; import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.config.sdc.SdcSingleControllerConfiguration; +import org.onap.clamp.clds.exception.policy.PolicyModelException; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.exception.sdc.controller.SdcControllerException; @@ -257,6 +258,10 @@ public class SdcSingleController { logger.error("SdcDownloadException exception caught during the notification processing", e); sendAllNotificationForCsarHandler(iNotif, csar, NotificationType.DOWNLOAD, DistributionStatusEnum.DOWNLOAD_ERROR, e.getMessage()); + } catch (PolicyModelException e) { + logger.error("PolicyModelException exception caught during the notification processing", e); + sendAllNotificationForCsarHandler(iNotif, csar, NotificationType.DEPLOY, + DistributionStatusEnum.DEPLOY_ERROR, e.getMessage()); } catch (InterruptedException e) { logger.error("Interrupt exception caught during the notification processing", e); sendAllNotificationForCsarHandler(iNotif, csar, NotificationType.DEPLOY, @@ -266,7 +271,7 @@ public class SdcSingleController { logger.error("Unexpected exception caught during the notification processing", e); sendAllNotificationForCsarHandler(iNotif, csar, NotificationType.DEPLOY, DistributionStatusEnum.DEPLOY_ERROR, e.getMessage()); - } finally { + } finally { this.changeControllerStatus(SdcSingleControllerStatus.IDLE); } } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java index 1a99919ee..f2c75ef28 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java @@ -36,6 +36,7 @@ import java.util.Enumeration; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; @@ -68,6 +69,7 @@ public class CsarHandler { private INotificationData sdcNotification; public static final String RESOURCE_INSTANCE_NAME_PREFIX = "/Artifacts/Resources/"; public static final String RESOURCE_INSTANCE_NAME_SUFFIX = "/Deployment/"; + public static final String POLICY_DEFINITION_NAME_SUFFIX = "Definitions/policies.yml"; public CsarHandler(INotificationData iNotif, String controller, String clampCsarPath) throws CsarHandlerException { this.sdcNotification = iNotif; @@ -167,4 +169,17 @@ public class CsarHandler { public Map getMapOfBlueprints() { return mapOfBlueprints; } + + Optional getPolicyModelYaml() throws IOException { + String result = null; + try (ZipFile zipFile = new ZipFile(csarFilePath)) { + ZipEntry entry = zipFile.getEntry(POLICY_DEFINITION_NAME_SUFFIX); + if (entry != null) { + result = IOUtils.toString(zipFile.getInputStream(entry)); + } else{ + logger.info("Policy model not found inside the CSAR file: " + csarFilePath); + } + return Optional.ofNullable(result); + } + } } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java index b5c025ecb..12a761dbf 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstaller.java @@ -23,11 +23,13 @@ package org.onap.clamp.clds.sdc.controller.installer; +import org.onap.clamp.clds.exception.policy.PolicyModelException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; public interface CsarInstaller { boolean isCsarAlreadyDeployed(CsarHandler csar) throws SdcArtifactInstallerException; - public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException; + public void installTheCsar(CsarHandler csar) + throws SdcArtifactInstallerException, InterruptedException, PolicyModelException; } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java index bfda6924d..6841b87b0 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarInstallerImpl.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import javax.annotation.PostConstruct; import javax.xml.transform.TransformerException; @@ -43,6 +44,7 @@ import org.onap.clamp.clds.client.DcaeInventoryServices; import org.onap.clamp.clds.config.sdc.BlueprintParserFilesConfiguration; import org.onap.clamp.clds.config.sdc.BlueprintParserMappingConfiguration; import org.onap.clamp.clds.dao.CldsDao; +import org.onap.clamp.clds.exception.policy.PolicyModelException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.model.CldsModel; import org.onap.clamp.clds.model.CldsTemplate; @@ -125,7 +127,8 @@ public class CsarInstallerImpl implements CsarInstaller { @Override @Transactional - public void installTheCsar(CsarHandler csar) throws SdcArtifactInstallerException, InterruptedException { + public void installTheCsar(CsarHandler csar) + throws SdcArtifactInstallerException, InterruptedException, PolicyModelException { try { logger.info("Installing the CSAR " + csar.getFilePath()); for (Entry blueprint : csar.getMapOfBlueprints().entrySet()) { @@ -135,6 +138,7 @@ public class CsarInstallerImpl implements CsarInstaller { this.searchForRightMapping(blueprint.getValue())), queryDcaeToGetServiceTypeId(blueprint.getValue())); } + createPolicyModel(csar); logger.info("Successfully installed the CSAR " + csar.getFilePath()); } catch (IOException e) { throw new SdcArtifactInstallerException("Exception caught during the Csar installation in database", e); @@ -143,6 +147,15 @@ public class CsarInstallerImpl implements CsarInstaller { } } + private void createPolicyModel(CsarHandler csar) throws PolicyModelException { + try{ + Optional policyModelYaml = csar.getPolicyModelYaml(); + // save policy model into the database + } catch (IOException e) { + throw new PolicyModelException("TransformerException when decoding the YamlText", e); + } + } + private BlueprintParserFilesConfiguration searchForRightMapping(BlueprintArtifact blueprintArtifact) throws SdcArtifactInstallerException { List listConfig = new ArrayList<>(); diff --git a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java index 2c24dcb5c..0df252388 100644 --- a/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java +++ b/src/test/java/org/onap/clamp/clds/it/sdc/controller/installer/CsarInstallerItCase.java @@ -42,6 +42,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.onap.clamp.clds.dao.CldsDao; +import org.onap.clamp.clds.exception.policy.PolicyModelException; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.clamp.clds.model.CldsModel; @@ -78,7 +79,7 @@ public class CsarInstallerItCase { @Test(expected = SdcArtifactInstallerException.class) public void testInstallTheCsarFail() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, InterruptedException { + CsarHandlerException, IOException, InterruptedException, PolicyModelException { CsarHandler csarHandler = Mockito.mock(CsarHandler.class); BlueprintArtifact blueprintArtifact = Mockito.mock(BlueprintArtifact.class); Mockito.when(blueprintArtifact.getResourceAttached()).thenReturn(Mockito.mock(IResourceInstance.class)); @@ -145,7 +146,7 @@ public class CsarInstallerItCase { @Test public void testIsCsarAlreadyDeployedTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, InterruptedException { + CsarHandlerException, IOException, InterruptedException, PolicyModelException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csarHandler = buildFakeCsarHandler(generatedName); assertFalse(csarInstaller.isCsarAlreadyDeployed(csarHandler)); @@ -155,7 +156,7 @@ public class CsarInstallerItCase { @Test public void testInstallTheCsarTca() throws SdcArtifactInstallerException, SdcToscaParserException, - CsarHandlerException, IOException, JSONException, InterruptedException { + CsarHandlerException, IOException, JSONException, InterruptedException, PolicyModelException { String generatedName = RandomStringUtils.randomAlphanumeric(5); CsarHandler csar = buildFakeCsarHandler(generatedName); csarInstaller.installTheCsar(csar); diff --git a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java index bb4fd01f2..544c8ca1d 100644 --- a/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java +++ b/src/test/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandlerTest.java @@ -24,6 +24,7 @@ package org.onap.clamp.clds.sdc.controller.installer; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -115,6 +116,13 @@ public class CsarHandlerTest { return resultArtifact; } + private IDistributionClientDownloadResult buildFakeSdcResultWithoutPolicyModel() throws IOException { + IDistributionClientDownloadResult resultArtifact = Mockito.mock(IDistributionClientDownloadResult.class); + Mockito.when(resultArtifact.getArtifactPayload()).thenReturn( + IOUtils.toByteArray(ResourceFileUtil.getResourceAsStream("example/sdc/service-without-policy.csar"))); + return resultArtifact; + } + @Test public void testSave() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException { @@ -147,6 +155,23 @@ public class CsarHandlerTest { } + @Test + public void testLoadingOfPolicyModelFromCsar() + throws CsarHandlerException, IOException, SdcArtifactInstallerException, SdcToscaParserException { + CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests"); + csar.save(buildFakeSdcResut()); + String policyModelYaml = csar.getPolicyModelYaml().get(); + assertTrue(policyModelYaml.contains("tosca_simple_yaml_1_1")); + } + + @Test + public void testLoadingOfNonexistentPolicyModelFromCsar() + throws CsarHandlerException, IOException, SdcArtifactInstallerException, SdcToscaParserException { + CsarHandler csar = new CsarHandler(buildFakeSdcNotification(), "test-controller", "/tmp/csar-handler-tests"); + csar.save(buildFakeSdcResultWithoutPolicyModel()); + assertFalse(csar.getPolicyModelYaml().isPresent()); + } + @Test public void testDoubleSave() throws SdcArtifactInstallerException, SdcToscaParserException, CsarHandlerException, IOException { diff --git a/src/test/resources/example/sdc/service-without-policy.csar b/src/test/resources/example/sdc/service-without-policy.csar new file mode 100644 index 0000000000000000000000000000000000000000..20c4eef65b7225398c60b9b139e66357391e03e9 GIT binary patch literal 56126 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≷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 NK2?Dz