summaryrefslogtreecommitdiffstats
path: root/openecomp-be/lib
diff options
context:
space:
mode:
authorandre.schmid <andre.schmid@est.tech>2019-08-29 16:31:53 +0000
committerOfir Sonsino <ofir.sonsino@intl.att.com>2019-09-01 08:42:24 +0000
commit96908856dea9061161b2c324aa7b0eeb5d6e4fd5 (patch)
tree9faa162c2b55e78506a1fe4cf87ff1be8b6501bb /openecomp-be/lib
parentc1e9e72d0689f1188daf0c105e035bd16a0818f8 (diff)
Fix artifacts references in main TOSCA descriptor
During package conversion, artifacts can have their path changed. References for those artifacts inside the main TOSCA descriptor must be updated accordingly. Change-Id: Idcffb0724c20875ff1decebfec7c47605bfe20dc Issue-ID: SDC-2540 Signed-off-by: andre.schmid <andre.schmid@est.tech>
Diffstat (limited to 'openecomp-be/lib')
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java27
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java214
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImplTest.java215
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/nonManoConfig.yaml5
-rw-r--r--openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/vnfPackage/vnf1/Definitions/MainServiceTemplate.yaml97
-rw-r--r--openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/CSARConstants.java7
6 files changed, 469 insertions, 96 deletions
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java
index a6b58167f9..0a271c9d87 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-api/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIService.java
@@ -20,10 +20,14 @@
package org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi;
+import java.io.IOException;
+import java.nio.file.Path;
+import java.util.Map;
+import java.util.Optional;
import org.openecomp.core.utilities.file.FileContentHandler;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
import org.openecomp.sdc.tosca.csar.Manifest;
-import java.io.IOException;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
public interface ETSIService {
@@ -38,11 +42,22 @@ public interface ETSIService {
boolean isSol004WithToscaMetaDirectory(FileContentHandler handler) throws IOException;
/**
- * Update file structure. Moves non mano files to Artifacts/Deployment/non mano key location
- * @param handler
- * @param manifest
+ * Update file structure. Moves non mano files to the correct folder based on the manifest non mano type.
+ *
+ * @param handler The file handler containing the artifacts to move.
+ * @return A Map with pairs of from and to path of the moved artifacts.
+ */
+ Optional<Map<String, Path>> moveNonManoFileToArtifactFolder(final FileContentHandler handler)
+ throws IOException;
+
+ /**
+ * Updates the main descriptor paths referring the artifacts that were moved.
+ *
+ * @param toscaServiceModel The tosca service model containing the main descriptor.
+ * @param fromToMovedArtifactMap A Map representing the from and to artifacts path changes.
*/
- void moveNonManoFileToArtifactFolder(FileContentHandler handler, Manifest manifest);
+ void updateMainDescriptorPaths(final ToscaServiceModel toscaServiceModel,
+ final Map<String, Path> fromToMovedArtifactMap);
/**
* Retrieves the manifest file from the CSAR
@@ -64,4 +79,6 @@ public interface ETSIService {
* @throws IOException when TOSCA.meta file or manifest file is invalid
*/
ResourceTypeEnum getResourceType(Manifest manifest) throws IOException;
+
+ Path getOriginalManifestPath(final FileContentHandler handler) throws IOException;
}
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java
index 1b74b0094f..e727078daa 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/main/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImpl.java
@@ -20,40 +20,54 @@
package org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.ARTIFACTS_FOLDER;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.MAIN_SERVICE_TEMPLATE_MF_FILE_NAME;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.MANIFEST_PNF_METADATA;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_MANIFEST;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ORIG_PATH_FILE_NAME;
+import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_PATH_FILE_NAME;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Optional;
+import java.util.stream.Collectors;
+import org.apache.commons.collections.MapUtils;
import org.apache.commons.io.IOUtils;
+import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
import org.onap.sdc.tosca.parser.utils.YamlToObjectConverter;
+import org.onap.sdc.tosca.services.YamlUtil;
import org.openecomp.core.utilities.file.FileContentHandler;
import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
+import org.openecomp.sdc.logging.api.Logger;
+import org.openecomp.sdc.logging.api.LoggerFactory;
import org.openecomp.sdc.tosca.csar.Manifest;
import org.openecomp.sdc.tosca.csar.OnboardingToscaMetadata;
import org.openecomp.sdc.tosca.csar.SOL004ManifestOnboarding;
import org.openecomp.sdc.tosca.csar.ToscaMetadata;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.charset.StandardCharsets;
-import java.util.List;
-import java.util.Map;
-
-import static org.openecomp.sdc.tosca.csar.CSARConstants.MAIN_SERVICE_TEMPLATE_MF_FILE_NAME;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.MANIFEST_PNF_METADATA;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_MANIFEST;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ORIG_PATH_FILE_NAME;
-import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_PATH_FILE_NAME;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
public class ETSIServiceImpl implements ETSIService {
+ private static final Logger LOGGER = LoggerFactory.getLogger(ETSIServiceImpl.class);
+
private Configuration configuration;
public ETSIServiceImpl() throws IOException {
- InputStream io = getClass().getClassLoader().getResourceAsStream("nonManoConfig.yaml");
+ final InputStream io = getClass().getClassLoader().getResourceAsStream("nonManoConfig.yaml");
if (io == null) {
throw new IOException("Non Mano configuration not found");
}
- String data = IOUtils.toString(io, StandardCharsets.UTF_8);
- YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
+ final String data = IOUtils.toString(io, StandardCharsets.UTF_8);
+ final YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
configuration = yamlToObjectConverter.convertFromString(data, Configuration.class);
}
@@ -63,52 +77,136 @@ public class ETSIServiceImpl implements ETSIService {
@Override
public boolean isSol004WithToscaMetaDirectory(FileContentHandler handler) throws IOException {
- Map<String, byte[]> templates = handler.getFiles();
+ final Map<String, byte[]> templates = handler.getFiles();
return isMetaFilePresent(templates) && hasMetaMandatoryEntries(getMetadata(handler));
}
@Override
- public void moveNonManoFileToArtifactFolder(FileContentHandler handler, Manifest manifest) {
- for (Map.Entry<String, List<String>> entry : manifest.getNonManoSources().entrySet()) {
- String e = entry.getKey();
- List<String> k = entry.getValue();
- updateNonManoLocation(handler, e, k);
+ public Optional<Map<String, Path>> moveNonManoFileToArtifactFolder(final FileContentHandler handler) throws IOException {
+ final Manifest manifest;
+ try {
+ manifest = getManifest(handler);
+ } catch (final IOException ex) {
+ if (LOGGER.isErrorEnabled()) {
+ LOGGER.error("An error occurred while getting the manifest file", ex);
+ }
+ throw ex;
+ }
+ final Path originalManifestPath;
+ try {
+ originalManifestPath = getOriginalManifestPath(handler);
+ } catch (final IOException ex) {
+ if (LOGGER.isErrorEnabled()) {
+ LOGGER.error("An error occurred while getting the original manifest path", ex);
+ }
+ throw ex;
}
+ final Map<String, Path> fromToPathMap = new HashMap<>();
+ final Map<String, NonManoType> nonManoKeyFolderMapping = configuration.getNonManoKeyFolderMapping();
+ manifest.getNonManoSources().entrySet().stream()
+ .filter(manifestNonManoSourceEntry -> nonManoKeyFolderMapping.containsKey(manifestNonManoSourceEntry.getKey()))
+ .forEach(manifestNonManoSourceEntry -> {
+ final NonManoType nonManoType = nonManoKeyFolderMapping.get(manifestNonManoSourceEntry.getKey());
+ final List<String> nonManoFileList = manifestNonManoSourceEntry.getValue();
+ final Map<String, Path> actualFromToPathMap = nonManoFileList.stream()
+ .map(nonManoFilePath -> {
+ final Path normalizedFilePath = resolveNonManoFilePath(originalManifestPath, nonManoFilePath);
+ final Optional<Path> changedPath = updateNonManoPathInHandler(handler, nonManoType, normalizedFilePath);
+ if (changedPath.isPresent()) {
+ final Map<String, Path> fromAndToPathMap = new HashMap<>();
+ fromAndToPathMap.put(nonManoFilePath, Paths.get(ARTIFACTS_FOLDER).resolve(changedPath.get()));
+ return fromAndToPathMap;
+ }
+ return null;
+ })
+ .filter(Objects::nonNull)
+ .collect(Collectors.toMap(
+ fromToPathEntry -> fromToPathEntry.keySet().iterator().next(),
+ fromToPathEntry -> fromToPathEntry.values().iterator().next()
+ ));
+ fromToPathMap.putAll(actualFromToPathMap);
+ });
+
+ return MapUtils.isEmpty(fromToPathMap) ? Optional.empty() : Optional.of(fromToPathMap);
}
+ /**
+ * Resolves the non mano file path based on the original manifest path of the onboarded package.
+ *
+ * @param originalManifestPath The original path from the onboarded package manifest
+ * @param nonManoFilePath The non mano file path defined in the manifest
+ * @return The resolved and normalized non mano path.
+ */
+ private Path resolveNonManoFilePath(final Path originalManifestPath, final String nonManoFilePath) {
+ return originalManifestPath.resolve(Paths.get(nonManoFilePath)).normalize();
+ }
- private void updateNonManoLocation(FileContentHandler handler, String nonManoKey, List<String> sources) {
- Map<String, byte[]> files = handler.getFiles();
- for (String key : sources) {
- if (files.containsKey(key)) {
- updateLocation(key, nonManoKey, files);
+ /**
+ * Updates the non mano file path in the package file handler based on the non mano type.
+ *
+ * @param handler The package file handler
+ * @param nonManoType The Non Mano type of the file to update
+ * @param nonManoOriginalFilePath The Non Mano file original path
+ * @return The new file path if it was updated in the package file handler, otherwise empty.
+ */
+ private Optional<Path> updateNonManoPathInHandler(final FileContentHandler handler, final NonManoType nonManoType,
+ final Path nonManoOriginalFilePath) {
+ final Path fixedSourcePath = fixNonManoPath(nonManoOriginalFilePath);
+ final Map<String, byte[]> packageFileMap = handler.getFiles();
+ if (packageFileMap.containsKey(fixedSourcePath.toString())) {
+ final Path newNonManoPath = Paths.get(nonManoType.getType(), nonManoType.getLocation()
+ , fixedSourcePath.getFileName().toString());
+ if (!packageFileMap.containsKey(newNonManoPath.toString())) {
+ packageFileMap.put(newNonManoPath.toString(), packageFileMap.remove(fixedSourcePath.toString()));
+ return Optional.of(newNonManoPath);
}
}
+
+ return Optional.empty();
}
- private void updateLocation(String key, String nonManoKey, Map<String, byte[]> files) {
- if (nonManoKey == null || nonManoKey.isEmpty()) {
- return;
+ /**
+ * Fix the original non mano file path to the ONAP package file path.
+ *
+ * Non mano artifacts that were inside the {@link org.openecomp.sdc.tosca.csar.CSARConstants#ARTIFACTS_FOLDER} path
+ * are not moved when parsed to ONAP package, but the Manifest declaration can still have the {@link
+ * org.openecomp.sdc.tosca.csar.CSARConstants#ARTIFACTS_FOLDER} reference in it. If so, that reference is removed.
+ *
+ * @param nonManoOriginalFilePath The original non mano file path
+ * @return The non mano fixed path to ONAP package structure.
+ */
+ private Path fixNonManoPath(final Path nonManoOriginalFilePath) {
+ final Path rootArtifactsPath = Paths.get("/", ARTIFACTS_FOLDER);
+ if (nonManoOriginalFilePath.startsWith(rootArtifactsPath)) {
+ return rootArtifactsPath.relativize(nonManoOriginalFilePath);
}
- Map<String, NonManoType> map = configuration.getNonManoKeyFolderMapping();
- if (map.containsKey(nonManoKey)) {
- NonManoType nonManoPair = map.get(nonManoKey);
- String newLocation = nonManoPair.getType() + "/" +
- nonManoPair.getLocation() + "/" + getFileName(key);
- if (!files.containsKey(newLocation)) {
- files.put(newLocation, files.remove(key));
- }
+ final Path relativeArtifactsPath = Paths.get(ARTIFACTS_FOLDER);
+ if (nonManoOriginalFilePath.startsWith(relativeArtifactsPath)) {
+ return relativeArtifactsPath.relativize(nonManoOriginalFilePath);
}
+
+ return nonManoOriginalFilePath;
}
- private String getFileName(String key) {
- return key.substring(key.lastIndexOf('/') + 1);
+ @Override
+ public void updateMainDescriptorPaths(final ToscaServiceModel toscaServiceModel,
+ final Map<String, Path> fromToMovedArtifactMap) {
+ final ServiceTemplate entryDefinition = toscaServiceModel.getServiceTemplates()
+ .get(toscaServiceModel.getEntryDefinitionServiceTemplate());
+ final YamlUtil yamlUtil = new YamlUtil();
+ final String[] entryDefinitionYaml = {yamlUtil.objectToYaml(entryDefinition)};
+ fromToMovedArtifactMap.forEach((fromPath, toPath) -> entryDefinitionYaml[0] = entryDefinitionYaml[0]
+ .replaceAll(fromPath, toPath.toString()));
+
+ toscaServiceModel.addServiceTemplate(toscaServiceModel.getEntryDefinitionServiceTemplate()
+ , yamlUtil.yamlToObject(entryDefinitionYaml[0], ServiceTemplate.class));
}
- private boolean hasMetaMandatoryEntries(ToscaMetadata toscaMetadata) {
- Map<String, String> metaDataEntries = toscaMetadata.getMetaEntries();
- return metaDataEntries.containsKey(TOSCA_META_ENTRY_DEFINITIONS) && metaDataEntries.containsKey(TOSCA_META_ETSI_ENTRY_MANIFEST)
- && metaDataEntries.containsKey(TOSCA_META_ETSI_ENTRY_CHANGE_LOG);
+ private boolean hasMetaMandatoryEntries(final ToscaMetadata toscaMetadata) {
+ final Map<String, String> metaDataEntries = toscaMetadata.getMetaEntries();
+ return metaDataEntries.containsKey(TOSCA_META_ENTRY_DEFINITIONS) && metaDataEntries
+ .containsKey(TOSCA_META_ETSI_ENTRY_MANIFEST)
+ && metaDataEntries.containsKey(TOSCA_META_ETSI_ENTRY_CHANGE_LOG);
}
private boolean isMetaFilePresent(Map<String, byte[]> handler) {
@@ -125,7 +223,7 @@ public class ETSIServiceImpl implements ETSIService {
// Valid manifest should contain whether vnf or pnf related metadata data exclusively in SOL004 standard,
// validation of manifest done during package upload stage
if (manifest != null && !manifest.getMetadata().isEmpty()
- && MANIFEST_PNF_METADATA.stream().anyMatch(e -> manifest.getMetadata().containsKey(e))) {
+ && MANIFEST_PNF_METADATA.stream().anyMatch(e -> manifest.getMetadata().containsKey(e))) {
return ResourceTypeEnum.PNF;
}
// VNF is default resource type
@@ -138,25 +236,43 @@ public class ETSIServiceImpl implements ETSIService {
}
private Manifest getManifest(FileContentHandler handler, String manifestLocation) throws IOException {
- try(InputStream manifestInputStream = getManifestInputStream(handler, manifestLocation)) {
+ try (InputStream manifestInputStream = getManifestInputStream(handler, manifestLocation)) {
Manifest onboardingManifest = new SOL004ManifestOnboarding();
onboardingManifest.parse(manifestInputStream);
return onboardingManifest;
}
}
+ public Path getOriginalManifestPath(final FileContentHandler handler) throws IOException {
+ final ToscaMetadata metadata = getOriginalMetadata(handler);
+ final String originalMetadataPath = metadata.getMetaEntries().get(TOSCA_META_ETSI_ENTRY_MANIFEST);
+ final Path path = Paths.get(originalMetadataPath);
+ return path.getParent() == null ? Paths.get("") : path.getParent();
+ }
+
private ToscaMetadata getMetadata(FileContentHandler handler) throws IOException {
ToscaMetadata metadata;
if (handler.containsFile(TOSCA_META_PATH_FILE_NAME)) {
- metadata = OnboardingToscaMetadata.parseToscaMetadataFile(handler.getFileContent(TOSCA_META_PATH_FILE_NAME));
+ metadata = OnboardingToscaMetadata
+ .parseToscaMetadataFile(handler.getFileContent(TOSCA_META_PATH_FILE_NAME));
} else if (handler.containsFile(TOSCA_META_ORIG_PATH_FILE_NAME)) {
- metadata = OnboardingToscaMetadata.parseToscaMetadataFile(handler.getFileContent(TOSCA_META_ORIG_PATH_FILE_NAME));
+ metadata = OnboardingToscaMetadata
+ .parseToscaMetadataFile(handler.getFileContent(TOSCA_META_ORIG_PATH_FILE_NAME));
} else {
throw new IOException("TOSCA.meta file not found!");
}
return metadata;
}
+ private ToscaMetadata getOriginalMetadata(final FileContentHandler handler) throws IOException {
+ if (handler.containsFile(TOSCA_META_ORIG_PATH_FILE_NAME)) {
+ return OnboardingToscaMetadata
+ .parseToscaMetadataFile(handler.getFileContent(TOSCA_META_ORIG_PATH_FILE_NAME));
+ } else {
+ throw new IOException(String.format("%s file not found", TOSCA_META_ORIG_PATH_FILE_NAME));
+ }
+ }
+
private InputStream getManifestInputStream(FileContentHandler handler, String manifestLocation) throws IOException {
InputStream io;
if (manifestLocation == null || !handler.containsFile(manifestLocation)) {
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImplTest.java b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImplTest.java
index dc456a1970..3d70948b2f 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImplTest.java
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/java/org/openecomp/sdc/vendorsoftwareproduct/services/impl/etsi/ETSIServiceImplTest.java
@@ -20,47 +20,62 @@
package org.openecomp.sdc.vendorsoftwareproduct.services.impl.etsi;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-import org.onap.sdc.tosca.parser.utils.YamlToObjectConverter;
-import org.openecomp.core.utilities.file.FileContentHandler;
-import org.openecomp.sdc.tosca.csar.Manifest;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.CoreMatchers.not;
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThat;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
import java.io.IOException;
+import java.io.InputStream;
import java.nio.charset.StandardCharsets;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertTrue;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.when;
+import java.util.Optional;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
+import org.onap.sdc.tosca.parser.utils.YamlToObjectConverter;
+import org.onap.sdc.tosca.services.YamlUtil;
+import org.openecomp.core.utilities.file.FileContentHandler;
+import org.openecomp.sdc.tosca.csar.Manifest;
+import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
public class ETSIServiceImplTest {
+
private ETSIService etsiService;
private String sol004MetaFile = "TOSCA-Meta-Version: 1.0\n" +
- "CSAR-Version: 1.0\n" +
- "Created-By: Kuku\n" +
- "Entry-Definitions: MainServiceTemplate.yaml\n" +
- "ETSI-Entry-Manifest: MainServiceTemplate.mf\n" +
- "ETSI-Entry-Change-Log: MainServiceTemplate.log";
+ "CSAR-Version: 1.0\n" +
+ "Created-By: Kuku\n" +
+ "Entry-Definitions: MainServiceTemplate.yaml\n" +
+ "ETSI-Entry-Manifest: MainServiceTemplate.mf\n" +
+ "ETSI-Entry-Change-Log: MainServiceTemplate.log";
private String metaFile = "TOSCA-Meta-Version: 1.0\n" +
- "CSAR-Version: 1.0\n" +
- "Created-By: Kuku\n" +
- "Entry-Definitions: MainServiceTemplate.yaml";
+ "CSAR-Version: 1.0\n" +
+ "Created-By: Kuku\n" +
+ "Entry-Definitions: MainServiceTemplate.yaml";
private String finalNonManoLocation = "Deployment/VES_EVENTS/test.xml";
- private String finalOtherNonManoLocation = "Informational/OTHER/test.xml";
@Before
public void setUp() throws IOException {
YamlToObjectConverter yamlToObjectConverter = new YamlToObjectConverter();
Configuration configuration = yamlToObjectConverter.convert("src/test/resources",
Configuration.class, "nonManoConfig.yaml");
- etsiService = new ETSIServiceImpl(configuration);
+ etsiService = Mockito.spy(new ETSIServiceImpl(configuration));
}
@After
@@ -71,42 +86,60 @@ public class ETSIServiceImplTest {
@Test
public void testIsSol004TrueOrigin() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
- fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta.original", sol004MetaFile.getBytes(StandardCharsets.UTF_8));
+ fileContentHandler
+ .addFile("TOSCA-Metadata/TOSCA.meta.original", sol004MetaFile.getBytes(StandardCharsets.UTF_8));
assertTrue(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
}
@Test
- public void testIsSol004True() throws IOException {
+ public void testIsSol004True() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta", sol004MetaFile.getBytes(StandardCharsets.UTF_8));
assertTrue(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
}
@Test
- public void testIsSol004False() throws IOException {
+ public void testIsSol004False() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta.original", metaFile.getBytes(StandardCharsets.UTF_8));
assertFalse(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
}
@Test
- public void testIsSol004FalseWithNull() throws IOException {
+ public void testIsSol004FalseWithNull() throws IOException {
FileContentHandler fileContentHandler = new FileContentHandler();
assertFalse(etsiService.isSol004WithToscaMetaDirectory(fileContentHandler));
}
@Test
public void testMoveNonManoFileToArtifactFolder() throws IOException {
- Map<String, List<String>> nonManoSources = new HashMap<>();
- List<String> sources = new ArrayList<>();
- sources.add("Some/test.xml");
- nonManoSources.put("Some", sources);
- FileContentHandler fileContentHandler = new FileContentHandler();
+ final Map<String, List<String>> nonManoTypeAndSourceMapInManifest = new HashMap<>();
+ nonManoTypeAndSourceMapInManifest.put("Some", Collections.singletonList("Some/test.xml"));
+ final Manifest manifest = mock(Manifest.class);
+ when(manifest.getNonManoSources()).thenReturn(nonManoTypeAndSourceMapInManifest);
+ final FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("Some/test.xml", new byte[1]);
- Manifest manifest = mock(Manifest.class);
- when(manifest.getNonManoSources()).thenReturn(nonManoSources);
- etsiService.moveNonManoFileToArtifactFolder(fileContentHandler, manifest);
- assertTrue(fileContentHandler.containsFile(finalNonManoLocation));
+ fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta.original", new byte[1]);
+ fileContentHandler.addFile("MainServiceTemplate.mf", new byte[1]);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
+ assertThat("Should contain moved file", fileContentHandler.getFileList(), hasItem(finalNonManoLocation));
+ }
+
+
+ @Test
+ public void testMoveNonManoFileInArtifactFolderToNonManoOnapPath() throws IOException {
+ final Map<String, List<String>> nonManoTypeAndSourceMapInManifest = new HashMap<>();
+ nonManoTypeAndSourceMapInManifest.put("Some", Collections.singletonList("Artifacts/Some/test.xml"));
+ final FileContentHandler fileContentHandler = new FileContentHandler();
+ fileContentHandler.addFile("Some/test.xml", new byte[1]);
+ final Manifest manifest = mock(Manifest.class);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
+ when(manifest.getNonManoSources()).thenReturn(nonManoTypeAndSourceMapInManifest);
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
+ assertThat("Should contain moved file", fileContentHandler.getFileList(), hasItem(finalNonManoLocation));
}
@Test
@@ -118,8 +151,11 @@ public class ETSIServiceImplTest {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile("test.xml", new byte[1]);
Manifest manifest = mock(Manifest.class);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
when(manifest.getNonManoSources()).thenReturn(nonManoSources);
- etsiService.moveNonManoFileToArtifactFolder(fileContentHandler, manifest);
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
+ String finalOtherNonManoLocation = "Informational/OTHER/test.xml";
assertFalse(fileContentHandler.containsFile(finalOtherNonManoLocation));
}
@@ -132,8 +168,10 @@ public class ETSIServiceImplTest {
FileContentHandler fileContentHandler = new FileContentHandler();
fileContentHandler.addFile(finalNonManoLocation, new byte[1]);
Manifest manifest = mock(Manifest.class);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
when(manifest.getNonManoSources()).thenReturn(nonManoSources);
- etsiService.moveNonManoFileToArtifactFolder(fileContentHandler, manifest);
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
assertTrue(fileContentHandler.containsFile(finalNonManoLocation));
}
@@ -144,10 +182,111 @@ public class ETSIServiceImplTest {
sources.add("Artifacts/Deployment/test.xml");
nonManoSources.put("Some", sources);
FileContentHandler fileContentHandler = new FileContentHandler();
- fileContentHandler.addFile("Artifacts/Deployment/test.xml", new byte[1]);
+ fileContentHandler.addFile("Deployment/test.xml", new byte[1]);
Manifest manifest = mock(Manifest.class);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
when(manifest.getNonManoSources()).thenReturn(nonManoSources);
- etsiService.moveNonManoFileToArtifactFolder(fileContentHandler, manifest);
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
assertTrue(fileContentHandler.containsFile(finalNonManoLocation));
}
+
+ @Test
+ public void givenManifestNotInRoot_moveNonManoFileToNonManoOnapFolder() throws IOException {
+ //given manifest non mano files under key "onap_other", inside and outside Artifacts folder,
+ // with relative and absolute paths.
+ final Map<String, List<String>> nonManoTypeAndSourceMapInManifest = new HashMap<>();
+ nonManoTypeAndSourceMapInManifest.put("onap_other",
+ Arrays.asList("../../Artifacts/Artifacts/Deployment/relativePathInsideSubArtifact.xml",
+ "../../Files/scriptInFilesPath.sh",
+ "/Artifacts/Deployment/absolutePathInsideArtifact.xml"));
+ //given ONAP package fileHandler
+ final FileContentHandler fileContentHandler = new FileContentHandler();
+ fileContentHandler.addFile("Artifacts/Deployment/relativePathInsideSubArtifact.xml", new byte[1]);
+ fileContentHandler.addFile("Deployment/absolutePathInsideArtifact.xml", new byte[1]);
+ fileContentHandler.addFile("Files/scriptInFilesPath.sh", new byte[1]);
+ //given onboarded manifest in two/lvlFolder folder
+ final Manifest manifest = mock(Manifest.class);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("two/lvlFolder")).when(etsiService).getOriginalManifestPath(fileContentHandler);
+ when(manifest.getNonManoSources()).thenReturn(nonManoTypeAndSourceMapInManifest);
+ //when files are non mano moved
+ etsiService.moveNonManoFileToArtifactFolder(fileContentHandler);
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/OTHER/relativePathInsideSubArtifact.xml"));
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/OTHER/absolutePathInsideArtifact.xml"));
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/OTHER/scriptInFilesPath.sh"));
+ }
+
+ @Test
+ public void givenManifestInRoot_moveNonManoFileToNonManoOnapFolder() throws IOException {
+ //given manifest non mano files under key "onap_other", inside and outside Artifacts folder
+ final Map<String, List<String>> nonManoSourceMap = new HashMap<>();
+ nonManoSourceMap.put("onap_other",
+ Arrays.asList("Artifacts/Deployment/ANOTHER/authorized_keys",
+ "Files/scriptInFilesPath.sh")
+ );
+ //given manifest non mano file under key "Some"
+ nonManoSourceMap.put("Some",
+ Collections.singletonList("Files/willMoveToSome.sh")
+ );
+ //given ONAP package fileHandler
+ final FileContentHandler fileContentHandler = new FileContentHandler();
+ fileContentHandler.addFile("Deployment/ANOTHER/authorized_keys", new byte[1]);
+ fileContentHandler.addFile("Files/scriptInFilesPath.sh", new byte[1]);
+ fileContentHandler.addFile("Files/willMoveToSome.sh", new byte[1]);
+ fileContentHandler.addFile("Deployment/willNotMove.xml", new byte[1]);
+ //given onboarded manifest in root folder
+ final Manifest manifest = mock(Manifest.class);
+ when(manifest.getNonManoSources()).thenReturn(nonManoSourceMap);
+ doReturn(manifest).when(etsiService).getManifest(fileContentHandler);
+ doReturn(Paths.get("")).when(etsiService).getOriginalManifestPath(fileContentHandler);
+ final Optional<Map<String, Path>> fromToPathMap = etsiService
+ .moveNonManoFileToArtifactFolder(fileContentHandler);
+ assertThat("Files should be moved", fromToPathMap.isPresent(), is(true));
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/OTHER/authorized_keys"));
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/OTHER/scriptInFilesPath.sh"));
+ assertThat("Should contain moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/VES_EVENTS/willMoveToSome.sh"));
+ assertThat("Should contain not moved file", fileContentHandler.getFileList(),
+ hasItem("Deployment/willNotMove.xml"));
+ }
+
+ @Test
+ public void givenMovedFiles_updateDescriptorReferences() {
+ //given moved files
+ final Map<String, Path> fromToPathMap = new HashMap<>();
+ final String file1OriginalPath = "Artifacts/Deployment/ANOTHER/authorized_keys";
+ final Path file1Path = Paths.get("Artifacts", "Deployment", "OTHER", "authorized_keys");
+ fromToPathMap.put(file1OriginalPath, file1Path);
+ final String file2OriginalPath = "Artifacts/Deployment/ANOTHER/image";
+ final Path file2Path = Paths.get("Artifacts", "Deployment", "OTHER", "image");
+ fromToPathMap.put(file2OriginalPath, file2Path);
+ //given main descriptor
+ final InputStream mainServiceTemplateYamlFile = getClass().getClassLoader()
+ .getResourceAsStream("vnfPackage/vnf1/Definitions/MainServiceTemplate.yaml");
+ final ServiceTemplate mainServiceTemplate = new YamlUtil()
+ .yamlToObject(mainServiceTemplateYamlFile, ServiceTemplate.class);
+ final HashMap<String, ServiceTemplate> serviceTemplateMap = new HashMap<>();
+ serviceTemplateMap.put("MainServiceTemplate.yaml", mainServiceTemplate);
+ final ToscaServiceModel toscaServiceModel = new ToscaServiceModel(null, serviceTemplateMap,
+ "MainServiceTemplate.yaml");
+ //when descriptor is updated
+ etsiService.updateMainDescriptorPaths(toscaServiceModel, fromToPathMap);
+ //then
+ final String serviceTemplatesAsYaml = new YamlUtil().objectToYaml(toscaServiceModel.getServiceTemplates());
+ assertThat("Descriptor should not contain reference to file", serviceTemplatesAsYaml,
+ not(containsString(file1OriginalPath)));
+ assertThat("Descriptor should not contain reference to file", serviceTemplatesAsYaml,
+ not(containsString(file2OriginalPath)));
+ assertThat("Descriptor should contain reference to file", serviceTemplatesAsYaml,
+ containsString(file1Path.toString()));
+ assertThat("Descriptor should contain reference to file", serviceTemplatesAsYaml,
+ containsString(file2Path.toString()));
+ }
+
}
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/nonManoConfig.yaml b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/nonManoConfig.yaml
index 32c6b1ce57..914e9ff59d 100644
--- a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/nonManoConfig.yaml
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/nonManoConfig.yaml
@@ -4,4 +4,7 @@ nonManoKeyFolderMapping:
type: Deployment
Other:
location: VES_EVENTS
- type: Informational \ No newline at end of file
+ type: Informational
+ onap_other:
+ location: OTHER
+ type: Deployment \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/vnfPackage/vnf1/Definitions/MainServiceTemplate.yaml b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/vnfPackage/vnf1/Definitions/MainServiceTemplate.yaml
new file mode 100644
index 0000000000..3ed5f5ce00
--- /dev/null
+++ b/openecomp-be/lib/openecomp-sdc-vendor-software-product-lib/openecomp-sdc-vendor-software-product-core/src/test/resources/vnfPackage/vnf1/Definitions/MainServiceTemplate.yaml
@@ -0,0 +1,97 @@
+tosca_definitions_version: tosca_simple_yaml_1_0
+metadata:
+ VNFD_SCHEMA_VERSION: 2.5.1+1
+ template_name: Main
+ template_version: '1.0'
+ template_author: onap
+topology_template:
+ node_templates:
+ VDU_vgw_0:
+ type: tosca.nodes.nfv.Vdu.Compute
+ properties:
+ name:
+ get_input: vgw_name_0
+ description: vgw
+ vdu_profile:
+ min_number_of_instances: 1
+ max_number_of_instances: 1
+ watchdog: none
+ inject_files:
+ source_path: ../Artifacts/Deployment/ANOTHER/authorized_keys
+ dest_path: /home/ubuntu/.ssh/authorized_keys
+ meta_data:
+ vnf_id:
+ get_input: vnf_id
+ vf_module_id:
+ get_input: vf_module_id
+ mux_gw_private_net_ipaddr:
+ get_input: vgw_private_ip_0
+ oam_ipaddr:
+ get_input: vgw_private_ip_1
+ oam_cidr:
+ get_input: onap_private_net_cidr
+ cpe_public_net_cidr:
+ get_input: cpe_public_net_cidr
+ mux_gw_private_net_cidr:
+ get_input: mux_gw_private_net_cidr
+ mux_ip_addr:
+ get_input: mux_ip_addr
+ vg_vgmux_tunnel_vni:
+ get_input: vg_vgmux_tunnel_vni
+ install_script_version:
+ get_input: install_script_version
+ cloud_env:
+ get_input: cloud_env
+ nexus_artifact_repo:
+ get_input: nexus_artifact_repo
+ boot_data: |
+ #!/bin/bash
+ METADATA=`curl -s http://169.254.169.254/openstack/2012-08-10/meta_data.json`
+ apt-get -y install jq
+
+ get_metadata () {
+ echo $METADATA | jq -r ".meta.$1"
+ }
+
+ # Create configuration files
+ mkdir /opt/config
+ echo "$(get_metadata oam_ipaddr)" > /opt/config/oam_ipaddr.txt
+ echo "$(get_metadata oam_cidr)" > /opt/config/oam_cidr.txt
+ echo "$(get_metadata cpe_public_net_cidr)" > /opt/config/cpe_public_net_cidr.txt
+ echo "$(get_metadata mux_gw_private_net_ipaddr)" > /opt/config/mux_gw_private_net_ipaddr.txt
+ echo "$(get_metadata mux_gw_private_net_cidr)" > /opt/config/mux_gw_private_net_cidr.txt
+ echo "$(get_metadata install_script_version)" > /opt/config/install_script_version.txt
+ echo "$(get_metadata cloud_env)" > /opt/config/cloud_env.txt
+ echo "$(get_metadata mux_ip_addr)" > /opt/config/mux_ip_addr.txt
+ echo "$(get_metadata vg_vgmux_tunnel_vni)" > /opt/config/vg_vgmux_tunnel_vni.txt
+ echo "$(get_metadata nexus_artifact_repo)" > /opt/config/nexus_artifact_repo.txt
+
+ # Download and run install script
+ apt-get -y install unzip
+ INSTALL_SCRIPT_VERSION=$(get_metadata install_script_version)
+ NEXUS_ARTIFACT_REPO=$(get_metadata nexus_artifact_repo)
+ if [[ "${INSTALL_SCRIPT_VERSION}" =~ "SNAPSHOT" ]]; then REPO=snapshots; else REPO=releases; fi
+ curl -k -L "${NEXUS_ARTIFACT_REPO}/service/local/artifact/maven/redirect?r=${REPO}&g=org.onap.demo.vnf.vcpe&a=vcpe-scripts&e=zip&v=${INSTALL_SCRIPT_VERSION}" -o /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip
+ unzip -j /opt/vcpe-scripts-${INSTALL_SCRIPT_VERSION}.zip -d /opt v_gw_install.sh
+ cd /opt
+ chmod +x v_gw_install.sh
+ ./v_gw_install.sh
+ capabilities:
+ virtual_compute:
+ properties:
+ virtual_memory:
+ virtual_mem_size: 4096 MB
+ vdu_mem_requirements:
+ memoryPageSize: '{"schemaVersion": "0", "schemaSelector": "", "hardwarePlatform":
+ "generic", "mandatory": "true", "configurationValue": "2 MB"}'
+ numberOfPages: '{"schemaVersion": "0","schemaSelector": "","hardwarePlatform":
+ "generic","mandatory": "true", "configurationValue": "1024"}'
+ virtual_cpu:
+ num_virtual_cpu: 2
+ cpu_architecture: generic
+ virtual_local_storage:
+ - size_of_storage: 40 GB
+ artifacts:
+ sw_image:
+ type: tosca.artifacts.nfv.SwImage
+ file: ../Artifacts/Deployment/ANOTHER/image \ No newline at end of file
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/CSARConstants.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/CSARConstants.java
index 06e2de1628..7a42758322 100644
--- a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/CSARConstants.java
+++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/CSARConstants.java
@@ -25,14 +25,15 @@ public class CSARConstants {
public static final ImmutableSet<String> ELIGBLE_FOLDERS = of("Artifacts/","Definitions/",
"Licenses/", "TOSCA-Metadata/");
+ public static final String ARTIFACTS_FOLDER = "Artifacts";
public static final String MAIN_SERVICE_TEMPLATE_MF_FILE_NAME = "MainServiceTemplate.mf";
public static final String MAIN_SERVICE_TEMPLATE_YAML_FILE_NAME = "MainServiceTemplate.yaml";
- public static final String TOSCA_META_PATH_FILE_NAME="TOSCA-Metadata/TOSCA.meta";
+ public static final String TOSCA_META_PATH_FILE_NAME = "TOSCA-Metadata/TOSCA.meta";
public static final String TOSCA_META_FILE_VERSION_ENTRY = "TOSCA-Meta-File-Version";
public static final String TOSCA_META_CSAR_VERSION_ENTRY = "CSAR-Version";
public static final String TOSCA_META_CREATED_BY_ENTRY = "Created-By";
- public static final String TOSCA_META_ENTRY_DEFINITIONS="Entry-Definitions";
+ public static final String TOSCA_META_ENTRY_DEFINITIONS ="Entry-Definitions";
public static final String TOSCA_META_ETSI_ENTRY_MANIFEST ="ETSI-Entry-Manifest";
public static final String TOSCA_META_ETSI_ENTRY_CHANGE_LOG ="ETSI-Entry-Change-Log";
public static final String TOSCA_META_ETSI_ENTRY_TESTS = "ETSI-Entry-Tests";
@@ -64,7 +65,7 @@ public class CSARConstants {
public static final String CMD_END = "----END CMS-----";
public static final String SEPARATOR_MF_ATTRIBUTE = ":";
public static final String NON_MANO_MF_ATTRIBUTE = "non_mano_artifact_sets";
- public static final String TOSCA_META_ORIG_PATH_FILE_NAME="TOSCA-Metadata/TOSCA.meta.original";
+ public static final String TOSCA_META_ORIG_PATH_FILE_NAME = "TOSCA-Metadata/TOSCA.meta.original";
public static final String TOSCA_META_FILE_VERSION = "1.0";
public static final String CSAR_VERSION_1_0 = "1.0";