aboutsummaryrefslogtreecommitdiffstats
path: root/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java')
-rw-r--r--test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java460
1 files changed, 460 insertions, 0 deletions
diff --git a/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java
new file mode 100644
index 0000000000..650ed619b7
--- /dev/null
+++ b/test-apis-ci/src/main/java/org/openecomp/sdc/ci/tests/execute/imports/CsarUtilsTest.java
@@ -0,0 +1,460 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * SDC
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.openecomp.sdc.ci.tests.execute.imports;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import java.io.ByteArrayInputStream;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipInputStream;
+
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
+import org.junit.Rule;
+import org.junit.rules.TestName;
+import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
+import org.openecomp.sdc.be.model.ArtifactUiDownloadData;
+import org.openecomp.sdc.be.model.Component;
+import org.openecomp.sdc.be.model.Resource;
+import org.openecomp.sdc.be.model.Service;
+import org.openecomp.sdc.be.model.User;
+import org.openecomp.sdc.ci.tests.api.ComponentBaseTest;
+import org.openecomp.sdc.ci.tests.datatypes.enums.ArtifactTypeEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.LifeCycleStatesEnum;
+import org.openecomp.sdc.ci.tests.datatypes.enums.UserRoleEnum;
+import org.openecomp.sdc.ci.tests.datatypes.http.RestResponse;
+import org.openecomp.sdc.ci.tests.utils.general.AtomicOperationUtils;
+import org.openecomp.sdc.ci.tests.utils.general.ElementFactory;
+import org.openecomp.sdc.ci.tests.utils.rest.ArtifactRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.BaseRestUtils;
+import org.openecomp.sdc.ci.tests.utils.rest.ResponseParser;
+import org.openecomp.sdc.common.util.YamlToObjectConverter;
+import org.testng.annotations.Test;
+import org.yaml.snakeyaml.Yaml;
+
+public class CsarUtilsTest extends ComponentBaseTest {
+
+ public static final String ASSET_TOSCA_TEMPLATE = "assettoscatemplate";
+
+ @Rule
+ public static TestName name = new TestName();
+
+ public CsarUtilsTest() {
+ super(name, CsarUtilsTest.class.getName());
+ }
+
+ @Test(enabled = true)
+ public void createServiceCsarBasicTest() throws Exception {
+
+ Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
+
+ Resource resourceVF = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
+
+ AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.VENDOR_LICENSE, resourceVF, UserRoleEnum.DESIGNER,
+ true, true);
+ resourceVF = (Resource) AtomicOperationUtils
+ .changeComponentState(resourceVF, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceVF, service, UserRoleEnum.DESIGNER, true);
+
+ service = (Service) AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
+
+ byte[] downloadCSAR = downloadCSAR(sdncModifierDetails, service);
+
+ csarBasicValidation(service, downloadCSAR);
+ }
+
+ @Test(enabled = true)
+ public void createResourceCsarBasicTest() throws Exception {
+
+ Resource resourceVF = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
+ resourceVF = (Resource) AtomicOperationUtils
+ .changeComponentState(resourceVF, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+ User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
+
+ byte[] downloadCSAR = downloadCSAR(sdncModifierDetails, resourceVF);
+
+ csarBasicValidation(resourceVF, downloadCSAR);
+ }
+
+ @Test(enabled = true)
+ public void createServiceCsarInclDeploymentArtTest() throws Exception {
+
+ Service service = AtomicOperationUtils.createDefaultService(UserRoleEnum.DESIGNER, true).left().value();
+
+ Resource resourceVF1 = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
+ Resource resourceVF2 = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
+
+ resourceVF1 = (Resource) AtomicOperationUtils
+ .changeComponentState(resourceVF1, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ resourceVF2 = (Resource) AtomicOperationUtils
+ .changeComponentState(resourceVF2, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceVF1, service, UserRoleEnum.DESIGNER, true);
+ AtomicOperationUtils.addComponentInstanceToComponentContainer(resourceVF2, service, UserRoleEnum.DESIGNER, true);
+
+ AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG_XML, service, UserRoleEnum.DESIGNER, true, true);
+
+ service = (Service) AtomicOperationUtils.changeComponentState(service, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
+
+ byte[] downloadCSAR = downloadCSAR(sdncModifierDetails, service);
+
+ csarBasicValidation(service, downloadCSAR);
+
+ validateServiceCsar(resourceVF1, resourceVF2, service, downloadCSAR, 3, 5, 1);
+ }
+
+ @Test(enabled = true)
+ public void createResourceCsarInclDeploymentArtTest() throws Exception {
+
+ Resource resourceVF1 = AtomicOperationUtils.createResourceByType(ResourceTypeEnum.VF, UserRoleEnum.DESIGNER, true).left().value();
+
+ AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.YANG_XML, resourceVF1, UserRoleEnum.DESIGNER, true, true);
+ AtomicOperationUtils.uploadArtifactByType(ArtifactTypeEnum.HEAT_ARTIFACT, resourceVF1, UserRoleEnum.DESIGNER, true, true);
+
+ resourceVF1 = (Resource) AtomicOperationUtils
+ .changeComponentState(resourceVF1, UserRoleEnum.DESIGNER, LifeCycleStatesEnum.CERTIFY, true).getLeft();
+
+ User sdncModifierDetails = ElementFactory.getDefaultUser(UserRoleEnum.DESIGNER);
+
+ byte[] downloadCSAR = downloadCSAR(sdncModifierDetails, resourceVF1);
+
+ csarBasicValidation(resourceVF1, downloadCSAR);
+
+ validateVFCsar(resourceVF1, downloadCSAR, 1, 0, 1, 1);
+ }
+
+ private void csarBasicValidation(Component mainComponent, byte[] downloadCSAR) {
+ try (ByteArrayInputStream ins = new ByteArrayInputStream(downloadCSAR);
+ ZipInputStream zip = new ZipInputStream(ins);) {
+
+ String resourceYaml = null;
+ byte[] buffer = new byte[1024];
+ ZipEntry nextEntry = zip.getNextEntry();
+ StringBuffer sb = new StringBuffer();
+ int len;
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ assertTrue(nextEntry.getName().equals("TOSCA-Metadata/TOSCA.meta"));
+
+ sb.setLength(0);
+ nextEntry = zip.getNextEntry();
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ resourceYaml = sb.toString();
+
+ YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
+ ArtifactDefinition artifactDefinition = mainComponent.getToscaArtifacts()
+ .get(ASSET_TOSCA_TEMPLATE);
+ String fileName = artifactDefinition.getArtifactName();
+ assertEquals("Tosca-Template file name: ", "Definitions/" + fileName, nextEntry.getName());
+ assertTrue("Tosca template Yaml validation: ", yamlToObjectConverter.isValidYaml(resourceYaml.getBytes()));
+
+ ins.close();
+ zip.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void validateServiceCsar(Component certifiedVFC1, Component certifiedVFC2, Service fetchedService,
+ byte[] resultByte, int toscaEntryIndexToPass, int generatorEntryIndexToPass,
+ int deploymentArtifactIndexToPass) {
+
+ // TODO Test to validate everything is right (comment out after testing)
+ /*try {
+ FileUtils.writeByteArrayToFile(new File("c:/TestCSAR/" + fetchedService.getName() + ".zip"), resultByte);
+ } catch (IOException e) {
+ // Auto-generated catch block
+ e.printStackTrace();
+ }*/
+
+ try (ByteArrayInputStream ins = new ByteArrayInputStream(resultByte);
+ ZipInputStream zip = new ZipInputStream(ins);) {
+
+ String resourceYaml = null;
+ byte[] buffer = new byte[1024];
+ ZipEntry nextEntry = zip.getNextEntry();
+ StringBuffer sb = new StringBuffer();
+ int len;
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ assertTrue(nextEntry.getName().equals("TOSCA-Metadata/TOSCA.meta"));
+
+ YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
+
+ int toscaEntryIndex = 0;
+ int generatorEntryIndex = 0;
+ int deploymentArtifactIndex = 0;
+ String fileName = null;
+ ArtifactDefinition artifactDefinition;
+ Component componentToValidate = null;
+
+ artifactDefinition = fetchedService.getToscaArtifacts().get(ASSET_TOSCA_TEMPLATE);
+ String serviceFileName = artifactDefinition.getArtifactName();
+ artifactDefinition = certifiedVFC1.getToscaArtifacts().get(ASSET_TOSCA_TEMPLATE);
+ String vfc1FileName = artifactDefinition.getArtifactName();
+ artifactDefinition = certifiedVFC2.getToscaArtifacts().get(ASSET_TOSCA_TEMPLATE);
+ String vfc2FileName = artifactDefinition.getArtifactName();
+
+ while ((nextEntry = zip.getNextEntry()) != null) {
+ sb.setLength(0);
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ String entryName = nextEntry.getName();
+
+ resourceYaml = sb.toString();
+ if (entryName.contains(serviceFileName)) {
+ componentToValidate = fetchedService;
+ fileName = "Definitions/" + serviceFileName;
+
+ assertEquals("Validate entry Name", (fileName), nextEntry.getName());
+ assertTrue(yamlToObjectConverter.isValidYaml(resourceYaml.getBytes()));
+ validateContent(resourceYaml, componentToValidate);
+ ++toscaEntryIndex;
+ continue;
+ }
+
+ if (entryName.contains(vfc1FileName)) {
+ componentToValidate = certifiedVFC1;
+ fileName = "Definitions/" + vfc1FileName;
+
+ assertEquals("Validate entry Name", (fileName), nextEntry.getName());
+ assertTrue(yamlToObjectConverter.isValidYaml(resourceYaml.getBytes()));
+ validateContent(resourceYaml, componentToValidate);
+ ++toscaEntryIndex;
+ continue;
+ }
+ if (entryName.contains(vfc2FileName)) {
+ componentToValidate = certifiedVFC2;
+ fileName = "Definitions/" + vfc2FileName;
+
+ assertEquals("Validate entry Name", (fileName), nextEntry.getName());
+ assertTrue(yamlToObjectConverter.isValidYaml(resourceYaml.getBytes()));
+ validateContent(resourceYaml, componentToValidate);
+ ++toscaEntryIndex;
+ continue;
+ }
+
+ if (entryName.contains(".xml") && !entryName.startsWith("Artifacts/AAI")) {
+ ++deploymentArtifactIndex;
+ continue;
+ }
+
+ if (entryName.startsWith("Artifacts/AAI")) {
+ ++generatorEntryIndex;
+ continue;
+ }
+
+ assertTrue("Unexpected entry: " + entryName, true);
+ }
+ assertEquals("Validate amount of entries", toscaEntryIndexToPass, toscaEntryIndex);
+ assertEquals("Validate amount of generated AAI artifacts", generatorEntryIndexToPass, generatorEntryIndex);
+ assertEquals("Validate amount of generated Deployment artifacts", deploymentArtifactIndexToPass,
+ deploymentArtifactIndex);
+
+ ins.close();
+ zip.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void validateVFCsar(Component certifiedVF, byte[] resultByte, int toscaEntryIndexToPass, int ymlDeploymentArtifactIndexToPass,
+ int xmlDeploymentArtifactIndexToPass, int heatEnvDeploymentArtifactIndexToPass) {
+
+ // TODO Test to validate everything is right (comment out after testing)
+ /*try {
+ FileUtils.writeByteArrayToFile(new File("c:/TestCSAR/" + fetchedService.getName() + ".zip"), resultByte);
+ } catch (IOException e) {
+ // Auto-generated catch block
+ e.printStackTrace();
+ }*/
+
+ try (ByteArrayInputStream ins = new ByteArrayInputStream(resultByte);
+ ZipInputStream zip = new ZipInputStream(ins);) {
+
+ String resourceYaml = null;
+ byte[] buffer = new byte[1024];
+ ZipEntry nextEntry = zip.getNextEntry();
+ StringBuffer sb = new StringBuffer();
+ int len;
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ assertTrue(nextEntry.getName().equals("TOSCA-Metadata/TOSCA.meta"));
+
+ YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
+
+ int toscaEntryIndex = 0;
+ int ymlEntryIndex = 0;
+ int xmlArtifactsIndex = 0;
+ int heatEnvDeploymentArtifactIndex = 0;
+ String fileName = null;
+ ArtifactDefinition artifactDefinition;
+ Component componentToValidate = null;
+
+ artifactDefinition = certifiedVF.getToscaArtifacts().get(ASSET_TOSCA_TEMPLATE);
+ String vfFileName = artifactDefinition.getArtifactName();
+
+ while ((nextEntry = zip.getNextEntry()) != null) {
+ sb.setLength(0);
+
+ while ((len = zip.read(buffer)) > 0) {
+ sb.append(new String(buffer, 0, len));
+ }
+
+ String entryName = nextEntry.getName();
+
+ resourceYaml = sb.toString();
+ if (entryName.contains(vfFileName)) {
+ componentToValidate = certifiedVF;
+ fileName = "Definitions/" + vfFileName;
+
+ assertEquals("Validate entry Name", (fileName), nextEntry.getName());
+ assertTrue(yamlToObjectConverter.isValidYaml(resourceYaml.getBytes()));
+ validateContent(resourceYaml, componentToValidate);
+ ++toscaEntryIndex;
+ continue;
+ }
+
+ if (entryName.contains(".xml") && entryName.startsWith("Artifacts/")) {
+ ++xmlArtifactsIndex;
+ continue;
+ }
+
+ if (entryName.contains(".sh") && entryName.startsWith("Artifacts/")) {
+ ++heatEnvDeploymentArtifactIndex;
+ continue;
+ }
+
+ if (entryName.contains(".yml") && entryName.startsWith("Artifacts/")) {
+ ++ymlEntryIndex;
+ continue;
+ }
+
+ assertTrue("Unexpected entry: " + entryName, false);
+ }
+ assertEquals("Validate amount of entries", toscaEntryIndexToPass, toscaEntryIndex);
+ assertEquals("Validate amount of YAML artifacts", ymlDeploymentArtifactIndexToPass, ymlEntryIndex);
+ assertEquals("Validate amount of generated XML artifacts", xmlDeploymentArtifactIndexToPass,
+ xmlArtifactsIndex);
+ assertEquals("Validate amount of generated HEAT ENV artifacts", heatEnvDeploymentArtifactIndexToPass,
+ heatEnvDeploymentArtifactIndex);
+
+ ins.close();
+ zip.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void validateContent(String content, Component component) {
+ Yaml yaml = new Yaml();
+
+ InputStream inputStream = new ByteArrayInputStream(content.getBytes());
+ @SuppressWarnings("unchecked")
+ Map<String, Object> load = (Map<String, Object>) yaml.load(inputStream);
+ @SuppressWarnings("unchecked")
+ Map<String, Object> metadata = (Map<String, Object>) load.get("metadata");
+ assertNotNull(metadata);
+
+ String name = (String) metadata.get("name");
+ assertNotNull(name);
+ assertEquals("Validate component name", component.getName(), name);
+
+ String invariantUUID = (String) metadata.get("invariantUUID");
+ assertNotNull(invariantUUID);
+ assertEquals("Validate component invariantUUID", component.getInvariantUUID(), invariantUUID);
+
+ String UUID = (String) metadata.get("UUID");
+ assertNotNull(UUID);
+ assertEquals("Validate component invariantUUID", component.getUUID(), UUID);
+
+ String type = (String) metadata.get("type");
+ assertNotNull(type);
+ if (component.getComponentType().equals(ComponentTypeEnum.SERVICE)) {
+ assertEquals("Validate component type", component.getComponentType().getValue(), type);
+ } else {
+ assertEquals("Validate component type", ((Resource) component).getResourceType(),
+ ResourceTypeEnum.valueOf(type));
+ }
+ }
+
+ private byte[] downloadCSAR(User sdncModifierDetails, Component createdComponent) throws Exception {
+
+ String artifactUniqeId = createdComponent.getToscaArtifacts().get("assettoscacsar").getUniqueId();
+ RestResponse getCsarResponse = null;
+
+ switch (createdComponent.getComponentType()) {
+ case RESOURCE:
+ getCsarResponse = ArtifactRestUtils.downloadResourceArtifactInternalApi(createdComponent.getUniqueId(),
+ sdncModifierDetails, artifactUniqeId);
+ break;
+ case SERVICE:
+ getCsarResponse = ArtifactRestUtils.downloadServiceArtifactInternalApi(createdComponent.getUniqueId(),
+ sdncModifierDetails, artifactUniqeId);
+ break;
+ default:
+ break;
+ }
+
+ assertNotNull(getCsarResponse);
+ BaseRestUtils.checkSuccess(getCsarResponse);
+
+ ArtifactUiDownloadData artifactUiDownloadData = ResponseParser.parseToObject(getCsarResponse.getResponse(),
+ ArtifactUiDownloadData.class);
+
+ assertNotNull(artifactUiDownloadData);
+
+ byte[] fromUiDownload = artifactUiDownloadData.getBase64Contents().getBytes();
+ byte[] decodeBase64 = Base64.decodeBase64(fromUiDownload);
+
+ return decodeBase64;
+ }
+}