diff --git a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/FileBasedRepositoryConfiguration.java b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/FileBasedRepositoryConfiguration.java index 567b6470c6..49550b1390 100644 --- a/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/FileBasedRepositoryConfiguration.java +++ b/org.eclipse.winery.common/src/main/java/org/eclipse/winery/common/configuration/FileBasedRepositoryConfiguration.java @@ -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); } diff --git a/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java b/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java index f1f55c42e0..0f930f967c 100644 --- a/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java +++ b/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/main/java/org/eclipse/winery/repository/TestWithGitBackedRepository.java @@ -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); @@ -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); diff --git a/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/test/java/org/eclipse/winery/repository/yaml/YamlRepositoryIntegrationTests.java b/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/test/java/org/eclipse/winery/repository/yaml/YamlRepositoryIntegrationTests.java index 87d67380f2..03e1b04d15 100644 --- a/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/test/java/org/eclipse/winery/repository/yaml/YamlRepositoryIntegrationTests.java +++ b/org.eclipse.winery.repository/org.eclipse.winery.repository.visible/src/test/java/org/eclipse/winery/repository/yaml/YamlRepositoryIntegrationTests.java @@ -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()); } } diff --git a/org.eclipse.winery.repository/org.eclipse.winery.repository.yaml/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java b/org.eclipse.winery.repository/org.eclipse.winery.repository.yaml/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java index a7bb1f4da8..ed3fd1e26a 100644 --- a/org.eclipse.winery.repository/org.eclipse.winery.repository.yaml/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java +++ b/org.eclipse.winery.repository/org.eclipse.winery.repository.yaml/src/main/java/org/eclipse/winery/repository/yaml/converter/ToCanonical.java @@ -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; @@ -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; @@ -140,7 +140,7 @@ public class ToCanonical { private Map> relationshipSTMap; private Map nodeTemplateMap; private AssignmentBuilder assignmentBuilder; -// private ReferenceVisitor referenceVisitor; + // private ReferenceVisitor referenceVisitor; private final IRepository context; public ToCanonical(IRepository context) { @@ -768,8 +768,8 @@ private void enhanceTopology(TTopologyTemplate topology, @NonNull Map targetList) { * Converts TOSCA YAML ArtifactDefinitions to TOSCA XML NodeTypeImplementations and ArtifactTemplates */ private void convertNodeTypeImplementation( - Map implArtifacts, - Map deplArtifacts, String type, String targetNamespace) { + Map implArtifacts, + Map deplArtifacts, String type, String targetNamespace) { for (Map.Entry implArtifact : implArtifacts.entrySet()) { for (Map.Entry deplArtifact : deplArtifacts.entrySet()) { if (implArtifact.getKey().equalsIgnoreCase(deplArtifact.getKey())) { @@ -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()) @@ -1233,7 +1235,9 @@ private TSchema convert(@Nullable YTSchemaDefinition node) { } private List convertList(@Nullable List yaml, Function convert) { - if (yaml == null) { return Collections.emptyList(); } + if (yaml == null) { + return Collections.emptyList(); + } return yaml.stream().map(convert).collect(Collectors.toList()); } }