/** * This file is part of CloudML [ http://cloudml.org ] * * Copyright (C) 2012 - SINTEF ICT * Contact: Franck Chauvel <franck.chauvel@sintef.no> * * Module: root * * CloudML is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * CloudML is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General * Public License along with CloudML. If not, see * <http://www.gnu.org/licenses/>. */ package test.cloudml.codecs.kmf; import junit.framework.TestCase; import org.cloudml.codecs.BridgeToCloudML; import org.cloudml.codecs.KMFBridge; import org.cloudml.core.*; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; import java.util.ArrayList; import java.util.List; import static org.hamcrest.MatcherAssert.*; import static org.hamcrest.Matchers.*; /** * Created by nicolasf on 26.02.14. */ @RunWith(JUnit4.class) public class BridgeToCloudMLTest extends TestCase { @Test public void testFromEmptyModel() { Deployment model = new Deployment(); KMFBridge bridge = new KMFBridge(); net.cloudml.core.CloudMLModel kmodel = bridge.toKMF(model); assertTrue(kmodel.getClouds().isEmpty()); assertTrue(kmodel.getComponentInstances().isEmpty()); assertTrue(kmodel.getComponents().isEmpty()); assertTrue(kmodel.getClouds().isEmpty()); assertTrue(kmodel.getRelationshipInstances().isEmpty()); assertTrue(kmodel.getRelationships().isEmpty()); assertTrue(kmodel.getProviders().isEmpty()); } @Test public void offersShouldBeConvertedToCloudML() { final KMFSamplesBuilder kmfSamples = new KMFSamplesBuilder(); final String vmName = "Foo VM"; net.cloudml.core.CloudMLModel kDeployment = kmfSamples.aVmOffering(vmName, "OS", "Linux"); final KMFBridge bridge = new KMFBridge(); final Deployment deployment = (Deployment) bridge.toPOJO(kDeployment); final Property offer = deployment .getComponents() .onlyVMs().firstNamed(vmName) .getProvidedExecutionPlatforms().toList().get(0).getOffers().get("OS"); assertThat("offer", offer, is(not(nullValue()))); assertThat("offer's name", offer.getName(), is(equalTo("OS"))); assertThat("offer's value", offer.getValue(), is(equalTo("Linux"))); } @Test public void demandsShouldBeConvertedToCloudML() { final KMFSamplesBuilder kmfSamples = new KMFSamplesBuilder(); final String appName = "Foo App"; net.cloudml.core.CloudMLModel kDeployment = kmfSamples.anInternalComponentDemanding(appName, "OS", "Linux"); final KMFBridge bridge = new KMFBridge(); final Deployment deployment = (Deployment) bridge.toPOJO(kDeployment); final Property demand = deployment .getComponents() .onlyInternals().firstNamed(appName) .getRequiredExecutionPlatform().getDemands().get("OS"); assertThat("demand", demand, is(not(nullValue()))); assertThat("demand's name", demand.getName(), is(equalTo("OS"))); assertThat("demand's value", demand.getValue(), is(equalTo("Linux"))); } /** * Tests providers */ @Test(expected = IllegalArgumentException.class) public void testProviderToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.providersToPOJO(null); } @Test public void testProviderToPojoEmpty() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.providersToPOJO(new ArrayList<net.cloudml.core.Provider>()); assertTrue(bridge.getCloudMLModel().getProviders().isEmpty()); } @Test public void testProviderToPojoWithElements() { BridgeToCloudML bridge = new BridgeToCloudML(); List<net.cloudml.core.Provider> providers = new ArrayList<net.cloudml.core.Provider>(); KMFSamplesBuilder kmfSamples = new KMFSamplesBuilder(); providers.add(kmfSamples.getProviderA()); bridge.providersToPOJO(providers); Provider actual = bridge.getCloudMLModel().getProviders().toList().get(0); Matcher matcher = new Matcher(); assertTrue(new Matcher().match(kmfSamples.getProviderA(), actual)); } /** * Tests on external components */ @Test(expected = IllegalArgumentException.class) public void testExternalComponentToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.externalComponentToPOJO(null); } @Test public void testExternalComponentToPojoWithElements() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.VM input = new KMFSamplesBuilder().getVMA(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); cm.addProviders(input.getProvider()); cm.addVms(input); KMFSamplesBuilder kmfSamples = new KMFSamplesBuilder(); bridge.toPOJO(cm); List<org.cloudml.core.ExternalComponent> output = bridge.getCloudMLModel().getComponents().onlyExternals().toList(); assertFalse(output.isEmpty()); VM actual = (VM) output.get(0); assertTrue(new Matcher().matchVM(kmfSamples.getVMA(), actual)); } /** * Tests on internal components */ @Test(expected = IllegalArgumentException.class) public void testInternalComponentToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.internalComponentToPOJO(null); } @Test public void testInternalComponentToPojoWithElements() { BridgeToCloudML bridge = new BridgeToCloudML(); KMFSamplesBuilder kmfSamples = new KMFSamplesBuilder(); bridge.internalComponentToPOJO(kmfSamples.getInternalComponentA()); InternalComponent result = bridge.getCloudMLModel().getComponents().onlyInternals().toList().get(0); assertTrue(new Matcher().matchIC(kmfSamples.getInternalComponentA(), result)); } /** * Tests on relationships */ @Test(expected = IllegalArgumentException.class) public void testRelationshipToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.relationshipToPOJO(null); } @Test(expected = IllegalArgumentException.class) public void testRelationshipToPojoWithInvalidElements() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.Relationship kic = createRelationship("SensAppBinding"); bridge.relationshipToPOJO(kic); } @Test public void testRelationshipToPojoWithElements() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.Relationship input = new KMFSamplesBuilder().getRelationshipA(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); cm.addRelationships(input); cm.addInternalComponents((net.cloudml.core.InternalComponent)input.getProvidedPort().getComponent()); cm.addInternalComponents((net.cloudml.core.InternalComponent)input.getRequiredPort().getComponent()); bridge.toPOJO(cm); Relationship output = bridge.getCloudMLModel().getRelationships().firstNamed(input.getName()); assertTrue(new Matcher().matchRelationship(input, output)); } /** * Tests on VM instances */ @Test(expected = IllegalArgumentException.class) public void testExternalComponentInstanceToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.externalComponentInstanceToPOJO(null); } @Test public void testExternalComponentInstanceToPojoWithElement() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.VMInstance input = new KMFSamplesBuilder().getVMInstanceA(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); cm.addProviders(((net.cloudml.core.VM) input.getType()).getProvider()); cm.addVms((net.cloudml.core.VM)input.getType()); cm.addVmInstances(input); bridge.toPOJO(cm); assertFalse(bridge.getCloudMLModel().getComponentInstances().onlyExternals().isEmpty()); VMInstance output = (VMInstance) (bridge.getCloudMLModel().getComponentInstances().onlyExternals().toList().get(0)); assertNotNull(output); assertNotNull(output.getName()); assertNotNull(output.getType()); assertTrue(new Matcher().matchVMInstance(input, output)); } /** * Tests in internal component instance */ @Test(expected = IllegalArgumentException.class) public void testInternalComponentInstanceToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.internalComponentInstanceToPOJO(null); } @Test public void testInternalComponentInstanceToPojoWithElement() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.InternalComponentInstance input = new KMFSamplesBuilder().getInternalComponentInstanceA(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); cm.addInternalComponents((net.cloudml.core.InternalComponent)input.getType()); cm.addInternalComponentInstances(input); bridge.toPOJO(cm); List<InternalComponentInstance> ici = bridge.getCloudMLModel().getComponentInstances().onlyInternals().toList(); assertFalse(ici.isEmpty()); InternalComponentInstance output = ici.get(0); assertNotNull(output); assertNotNull(output.getName()); assertNotNull(output.getType()); assertNotNull(output.getRequiredExecutionPlatform()); assertTrue(new Matcher().matchICI(input, output)); } /** * Tests relationship instances */ @Test(expected = IllegalArgumentException.class) public void testRelationshipInstanceToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.relationshipInstanceToPOJO(null); } @Test(expected = IllegalArgumentException.class) public void testRelationshipInstancesToPojoWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.relationshipInstancesToPOJO(null); } @Test(expected = IllegalArgumentException.class) public void testRelationshipInstanceToPojoWithNotValidElement() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.RelationshipInstance kvi = createRelationshipInstanceNotValid("DBS"); bridge.relationshipInstanceToPOJO(kvi); } @Test public void testRelationshipInstanceToPojoWithElement() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.RelationshipInstance input = new KMFSamplesBuilder().getRelationshipInstanceA(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); cm.addRelationships(input.getType()); cm.addInternalComponents((net.cloudml.core.InternalComponent)input.getType().getProvidedPort().getComponent()); //cm.addComponents(input.getProvidedPortInstance().getComponentInstance().getDestination().getType()); cm.addInternalComponents((net.cloudml.core.InternalComponent)input.getType().getRequiredPort().getComponent()); //cm.addComponents(input.getRequiredPortInstance().getComponentInstance().getDestination().getType()); cm.addRelationshipInstances(input); cm.addInternalComponentInstances((net.cloudml.core.InternalComponentInstance)input.getProvidedPortInstance().getComponentInstance()); //cm.addComponentInstances(input.getProvidedPortInstance().getComponentInstance().getDestination()); cm.addInternalComponentInstances((net.cloudml.core.InternalComponentInstance)input.getRequiredPortInstance().getComponentInstance()); //cm.addComponentInstances(input.getRequiredPortInstance().getComponentInstance().getDestination()); bridge.toPOJO(cm); RelationshipInstance output = bridge.getCloudMLModel().getRelationshipInstances().toList().get(0); assertTrue(new Matcher().matchRelationshipInstance(input, output)); } @Test(expected = IllegalArgumentException.class) public void testExecuteInstanceToKmfWithNull() { BridgeToCloudML bridge = new BridgeToCloudML(); bridge.relationshipInstancesToPOJO(null); } @Test public void testExecuteInstanceToKmfWithValidElement() { BridgeToCloudML bridge = new BridgeToCloudML(); net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.CloudMLModel cm = factory.createCloudMLModel(); bridge.toPOJO(cm); } public net.cloudml.core.RelationshipInstance createRelationshipInstanceNotValid(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.RelationshipInstance kcomp = factory.createRelationshipInstance(); kcomp.setName(name); kcomp.setType(factory.createRelationship()); return kcomp; } public net.cloudml.core.RelationshipInstance createRelationshipInstance(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.RelationshipInstance kri = factory.createRelationshipInstance(); kri.setName(name); kri.setType(factory.createRelationship()); net.cloudml.core.ProvidedPortInstance pp = factory.createProvidedPortInstance(); net.cloudml.core.RequiredPortInstance rp = factory.createRequiredPortInstance(); pp.setName("plop"); rp.setName("plip"); pp.setComponentInstance(factory.createComponentInstance()); rp.setComponentInstance(factory.createComponentInstance()); return kri; } public net.cloudml.core.InternalComponentInstance createInternalComponentInstance(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.InternalComponentInstance kcomp = factory.createInternalComponentInstance(); //kcomp.setDestination(factory.createVMInstance()); kcomp.setRequiredExecutionPlatformInstance(factory.createRequiredExecutionPlatformInstance()); kcomp.setName(name); return kcomp; } public net.cloudml.core.VMInstance createVMInstance(String name, String ip) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.VMInstance kcomp = factory.createVMInstance(); kcomp.setPublicAddress(ip); kcomp.setName(name); return kcomp; } public net.cloudml.core.Relationship createRelationshipWithPorts(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.Relationship kcomp = factory.createRelationship(); kcomp.setName(name); net.cloudml.core.ProvidedPort pp = factory.createProvidedPort(); pp.setName(name + "pp"); net.cloudml.core.Component c = factory.createComponent(); c.setName(name + "c"); pp.setComponent(c); net.cloudml.core.RequiredPort rp = factory.createRequiredPort(); rp.setName(name + "rp"); net.cloudml.core.Component c2 = factory.createComponent(); c2.setName(name + "c"); rp.setComponent(c2); kcomp.setProvidedPort(pp); kcomp.setRequiredPort(rp); return kcomp; } public net.cloudml.core.Relationship createRelationship(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.Relationship kcomp = factory.createRelationship(); kcomp.setName(name); kcomp.setProvidedPort(factory.createProvidedPort()); return kcomp; } public net.cloudml.core.InternalComponent createInternalComponent(String name) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.InternalComponent kcomp = factory.createInternalComponent(); //TODO: to be completed kcomp.setName(name); return kcomp; } public net.cloudml.core.VM createVM(String name, String endPoint) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.VM kcomp = factory.createVM(); //TODO: to be completed kcomp.setName(name); kcomp.setEndPoint(endPoint); return kcomp; } public net.cloudml.core.Provider createProvider(String name, String credentials) { net.cloudml.core.CoreFactory factory = new net.cloudml.factory.MainFactory().getCoreFactory(); net.cloudml.core.Provider kProvider = factory.createProvider(); kProvider.setName(name); kProvider.setCredentials(credentials); return kProvider; } }