From a5b4efe96ac865489d70a1651d71ae1fea94d162 Mon Sep 17 00:00:00 2001 From: erbel <johannes.erbel@cs.uni-goettingen.de> Date: Mon, 29 Oct 2018 14:35:25 +0100 Subject: [PATCH] Added example deployments --- build.gradle | 10 +- src/main/resources/log4j.properties | 8 ++ src/main/resources/occi/runtime.occic | 5 + .../ugoe/cs/rwm/mocci/DeployWorkflowTest.java | 58 +++++++++ .../de/ugoe/cs/rwm/mocci/TestUtility.java | 111 ++++++++++++++++++ .../mocci/live/DeployWorkflowLiveTest.java | 57 +++++++++ 6 files changed, 247 insertions(+), 2 deletions(-) create mode 100755 src/main/resources/log4j.properties create mode 100755 src/main/resources/occi/runtime.occic create mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/DeployWorkflowTest.java create mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/TestUtility.java create mode 100644 src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java diff --git a/build.gradle b/build.gradle index 510b000..145ba28 100644 --- a/build.gradle +++ b/build.gradle @@ -63,6 +63,7 @@ dependencies { //compile group: 'de.ugoe.cs.rwm.pcg', name: 'model', version: '1.0.0' compile group: 'de.ugoe.cs.rwm', name: 'tocci', version: '1.0.0' compile group: 'de.ugoe.cs.rwm', name: 'cocci', version: '1.0.0' + compile group: 'de.ugoe.cs.rwm', name: 'docci', version: '1.0.0', changing: true compile group: 'de.ugoe.cs.rwm.wocci', name: 'model', version: '1.0.0' //modmacao compile group: 'org.modmacao', name: 'core', version: '1.0.0' @@ -88,13 +89,18 @@ dependencies { //testImplementation 'junit:junit:4.12' } +configurations.all { + // Check for updates every build + resolutionStrategy.cacheChangingModulesFor 0, 'seconds' +} + javadoc { source = sourceSets.main.allJava classpath = configurations.compile failOnError = true } test { - //exclude 'de/ugoe/cs/rwm/docci/live/**' + exclude 'de/ugoe/cs/rwm/docci/live/**' testLogging.showStandardStreams = true testLogging { exceptionFormat = 'full' @@ -151,7 +157,7 @@ uploadArchives { authentication(userName: System.getenv('NEXUSUSER'), password: System.getenv('NEXUSPASSWORD')) } pom.version = "1.0.0" - pom.artifactId = "docci" + pom.artifactId = "mocci" pom.groupId = "de.ugoe.cs.rwm" } } diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties new file mode 100755 index 0000000..393e087 --- /dev/null +++ b/src/main/resources/log4j.properties @@ -0,0 +1,8 @@ +# Root logger option +log4j.rootLogger=INFO, stdout + +# Direct log messages to stdout +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.Target=System.out +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n \ No newline at end of file diff --git a/src/main/resources/occi/runtime.occic b/src/main/resources/occi/runtime.occic new file mode 100755 index 0000000..b83694b --- /dev/null +++ b/src/main/resources/occi/runtime.occic @@ -0,0 +1,5 @@ +<?xml version="1.0" encoding="ASCII"?> +<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:occi="http://schemas.ogf.org/occi/core/ecore"> + <occi:Configuration> + </occi:Configuration> +</xmi:XMI> diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/DeployWorkflowTest.java b/src/test/java/de/ugoe/cs/rwm/mocci/DeployWorkflowTest.java new file mode 100644 index 0000000..0ccad21 --- /dev/null +++ b/src/test/java/de/ugoe/cs/rwm/mocci/DeployWorkflowTest.java @@ -0,0 +1,58 @@ +package de.ugoe.cs.rwm.mocci; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.eclipse.cmf.occi.core.util.OcciRegistry; +import org.eclipse.epsilon.emc.emf.CachedResourceSet; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import de.ugoe.cs.rwm.docci.MartDeployer; +import de.ugoe.cs.rwm.docci.ModelUtility; +import de.ugoe.cs.rwm.mocci.TestUtility; +import de.ugoe.cs.rwm.docci.connector.Connector; +import de.ugoe.cs.rwm.docci.connector.LocalhostConnector; +import de.ugoe.cs.rwm.docci.connector.MartConnector; +import de.ugoe.cs.rwm.tocci.Transformator; +import de.ugoe.cs.rwm.tocci.TransformatorFactory; + +public class DeployWorkflowTest { + @BeforeClass + public static void OCCIRegistrySetup() { + TestUtility.loggerSetup(); + TestUtility.extensionRegistrySetup(); + } + + @Before + public void deprovisionEverything() { + CachedResourceSet.getCache().clear(); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/Empty.occic")); + Connector conn = new LocalhostConnector("localhost", 8080, "ubuntu"); + MartDeployer deployer = new MartDeployer(conn); + deployer.deploy(occiPath); + } + + @Test + public void deployWaaS() { + CachedResourceSet.getCache().clear(); + System.out.println(OcciRegistry.getInstance().getRegisteredExtensions()); + Logger.getRootLogger().setLevel(Level.FATAL); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/MLSDiffVM.occic")); + + Transformator trans = TransformatorFactory.getTransformator("OCCI2OCCI"); + trans.transform(occiPath, occiPath); + + Connector conn = new LocalhostConnector("localhost", 8080, "ubuntu"); + MartDeployer deployer = new MartDeployer(conn); + + deployer.deploy(occiPath); + + assertTrue(TestUtility.equalsRuntime(occiPath, conn)); + } +} diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/TestUtility.java b/src/test/java/de/ugoe/cs/rwm/mocci/TestUtility.java new file mode 100644 index 0000000..15f1ff5 --- /dev/null +++ b/src/test/java/de/ugoe/cs/rwm/mocci/TestUtility.java @@ -0,0 +1,111 @@ +package de.ugoe.cs.rwm.mocci; + +import java.io.File; +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.apache.log4j.PropertyConfigurator; +import org.eclipse.cmf.occi.core.OCCIPackage; +import org.eclipse.cmf.occi.core.util.OcciRegistry; +import org.eclipse.cmf.occi.infrastructure.InfrastructurePackage; +import org.eclipse.emf.ecore.EObject; +import org.modmacao.ansibleconfiguration.AnsibleconfigurationPackage; +import org.modmacao.placement.PlacementPackage; + +import de.ugoe.cs.rwm.cocci.Comparator; +import de.ugoe.cs.rwm.cocci.ComparatorFactory; +import de.ugoe.cs.rwm.docci.Deployer; +import de.ugoe.cs.rwm.docci.ModelUtility; +import de.ugoe.cs.rwm.docci.appdeployer.MartAppDeployerMaster; +import de.ugoe.cs.rwm.docci.appdeployer.MartAppDeployerSlave; +import de.ugoe.cs.rwm.docci.connector.Connector; +import de.ugoe.cs.rwm.docci.deprovisioner.Deprovisioner; +import de.ugoe.cs.rwm.docci.executor.Executor; +import de.ugoe.cs.rwm.docci.extractor.Extractor; +import de.ugoe.cs.rwm.docci.provisioner.Provisioner; +import de.ugoe.cs.rwm.docci.updater.ElementAdapter; +import modmacao.ModmacaoPackage; +import openstackruntime.OpenstackruntimePackage; +import ossweruntime.OssweruntimePackage; +import workflow.WorkflowPackage; + +public class TestUtility { + public static void extensionRegistrySetup() { + InfrastructurePackage.eINSTANCE.eClass(); + OCCIPackage.eINSTANCE.eClass(); + ModmacaoPackage.eINSTANCE.eClass(); + OpenstackruntimePackage.eINSTANCE.eClass(); + PlacementPackage.eINSTANCE.eClass(); + WorkflowPackage.eINSTANCE.eClass(); + OssweruntimePackage.eINSTANCE.eClass(); + AnsibleconfigurationPackage.eINSTANCE.eClass(); + + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/modmacao#", + ModmacaoPackage.class.getClassLoader().getResource("model/modmacao.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/runtime#", + OpenstackruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#", + OssweruntimePackage.class.getClassLoader().getResource("model/openstackruntime.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/placement#", + PlacementPackage.class.getClassLoader().getResource("model/placement.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/infrastructure#", + InfrastructurePackage.class.getClassLoader().getResource("model/Infrastructure.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.ogf.org/occi/core#", + OCCIPackage.class.getClassLoader().getResource("model/Core.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.ugoe.cs.rwm/workflow#", + OCCIPackage.class.getClassLoader().getResource("model/workflow.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/openstack/swe#", + OCCIPackage.class.getClassLoader().getResource("model/ossweruntime.occie").toString()); + OcciRegistry.getInstance().registerExtension("http://schemas.modmacao.org/occi/ansible#", + OCCIPackage.class.getClassLoader().getResource("model/ansibleconfiguration.occie").toString()); + } + + public static void loggerSetup() { + File log4jfile = new File(ModelUtility.getPathToResource("log4j.properties")); + PropertyConfigurator.configure(log4jfile.getAbsolutePath()); + Logger.getLogger(Executor.class.getName()).setLevel(Level.DEBUG); + Logger.getLogger(Extractor.class.getName()).setLevel(Level.DEBUG); + Logger.getLogger(Provisioner.class.getName()).setLevel(Level.DEBUG); + Logger.getLogger(Comparator.class.getName()).setLevel(Level.FATAL); + Logger.getLogger(Deprovisioner.class.getName()).setLevel(Level.INFO); + Logger.getLogger(Connector.class.getName()).setLevel(Level.DEBUG); + Logger.getLogger(ElementAdapter.class.getName()).setLevel(Level.INFO); + Logger.getLogger(Deployer.class.getName()).setLevel(Level.INFO); + Logger.getLogger(MartAppDeployerMaster.class.getName()).setLevel(Level.DEBUG); + Logger.getLogger(MartAppDeployerSlave.class.getName()).setLevel(Level.DEBUG); + } + + public static boolean equalsRuntime(Path desiredModelPath, Connector conn) { + Path deployedOCCI = Paths.get(ModelUtility.getPathToResource("occi/deployedRuntime.occic")); + conn.loadRuntimeModel(deployedOCCI); + org.eclipse.emf.ecore.resource.Resource desiredModel = ModelUtility.loadOCCIintoEMFResource(desiredModelPath); + org.eclipse.emf.ecore.resource.Resource runtimeModel = ModelUtility.loadOCCIintoEMFResource(deployedOCCI); + + Comparator comp = ComparatorFactory.getComparator("Simple", desiredModel, runtimeModel); + + boolean assertion = true; + System.out.println("MISSING ELEMENTS:"); + for (EObject obj : comp.getMissingElements()) { + // Network check due to provider network + if (obj.eClass().getName().equals("Network") == false) { + + System.out.println(obj); + assertion = false; + } + + } + + System.out.println("NEW ELEMENTS:"); + for (EObject obj : comp.getNewElements()) { + // Network check due to provider network + if (obj.eClass().getName().equals("Network") == false) { + System.out.println(obj); + assertion = false; + } + } + return assertion; + } + +} diff --git a/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java b/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java new file mode 100644 index 0000000..981fcc4 --- /dev/null +++ b/src/test/java/de/ugoe/cs/rwm/mocci/live/DeployWorkflowLiveTest.java @@ -0,0 +1,57 @@ +package de.ugoe.cs.rwm.mocci.live; + +import static org.junit.Assert.assertTrue; + +import java.nio.file.Path; +import java.nio.file.Paths; + +import org.apache.log4j.Level; +import org.apache.log4j.Logger; +import org.eclipse.cmf.occi.core.util.OcciRegistry; +import org.eclipse.epsilon.emc.emf.CachedResourceSet; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import de.ugoe.cs.rwm.docci.MartDeployer; +import de.ugoe.cs.rwm.docci.ModelUtility; +import de.ugoe.cs.rwm.mocci.TestUtility; +import de.ugoe.cs.rwm.docci.connector.Connector; +import de.ugoe.cs.rwm.docci.connector.MartConnector; +import de.ugoe.cs.rwm.tocci.Transformator; +import de.ugoe.cs.rwm.tocci.TransformatorFactory; + +public class DeployWorkflowLiveTest { + @BeforeClass + public static void OCCIRegistrySetup() { + TestUtility.loggerSetup(); + TestUtility.extensionRegistrySetup(); + } + + @Before + public void deprovisionEverything() { + CachedResourceSet.getCache().clear(); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/Empty.occic")); + Connector conn = new MartConnector("localhost", 8080, "root", "~/key.pem"); + MartDeployer deployer = new MartDeployer(conn); + deployer.deploy(occiPath); + } + + @Test + public void deployWaaS() { + CachedResourceSet.getCache().clear(); + System.out.println(OcciRegistry.getInstance().getRegisteredExtensions()); + Logger.getRootLogger().setLevel(Level.FATAL); + Path occiPath = Paths.get(ModelUtility.getPathToResource("occi/MLSDiffVM.occic")); + + Transformator trans = TransformatorFactory.getTransformator("OCCI2OCCI"); + trans.transform(occiPath, occiPath); + + Connector conn = new MartConnector("localhost", 8080, "root", "~/key.pem"); + MartDeployer deployer = new MartDeployer(conn); + + deployer.deploy(occiPath); + + assertTrue(TestUtility.equalsRuntime(occiPath, conn)); + } +} -- GitLab