Skip to content

Commit

Permalink
add YAML testing
Browse files Browse the repository at this point in the history
  • Loading branch information
lharzenetter committed Oct 8, 2020
1 parent 5ceeef9 commit 2d43287
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 87 deletions.
Expand Up @@ -35,7 +35,8 @@ public FileBasedRepositoryConfiguration(@NonNull Path repositoryPath) {
this(repositoryPath, Environments.getInstance().getRepositoryConfig().getProvider());
}

private FileBasedRepositoryConfiguration(@NonNull Path repositoryPath, RepositoryConfigurationObject.RepositoryProvider repositoryProvider) {
// We are making the access public here to enable proper testing.
public FileBasedRepositoryConfiguration(@NonNull Path repositoryPath, RepositoryConfigurationObject.RepositoryProvider repositoryProvider) {
this.repositoryPath = Objects.requireNonNull(repositoryPath);
this.repositoryProvider = Objects.requireNonNull(repositoryProvider);
}
Expand Down
Expand Up @@ -55,12 +55,13 @@ public abstract class TestWithGitBackedRepository {
* @throws RuntimeException wraps an Exception
*/
public TestWithGitBackedRepository() {
this(Paths.get(System.getProperty("java.io.tmpdir")).resolve("test-repository"),
"https://github.com/winery/test-repository.git",
RepositoryConfigurationObject.RepositoryProvider.FILE);
this(RepositoryConfigurationObject.RepositoryProvider.FILE);
}

protected TestWithGitBackedRepository(Path repositoryPath, String remoteUrl, RepositoryConfigurationObject.RepositoryProvider provider) {

protected TestWithGitBackedRepository(RepositoryConfigurationObject.RepositoryProvider provider) {
Path repositoryPath = Paths.get(System.getProperty("java.io.tmpdir")).resolve("test-repository");
String remoteUrl = "https://github.com/winery/test-repository.git";

try {
LOGGER.debug("Testing with repository directory {}", repositoryPath);

Expand Down Expand Up @@ -89,7 +90,7 @@ protected TestWithGitBackedRepository(Path repositoryPath, String remoteUrl, Rep
}

// inject the current path to the repository factory
FileBasedRepositoryConfiguration fileBasedRepositoryConfiguration = new FileBasedRepositoryConfiguration(repositoryPath);
FileBasedRepositoryConfiguration fileBasedRepositoryConfiguration = new FileBasedRepositoryConfiguration(repositoryPath, provider);
// force xml repository provider
fileBasedRepositoryConfiguration.setRepositoryProvider(provider);
GitBasedRepositoryConfiguration gitBasedRepositoryConfiguration = new GitBasedRepositoryConfiguration(false, fileBasedRepositoryConfiguration);
Expand Down
Expand Up @@ -14,74 +14,43 @@

package org.eclipse.winery.repository.yaml;

import java.io.IOException;
import java.nio.file.Paths;
import java.util.stream.Stream;
import javax.xml.namespace.QName;

import org.eclipse.winery.common.configuration.RepositoryConfigurationObject;
import org.eclipse.winery.model.ids.definitions.ArtifactTypeId;
import org.eclipse.winery.model.ids.definitions.CapabilityTypeId;
import org.eclipse.winery.model.ids.definitions.DataTypeId;
import org.eclipse.winery.model.ids.definitions.DefinitionsChildId;
import org.eclipse.winery.model.ids.definitions.InterfaceTypeId;
import org.eclipse.winery.model.ids.definitions.NodeTypeId;
import org.eclipse.winery.model.ids.definitions.PolicyTypeId;
import org.eclipse.winery.model.ids.definitions.RelationshipTypeId;
import org.eclipse.winery.model.ids.definitions.ServiceTemplateId;
import org.eclipse.winery.model.tosca.TDefinitions;
import org.eclipse.winery.model.tosca.TRelationshipTemplate;
import org.eclipse.winery.model.tosca.TServiceTemplate;
import org.eclipse.winery.repository.TestWithGitBackedRepository;

import org.eclipse.jgit.api.Status;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtensionContext;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.ArgumentsProvider;
import org.junit.jupiter.params.provider.ArgumentsSource;
import org.junit.platform.commons.util.Preconditions;

import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.assertNotNull;

public class YamlRepositoryIntegrationTests extends TestWithGitBackedRepository {

/**
* While this intends to hijack the infrastructure exposed by {@link TestWithGitBackedRepository} wwe need to use
* a YAML based repository for these tests and as such require a slightly different setup
*/
public YamlRepositoryIntegrationTests() {
super(Paths.get(System.getProperty("java.io.tmpdir")).resolve("yaml-test-repository"),
"https://github.com/radon-h2020/radon-particles.git",
RepositoryConfigurationObject.RepositoryProvider.YAML);
super(RepositoryConfigurationObject.RepositoryProvider.YAML);
}


@BeforeEach
public void testSetup() throws GitAPIException {
setRevisionTo("e76b05461e255dbf41a780c543fdc7ad2516cbbc");
}


@Test
@Disabled("Serialization is currently too non-deterministic to expect useful test results")
public void roundtripDoesNotChangeContents() {
assertAll(
repository.getAllDefinitionsChildIds().stream()
.map(definitionsId -> () -> {
TDefinitions retrieved = repository.getDefinitions(definitionsId);
try {
repository.putDefinition(definitionsId, retrieved);
public void retrieveInitialServiceTemplate() throws Exception {
this.setRevisionTo("bab12e7a8ca7af1c0a0ce186c81bab3899ab989b");

final Status gitStatus = git.status().call();
assertTrue(gitStatus.isClean(), "Failed for definitionsId " + definitionsId);
} catch (IOException | GitAPIException e) {
Preconditions.condition(false, "Exception occured during validation");
}
})
assertEquals(10, repository.getAllDefinitionsChildIds().size());
TServiceTemplate element = repository.getElement(
new ServiceTemplateId(QName.valueOf("{example.org.tosca.servicetemplates}demo_w1-wip1"))
);

assertNotNull(element);
assertNotNull(element.getTopologyTemplate());
assertEquals(3, element.getTopologyTemplate().getNodeTemplateOrRelationshipTemplate().size());
assertNotNull(element.getTopologyTemplate().getNodeTemplate("compute_w1-wip1_0"));
assertNotNull(element.getTopologyTemplate().getNodeTemplate("software_w1-wip1_0"));

TRelationshipTemplate relation = element.getTopologyTemplate().getRelationshipTemplate("con_hostedOn_0");
assertNotNull(relation);
assertEquals("software_w1-wip1_0", relation.getSourceElement().getRef().getId());
assertEquals("compute_w1-wip1_0", relation.getTargetElement().getRef().getId());
}
}
Expand Up @@ -30,6 +30,8 @@

import javax.xml.namespace.QName;

import org.eclipse.winery.model.converter.support.Defaults;
import org.eclipse.winery.model.converter.support.Namespaces;
import org.eclipse.winery.model.ids.EncodingUtil;
import org.eclipse.winery.model.ids.definitions.NodeTypeId;
import org.eclipse.winery.model.tosca.HasInheritance;
Expand Down Expand Up @@ -73,47 +75,45 @@
import org.eclipse.winery.model.tosca.TTag;
import org.eclipse.winery.model.tosca.TTags;
import org.eclipse.winery.model.tosca.TTopologyTemplate;
import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition;
import org.eclipse.winery.model.tosca.yaml.YTArtifactType;
import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition;
import org.eclipse.winery.model.tosca.yaml.YTCapabilityType;
import org.eclipse.winery.model.tosca.yaml.YTConstraintClause;
import org.eclipse.winery.model.tosca.yaml.YTDataType;
import org.eclipse.winery.model.tosca.yaml.YTEntityType;
import org.eclipse.winery.model.tosca.yaml.YTImplementation;
import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate;
import org.eclipse.winery.model.tosca.yaml.YTNodeType;
import org.eclipse.winery.model.tosca.yaml.YTPolicyType;
import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate;
import org.eclipse.winery.model.tosca.yaml.YTRelationshipType;
import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition;
import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate;
import org.eclipse.winery.repository.backend.IRepository;
import org.eclipse.winery.repository.yaml.converter.support.InheritanceUtils;
import org.eclipse.winery.model.tosca.extensions.kvproperties.AttributeDefinition;
import org.eclipse.winery.model.tosca.extensions.kvproperties.ConstraintClauseKV;
import org.eclipse.winery.model.tosca.extensions.kvproperties.ParameterDefinition;
import org.eclipse.winery.model.tosca.yaml.YTArtifactDefinition;
import org.eclipse.winery.model.tosca.yaml.YTArtifactType;
import org.eclipse.winery.model.tosca.yaml.YTAttributeDefinition;
import org.eclipse.winery.model.tosca.yaml.YTCapabilityAssignment;
import org.eclipse.winery.model.tosca.yaml.YTCapabilityDefinition;
import org.eclipse.winery.model.tosca.yaml.YTCapabilityType;
import org.eclipse.winery.model.tosca.yaml.YTConstraintClause;
import org.eclipse.winery.model.tosca.yaml.YTDataType;
import org.eclipse.winery.model.tosca.yaml.YTEntityType;
import org.eclipse.winery.model.tosca.yaml.YTGroupType;
import org.eclipse.winery.model.tosca.yaml.YTImplementation;
import org.eclipse.winery.model.tosca.yaml.YTImportDefinition;
import org.eclipse.winery.model.tosca.yaml.YTInterfaceDefinition;
import org.eclipse.winery.model.tosca.yaml.YTInterfaceType;
import org.eclipse.winery.model.tosca.yaml.YTNodeTemplate;
import org.eclipse.winery.model.tosca.yaml.YTNodeType;
import org.eclipse.winery.model.tosca.yaml.YTOperationDefinition;
import org.eclipse.winery.model.tosca.yaml.YTParameterDefinition;
import org.eclipse.winery.model.tosca.yaml.YTPolicyDefinition;
import org.eclipse.winery.model.tosca.yaml.YTPolicyType;
import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignment;
import org.eclipse.winery.model.tosca.yaml.YTPropertyAssignmentOrDefinition;
import org.eclipse.winery.model.tosca.yaml.YTPropertyDefinition;
import org.eclipse.winery.model.tosca.yaml.YTRelationshipTemplate;
import org.eclipse.winery.model.tosca.yaml.YTRelationshipType;
import org.eclipse.winery.model.tosca.yaml.YTRequirementAssignment;
import org.eclipse.winery.model.tosca.yaml.YTRequirementDefinition;
import org.eclipse.winery.model.tosca.yaml.YTSchemaDefinition;
import org.eclipse.winery.model.tosca.yaml.YTServiceTemplate;
import org.eclipse.winery.model.tosca.yaml.YTTopologyTemplateDefinition;
import org.eclipse.winery.model.tosca.yaml.support.Metadata;
import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementAssignment;
import org.eclipse.winery.model.tosca.yaml.support.ValueHelper;
import org.eclipse.winery.model.converter.support.Defaults;
import org.eclipse.winery.model.converter.support.Namespaces;
import org.eclipse.winery.model.tosca.yaml.support.YTMapRequirementAssignment;
import org.eclipse.winery.repository.backend.IRepository;
import org.eclipse.winery.repository.yaml.converter.support.AssignmentBuilder;
import org.eclipse.winery.repository.yaml.converter.support.InheritanceUtils;
import org.eclipse.winery.repository.yaml.converter.support.TypeConverter;
import org.eclipse.winery.repository.yaml.converter.support.extension.YTImplementationArtifactDefinition;

Expand All @@ -140,7 +140,7 @@ public class ToCanonical {
private Map<String, Map.Entry<String, String>> relationshipSTMap;
private Map<String, TNodeTemplate> nodeTemplateMap;
private AssignmentBuilder assignmentBuilder;
// private ReferenceVisitor referenceVisitor;
// private ReferenceVisitor referenceVisitor;
private final IRepository context;

public ToCanonical(IRepository context) {
Expand Down Expand Up @@ -768,8 +768,8 @@ private void enhanceTopology(TTopologyTemplate topology, @NonNull Map<String, YT
// requirement with a type that is not a RelationshipTemplate in the topology
continue;
}
relationship.setTargetNodeTemplate(topology.getNodeTemplate(id));
relationship.setSourceNodeTemplate(topology.getNodeTemplate(req.getNode().toString()));
relationship.setTargetNodeTemplate(topology.getNodeTemplate(req.getNode().toString()));
relationship.setSourceNodeTemplate(topology.getNodeTemplate(id));
}
}
});
Expand Down Expand Up @@ -983,8 +983,8 @@ private TAppliesTo convertTargets(List<QName> targetList) {
* Converts TOSCA YAML ArtifactDefinitions to TOSCA XML NodeTypeImplementations and ArtifactTemplates
*/
private void convertNodeTypeImplementation(
Map<String, YTArtifactDefinition> implArtifacts,
Map<String, YTArtifactDefinition> deplArtifacts, String type, String targetNamespace) {
Map<String, YTArtifactDefinition> implArtifacts,
Map<String, YTArtifactDefinition> deplArtifacts, String type, String targetNamespace) {
for (Map.Entry<String, YTArtifactDefinition> implArtifact : implArtifacts.entrySet()) {
for (Map.Entry<String, YTArtifactDefinition> deplArtifact : deplArtifacts.entrySet()) {
if (implArtifact.getKey().equalsIgnoreCase(deplArtifact.getKey())) {
Expand Down Expand Up @@ -1223,7 +1223,9 @@ private TEntityType.YamlPropertyDefinition convert(YTPropertyDefinition node, St

@Nullable
private TSchema convert(@Nullable YTSchemaDefinition node) {
if (node == null) { return null; }
if (node == null) {
return null;
}
TSchema.Builder builder = new TSchema.Builder(node.getType());
return builder.setConstraints(convertList(node.getConstraints(), this::convert))
.setDescription(node.getDescription())
Expand All @@ -1233,7 +1235,9 @@ private TSchema convert(@Nullable YTSchemaDefinition node) {
}

private <R, I> List<R> convertList(@Nullable List<I> yaml, Function<I, R> convert) {
if (yaml == null) { return Collections.emptyList(); }
if (yaml == null) {
return Collections.emptyList();
}
return yaml.stream().map(convert).collect(Collectors.toList());
}
}

0 comments on commit 2d43287

Please sign in to comment.