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