Improved the CsarGenerator unit tests.
Improved the CsarGeneratoryTest.
Checkstyle for CsarGenerator and fixed typos.
Issue-ID: SDC-2327
Signed-off-by: Krystian Kedron <k.kedron@partner.samsung.com>
Change-Id: I8159dd47540ee3f5ed8b46f99c494c0cb24ed1d6
diff --git a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
index 4af684b..78f0ecb 100644
--- a/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
+++ b/asdctool/src/main/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGenerator.java
@@ -84,14 +84,14 @@
props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
props.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
- List<GraphVertex> byCriterria = janusGraphDao
+ List<GraphVertex> byCriteria = janusGraphDao
.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, props).either(l -> l, r -> null);
- if (byCriterria != null && !byCriterria.isEmpty()) {
- if (byCriterria.size() > 1) {
+ if (byCriteria != null && !byCriteria.isEmpty()) {
+ if (byCriteria.size() > 1) {
ConsoleWriter.dataLine("Warning ! More that 1 certified service with uuid", uuid);
// TBD
} else {
- GraphVertex metadataV = byCriterria.get(0);
+ GraphVertex metadataV = byCriteria.get(0);
printComponentInfo(metadataV.getMetadataProperties());
ConsoleWriter.dataLine("\nGenerate CSAR (yes/no)?");
@@ -102,7 +102,7 @@
}
}
} else {
- ConsoleWriter.dataLine("No certified service with UUID", uuid);
+ ConsoleWriter.dataLine("No certified service with UUID ", uuid);
}
if (status == JanusGraphOperationStatus.OK) {
janusGraphDao.commit();
@@ -131,14 +131,14 @@
}
} else {
- ConsoleWriter.dataLine("Failed to fetch certified service with UUID", uuid);
+ ConsoleWriter.dataLine("Failed to fetch certified service with UUID ", uuid);
}
return status;
}
private JanusGraphOperationStatus generateArtifact(Component component, ArtifactTypeEnum artifactType, Supplier<byte[]> supplier){
JanusGraphOperationStatus status = JanusGraphOperationStatus.GENERAL_ERROR;
- ArtifactDefinition csarArtifact = null;
+ ArtifactDefinition csarArtifact;
Optional<ArtifactDefinition> op = component.getToscaArtifacts().values().stream().filter(p -> p.getArtifactType().equals(artifactType.getType())).findAny();
if (op.isPresent()) {
csarArtifact = op.get();
@@ -162,7 +162,7 @@
ConsoleWriter.dataLine("create artifact failed ", csarArtifact.getArtifactLabel());
return JanusGraphOperationStatus.GENERAL_ERROR;
}
- ConsoleWriter.dataLine("createartifact success ", csarArtifact.getArtifactLabel());
+ ConsoleWriter.dataLine("create artifact success ", csarArtifact.getArtifactLabel());
csarArtifact.setPayload(payload);
byte[] decodedPayload = csarArtifact.getPayloadData();
diff --git a/asdctool/src/test/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGeneratorTest.java b/asdctool/src/test/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGeneratorTest.java
index 109aa9d..3be90e8 100644
--- a/asdctool/src/test/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGeneratorTest.java
+++ b/asdctool/src/test/java/org/openecomp/sdc/asdctool/impl/internal/tool/CsarGeneratorTest.java
@@ -1,41 +1,49 @@
/*
-
* Copyright (c) 2018 Huawei Intellectual Property.
-
+ * Modifications Copyright (c) 2019 Samsung
*
-
* 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.
-
*/
package org.openecomp.sdc.asdctool.impl.internal.tool;
-import fj.data.Either;
+import static org.junit.Assert.assertEquals;
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.when;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.EnumMap;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Scanner;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
+import org.openecomp.sdc.be.config.ConfigurationManager;
+import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
+import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
import org.openecomp.sdc.be.dao.jsongraph.GraphVertex;
import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
import org.openecomp.sdc.be.dao.jsongraph.types.EdgeLabelEnum;
@@ -43,17 +51,24 @@
import org.openecomp.sdc.be.dao.jsongraph.types.VertexTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum;
+import org.openecomp.sdc.be.model.ArtifactDefinition;
import org.openecomp.sdc.be.model.Component;
import org.openecomp.sdc.be.model.LifecycleStateEnum;
import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-import java.util.*;
-import static org.mockito.ArgumentMatchers.any;
-import static org.mockito.Mockito.when;
+
+import fj.data.Either;
+import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
+import org.openecomp.sdc.be.tosca.CsarUtils;
+import org.openecomp.sdc.be.tosca.ToscaExportHandler;
+import org.openecomp.sdc.be.tosca.ToscaRepresentation;
+import org.openecomp.sdc.common.api.ArtifactTypeEnum;
+import org.openecomp.sdc.common.api.ConfigurationSource;
+import org.openecomp.sdc.common.impl.ExternalConfiguration;
+import org.openecomp.sdc.common.impl.FSConfigurationSource;
@RunWith(MockitoJUnitRunner.class)
public class CsarGeneratorTest {
+
@InjectMocks
private CsarGenerator test;
@@ -64,30 +79,256 @@
private Component component;
@Mock
- ToscaOperationFacade toscaOperationFacade;
+ private ToscaOperationFacade toscaOperationFacade;
+
+ @Mock
+ private ArtifactCassandraDao artifactCassandraDao;
+
+ @Mock
+ private ToscaExportHandler toscaExportHandler;
+
+ @Mock
+ CsarUtils csarUtils;
+
+ @Mock
+ private ArtifactDefinition toscaTemplate;
+
+ @Mock
+ private ArtifactDefinition toscaCsar;
+
+ @Mock
+ ToscaRepresentation toscaRepresentation;
+
+ private static final String ANSWER = "yes";
+ private static final String UUID = "123";
+ private static final String UNIQUE_ID = "321";
+ private static final String PAYLOAD = "testPayload";
+ private static final String TEMPLATE_LABEL = "TEMPLATE_LABEL";
+ private static final String CSAR_LABEL = "CSAR_LABEL";
+
+ private PrintStream systemOut;
+ private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+ private final ByteArrayInputStream inContent = new ByteArrayInputStream(ANSWER.getBytes());
+
+ private final Map<GraphPropertyEnum, Object> service = new EnumMap<>(GraphPropertyEnum.class);
+ private final Map<String, ArtifactDefinition> toscaArtifact = new HashMap<>();
+
+ private final Scanner scanner = new Scanner(inContent);
+ private final List<GraphVertex> criteria = new ArrayList<>();
+ private final GraphVertex graphVertex = new GraphVertex();
+
+ @BeforeClass
+ public static void setup() {
+ initConfigurationManager();
+ }
+
+ @Before
+ public void setupSystemOut() {
+ systemOut = System.out;
+ System.setOut(new PrintStream(outContent));
+ }
+
+ @After
+ public void revertSystemOut() {
+ System.setOut(systemOut);
+ }
@Test
public void testGenerateCsar() {
- String uuid = "yes";
- InputStream in = new ByteArrayInputStream(uuid.getBytes());
- Scanner scanner = new Scanner(in);
- String uniqueId = "123";
- List<GraphVertex> list = new ArrayList<>();
- GraphVertex graphVertex = new GraphVertex();
- graphVertex.setUniqueId(uniqueId);
- list.add(graphVertex);
+ // given
+ graphVertex.setUniqueId(UNIQUE_ID);
+ criteria.add(graphVertex);
- Map<GraphPropertyEnum, Object> props = new EnumMap<>(GraphPropertyEnum.class);
- props.put(GraphPropertyEnum.UUID, uuid);
- props.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
- props.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
- graphVertex.setMetadataProperties(props);
+ service.put(GraphPropertyEnum.UUID, UUID);
+ service.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ service.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ graphVertex.setMetadataProperties(service);
- when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, props)).thenReturn(Either.left(list));
- when(toscaOperationFacade.getToscaFullElement(any(String.class))).thenReturn(Either.left(component));
- when(janusGraphDao
- .getChildVertex(graphVertex, EdgeLabelEnum.TOSCA_ARTIFACTS, JsonParseFlagEnum.ParseJson)).thenReturn(Either.left(graphVertex));
+ when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, service))
+ .thenReturn(Either.left(criteria));
+ when(toscaOperationFacade.getToscaFullElement(any(String.class)))
+ .thenReturn(Either.left(component));
+ when(janusGraphDao.getChildVertex(graphVertex, EdgeLabelEnum.TOSCA_ARTIFACTS,
+ JsonParseFlagEnum.ParseJson)).thenReturn(Either.left(graphVertex));
- test.generateCsar(uuid,scanner);
+ // when
+ test.generateCsar(UUID, scanner);
+ String[] consoleOutput = getOutputAsStringArray();
+
+ // then
+ checkBasicInformation(consoleOutput);
+ assertEquals("", consoleOutput[8]);
+ }
+
+ @Test
+ public void testGenerateCsarWithBadService() {
+ // given
+ graphVertex.setUniqueId(UNIQUE_ID);
+ criteria.add(graphVertex);
+
+ service.put(GraphPropertyEnum.UUID, UUID);
+ service.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ service.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ graphVertex.setMetadataProperties(service);
+
+ when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, service))
+ .thenReturn(Either.left(criteria));
+ when(toscaOperationFacade.getToscaFullElement(any(String.class)))
+ .thenReturn(Either.right(StorageOperationStatus.MATCH_NOT_FOUND));
+
+ // when
+ test.generateCsar(UUID, scanner);
+ String[] consoleOutput = getOutputAsStringArray();
+
+ // then
+ checkBasicInformation(consoleOutput);
+ assertEquals("Failed to fetch certified service with UUID " + UUID, consoleOutput[8]);
+ assertEquals("", consoleOutput[9]);
+ }
+
+ @Test
+ public void testGenerateCsarWithNoCertifiedUUI() {
+ // given
+ service.put(GraphPropertyEnum.UUID, UUID);
+ service.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ service.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+
+ when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, service))
+ .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
+
+ // when
+ test.generateCsar(UUID, scanner);
+ String[] consoleOutput = getOutputAsStringArray();
+
+ // then
+ assertEquals("No certified service with UUID " + UUID, consoleOutput[0]);
+ assertEquals("", consoleOutput[1]);
+ }
+
+ @Test
+ public void testFullFlow() {
+ // given
+ graphVertex.setUniqueId(UNIQUE_ID);
+ criteria.add(graphVertex);
+
+ service.put(GraphPropertyEnum.UUID, UUID);
+ service.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ service.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ graphVertex.setMetadataProperties(service);
+
+ when(toscaTemplate.getArtifactLabel()).thenReturn(TEMPLATE_LABEL);
+ when(toscaTemplate.getPayloadData()).thenReturn(PAYLOAD.getBytes());
+ when(toscaTemplate.getArtifactType()).thenReturn(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
+ toscaArtifact.put("toscaTemplate", toscaTemplate);
+
+ when(toscaCsar.getArtifactLabel()).thenReturn(CSAR_LABEL);
+ when(toscaCsar.getPayloadData()).thenReturn(PAYLOAD.getBytes());
+ when(toscaCsar.getArtifactType()).thenReturn(ArtifactTypeEnum.TOSCA_CSAR.getType());
+ toscaArtifact.put("toscaCsar", toscaCsar);
+
+ when(component.getUniqueId()).thenReturn(UNIQUE_ID);
+ when(component.getToscaArtifacts()).thenReturn(toscaArtifact);
+
+ when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, service))
+ .thenReturn(Either.left(criteria));
+ when(toscaOperationFacade.getToscaFullElement(any(String.class)))
+ .thenReturn(Either.left(component));
+ when(janusGraphDao.getChildVertex(graphVertex, EdgeLabelEnum.TOSCA_ARTIFACTS,
+ JsonParseFlagEnum.ParseJson)).thenReturn(Either.left(graphVertex));
+
+ when(toscaRepresentation.getMainYaml()).thenReturn(PAYLOAD);
+ when(toscaExportHandler.exportComponent(component))
+ .thenReturn(Either.left(toscaRepresentation));
+
+ when(csarUtils.createCsar(component, true, true))
+ .thenReturn(Either.left(PAYLOAD.getBytes()));
+
+ // when
+ test.generateCsar(UUID, scanner);
+ String[] consoleOutput = getOutputAsStringArray();
+
+ // then
+ checkBasicInformation(consoleOutput);
+ assertEquals("create artifact success " + TEMPLATE_LABEL, consoleOutput[8]);
+ assertEquals("create artifact unique id " + UNIQUE_ID + "." + TEMPLATE_LABEL,
+ consoleOutput[9]);
+ assertEquals("Artifact generated and saved into Cassandra " + TEMPLATE_LABEL,
+ consoleOutput[10]);
+
+ assertEquals("create artifact success " + CSAR_LABEL, consoleOutput[11]);
+ assertEquals("create artifact unique id " + UNIQUE_ID + "." + CSAR_LABEL,
+ consoleOutput[12]);
+ assertEquals("Artifact generated and saved into Cassandra " + CSAR_LABEL,
+ consoleOutput[13]);
+ assertEquals("", consoleOutput[14]);
+ }
+
+ @Test
+ public void testFullFlowWithBadPayload() {
+ // given
+ graphVertex.setUniqueId(UNIQUE_ID);
+ criteria.add(graphVertex);
+
+ service.put(GraphPropertyEnum.UUID, UUID);
+ service.put(GraphPropertyEnum.STATE, LifecycleStateEnum.CERTIFIED.name());
+ service.put(GraphPropertyEnum.COMPONENT_TYPE, ComponentTypeEnum.SERVICE.name());
+ graphVertex.setMetadataProperties(service);
+
+ when(toscaTemplate.getArtifactType()).thenReturn(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
+ toscaArtifact.put("toscaTemplate", toscaTemplate);
+
+ when(toscaCsar.getArtifactType()).thenReturn(ArtifactTypeEnum.TOSCA_CSAR.getType());
+ toscaArtifact.put("toscaCsar", toscaCsar);
+
+ when(component.getToscaArtifacts()).thenReturn(toscaArtifact);
+
+ when(janusGraphDao.getByCriteria(VertexTypeEnum.TOPOLOGY_TEMPLATE, service))
+ .thenReturn(Either.left(criteria));
+ when(toscaOperationFacade.getToscaFullElement(any(String.class)))
+ .thenReturn(Either.left(component));
+ when(janusGraphDao.getChildVertex(graphVertex, EdgeLabelEnum.TOSCA_ARTIFACTS,
+ JsonParseFlagEnum.ParseJson)).thenReturn(Either.left(graphVertex));
+
+ when(toscaExportHandler.exportComponent(component)).thenReturn(Either.right(null));
+ when(csarUtils.createCsar(component, true, true)).thenReturn(Either.right(null));
+
+ // when
+ test.generateCsar(UUID, scanner);
+ String[] consoleOutput = getOutputAsStringArray();
+
+ // then
+ checkBasicInformation(consoleOutput);
+ assertEquals("create artifact failed ", consoleOutput[8]);
+ assertEquals("create artifact failed ", consoleOutput[9]);
+ assertEquals("", consoleOutput[10]);
+ }
+
+ private void checkBasicInformation(String[] consoleOutput) {
+ assertEquals("component from type\t" + ComponentTypeEnum.SERVICE.name(), consoleOutput[0]);
+ assertEquals("component name", consoleOutput[1]);
+ assertEquals("component version", consoleOutput[2]);
+ assertEquals("component state\t" + LifecycleStateEnum.CERTIFIED.name(), consoleOutput[3]);
+ assertEquals("component is highest", consoleOutput[4]);
+ assertEquals("component is archived", consoleOutput[5]);
+ assertEquals("", consoleOutput[6]);
+ assertEquals("Generate CSAR (yes/no)?", consoleOutput[7]);
+ }
+
+ private String[] getOutputAsStringArray() {
+ return outContent.toString()
+ .replace("\t\t\n", "\n")
+ .replace("\t\n", "\n")
+ .replace("\t\t", "\t")
+ .split("\n", -1);
+ }
+
+ private static void initConfigurationManager() {
+ String confPath = new File(Objects
+ .requireNonNull(
+ CsarGenerator.class.getClassLoader().getResource("config/configuration.yaml"))
+ .getFile()).getParent();
+ ConfigurationSource confSource =
+ new FSConfigurationSource(ExternalConfiguration.getChangeListener(), confPath);
+ new ConfigurationManager(confSource);
}
}
diff --git a/asdctool/src/test/resources/config/configuration.yaml b/asdctool/src/test/resources/config/configuration.yaml
new file mode 100644
index 0000000..d7cdd14
--- /dev/null
+++ b/asdctool/src/test/resources/config/configuration.yaml
@@ -0,0 +1,14 @@
+# Default imports
+defaultImports:
+ - nodes:
+ file: nodes.yml
+ - datatypes:
+ file: data.yml
+ - capabilities:
+ file: capabilities.yml
+ - relationships:
+ file: relationships.yml
+ - groups:
+ file: groups.yml
+ - policies:
+ file: policies.yml