/*
* Copyright 2019 Nokia
*
* 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.onap.cvc.csar;
import org.apache.commons.lang3.tuple.Pair;
import org.junit.Test;
import org.onap.cvc.csar.parser.vnf.DefinitionMetadataParser;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
import static org.onap.cvc.csar.CSARArchive.Definition;
import static org.onap.cvc.csar.CSARArchive.ENTRY_DEFINITION_TEMPLATE_AUTHOR;
import static org.onap.cvc.csar.CSARArchive.ENTRY_DEFINITION_TEMPLATE_NAME;
import static org.onap.cvc.csar.CSARArchive.ENTRY_DEFINITION_TEMPLATE_VERSION;
import static org.onap.cvc.csar.CSARArchive.ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION;
import static org.onap.cvc.csar.cc.sol004.IntegrationTestUtils.convertToMessagesList;
public class DefinitionMetadataParserTest {
private static final String DEFINITION_YAML = "definition.yaml";
@Test
public void shouldReportThatDefinitionYamlDataAreEmpty(){
// given
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
new HashMap<>(), DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
assertThat(convertToMessagesList(data.getRight())).contains(
"Missing. Entry [tosca_definitions_version]"
);
}
@Test
public void shouldReportThatDefinitionYamlDataIsInUnsupportedVersion(){
// given
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_0_0");
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
assertThat(convertToMessagesList(data.getRight())).contains(
"Invalid. Entry [tosca_definitions_version]. Should be tosca_simple_yaml_1_1"
);
}
@Test
public void shouldSetOnlyAVersionWhenMetaIsForToscaDirMode(){
// given
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_1_1");
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITH_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
final CSARArchive.Definition definition = data.getLeft();
final List errors = data.getRight();
assertThat(definition.getToscaDefinitionVersion()).isEqualTo("tosca_simple_yaml_1_1");
assertThat(errors).isEmpty();
}
@Test
public void shouldReportAnErrorWhenMetaIsNotSet(){
// given
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_1_1");
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
final CSARArchive.Definition definition = data.getLeft();
final List errors = data.getRight();
assertThat(definition.getToscaDefinitionVersion()).isEqualTo("tosca_simple_yaml_1_1");
assertThat(convertToMessagesList(errors)).contains(
"Invalid value. Entry [tosca_definitions_version]. Valid values are [tosca_simple_yaml_1_1]"
);
}
@Test
public void shouldPopulateMetadataModel(){
// given
final Map metadata = givenPopulateMetadataData();
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_1_1");
yaml.put("metadata", metadata);
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
//then
final CSARArchive.Definition definition = data.getLeft();
final List errors = data.getRight();
assertThat(definition.getToscaDefinitionVersion()).isEqualTo("tosca_simple_yaml_1_1");
assertThat(convertToMessagesList(errors)).isEmpty();
final Definition.Metadata metadataModel = definition.getMetadata();
assertThat(metadataModel.getTemplateAuthor()).isEqualTo("author");
assertThat(metadataModel.getTemplateName()).isEqualTo("template name");
assertThat(metadataModel.getTemplateVersion()).isEqualTo("template version");
}
@Test
public void shouldReportAnErrorWhenMetadataParameterIsNotSupported(){
// given
final Map metadata = givenPopulateMetadataData();
metadata.put("NEW ENTRY DEFINITION TEMPLATE PARAMETER", "some value");
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_1_1");
yaml.put("metadata", metadata);
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
final List errors = data.getRight();
assertThat(convertToMessagesList(errors)).contains(
"Ignored. Entry [NEW ENTRY DEFINITION TEMPLATE PARAMETER]"
);
}
@Test
public void shouldReportErrorsWhenMetadataModelIsEmpty(){
// given
final Map metadata = new HashMap<>();
final HashMap yaml = givenEmptyYamlData("tosca_simple_yaml_1_1");
yaml.put("metadata", metadata);
DefinitionMetadataParser definitionMetadataParser = new DefinitionMetadataParser(
yaml, DEFINITION_YAML, CSARArchive.Mode.WITHOUT_TOSCA_META_DIR);
// when
final Pair> data = definitionMetadataParser.parse();
// then
final List errors = data.getRight();
assertThat(convertToMessagesList(errors)).contains(
"Missing. Entry [template_author]",
"Missing. Entry [template_name]",
"Missing. Entry [template_version]"
);
}
private HashMap givenEmptyYamlData(String tosca_simple_yaml_0_0) {
final HashMap yaml = new HashMap<>();
yaml.put(ENTRY_DEFINITION_TOSCA_DEFINITIONS_VERSION, tosca_simple_yaml_0_0);
return yaml;
}
private Map givenPopulateMetadataData() {
final Map metadata = new HashMap<>();
metadata.put(ENTRY_DEFINITION_TEMPLATE_AUTHOR, "author");
metadata.put(ENTRY_DEFINITION_TEMPLATE_NAME, "template name");
metadata.put(ENTRY_DEFINITION_TEMPLATE_VERSION, "template version");
return metadata;
}
}