From 1ffac143c1f3faff500fea48d46c363580e08c8b Mon Sep 17 00:00:00 2001 From: Nikolaus Huber <nikolaus.huber@uni-wuerzburg.de> Date: Tue, 5 Feb 2013 10:16:09 +0000 Subject: [PATCH] added ContainerTemplate scaling for only a single RE instance referring to the template git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@10153 9e42b895-fcda-4063-8a3b-11be15eb1bbd --- .../model/util/DmmModelChangerTest.java | 94 +++++++++++++++++-- .../util/DmmModelActionHelperTest.java | 36 +++++++ 2 files changed, 120 insertions(+), 10 deletions(-) diff --git a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/util/DmmModelChangerTest.java b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/util/DmmModelChangerTest.java index 62c00424..ccc7eef8 100644 --- a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/util/DmmModelChangerTest.java +++ b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/util/DmmModelChangerTest.java @@ -3,7 +3,6 @@ package edu.kit.ipd.descartes.adaptation.model.util; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; import org.junit.Before; import org.junit.Test; @@ -13,7 +12,10 @@ import edu.kit.ipd.descartes.adaptation.exceptions.OperationNotPerformedExceptio import edu.kit.ipd.descartes.mm.adaptation.AdaptationDirection; import edu.kit.ipd.descartes.mm.adaptationpoints.AdaptationpointsFactory; import edu.kit.ipd.descartes.mm.adaptationpoints.ModelVariableConfigurationRange; +import edu.kit.ipd.descartes.mm.containerrepository.ContainerTemplate; +import edu.kit.ipd.descartes.mm.containerrepository.ContainerrepositoryFactory; import edu.kit.ipd.descartes.mm.resourceconfiguration.ActiveResourceSpecification; +import edu.kit.ipd.descartes.mm.resourceconfiguration.ConfigurationSpecification; import edu.kit.ipd.descartes.mm.resourceconfiguration.NumberOfParallelProcessingUnits; import edu.kit.ipd.descartes.mm.resourceconfiguration.ProcessingResourceSpecification; import edu.kit.ipd.descartes.mm.resourceconfiguration.ResourceconfigurationFactory; @@ -25,6 +27,9 @@ public class DmmModelChangerTest extends AbstractTest { private static final String PARENT_CONTAINER = "PARENT_CONTAINER"; private static final String TEST_RUNTIME_ENV = "TEST_RUNTIME_ENV"; + private static final String NOC_NAME = "NumberOfCores_TestName"; + private static final String NOC_ID = "NumberOfCores_TestId"; + private static final String EMPTY = "Empty"; private static final int MIN = 1; private static final int MAX = 4; private static final int DEFAULT = 2; @@ -32,28 +37,43 @@ public class DmmModelChangerTest extends AbstractTest { RuntimeEnvironment original = null; NumberOfParallelProcessingUnits adaptableNumberOfCores = null; ModelVariableConfigurationRange point = null; + ActiveResourceSpecification spec = null; + Container container = null; + ContainerTemplate template = null; @Before public void setUp() throws Exception { super.setUp(); + container = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); + template = ContainerrepositoryFactory.eINSTANCE.createContainerTemplate(); original = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); - original.setName(TEST_RUNTIME_ENV); - - ActiveResourceSpecification spec = ResourceconfigurationFactory.eINSTANCE.createActiveResourceSpecification(); - ProcessingResourceSpecification procSpec = ResourceconfigurationFactory.eINSTANCE.createProcessingResourceSpecification(); adaptableNumberOfCores = ResourceconfigurationFactory.eINSTANCE.createNumberOfParallelProcessingUnits(); - + ProcessingResourceSpecification procSpec = ResourceconfigurationFactory.eINSTANCE.createProcessingResourceSpecification(); + point = AdaptationpointsFactory.eINSTANCE.createModelVariableConfigurationRange(); + spec = ResourceconfigurationFactory.eINSTANCE.createActiveResourceSpecification(); + + adaptableNumberOfCores.setName(NOC_NAME); + adaptableNumberOfCores.setId(NOC_ID); adaptableNumberOfCores.setNumber(DEFAULT); + procSpec.setNrOfParProcUnits(adaptableNumberOfCores); + procSpec.setName(EMPTY); + + spec.setName(EMPTY); spec.getProcessingResourceSpecifications().add(procSpec); original.getConfigSpec().add(spec); - - point = AdaptationpointsFactory.eINSTANCE.createModelVariableConfigurationRange(); + original.setName(TEST_RUNTIME_ENV); point.setMinValue(MIN); point.setMaxValue(MAX); point.setAdaptableEntity(adaptableNumberOfCores); + point.setName(EMPTY); + + template.getTemplateConfig().add(spec); + template.setName(EMPTY); + container.setTemplate(template); + container.setName(EMPTY); } @Test(expected=OperationNotPerformedException.class) @@ -86,13 +106,29 @@ public class DmmModelChangerTest extends AbstractTest { @Test public void testScaleInRuntimeEnvironmentInstance() { - fail("Not yet implemented"); + Container parent = ResourcelandscapeFactory.eINSTANCE.createComputingInfrastructure(); + parent.setName(PARENT_CONTAINER); + parent.getContains().add(original); + + RuntimeEnvironment copy = DmmModelChanger.scaleOutRuntimeEnvironmentInstance(original); + + assertFalse(original.getId().equals(copy.getId())); + assertFalse(original.getName().equals(copy.getName())); + assertEquals(original.getName() + DmmModelChanger.COPY_MARK, copy.getName()); + assertEquals(original.getTemplate(), copy.getTemplate()); + assertTrue(parent.getContains().size() == 2); + assertEquals(original, parent.getContains().get(0)); + assertEquals(copy, parent.getContains().get(1)); + + RuntimeEnvironment removedElement = DmmModelChanger.scaleInRuntimeEnvironmentInstance(original); + assertEquals(copy, removedElement); + assertTrue(parent.getContains().size() == 1); + assertTrue(removedElement.getName().contains(DmmModelChanger.COPY_MARK)); } @Test public void testScaleOutRuntimeEnvironmentInstance() { Container parent = ResourcelandscapeFactory.eINSTANCE.createComputingInfrastructure(); - parent.setName(PARENT_CONTAINER); parent.getContains().add(original); @@ -108,5 +144,43 @@ public class DmmModelChangerTest extends AbstractTest { assertEquals(original, parent.getContains().get(0)); assertEquals(copy, parent.getContains().get(1)); } + + @Test(expected=OperationNotPerformedException.class) + public void testScaleContainerIncrease() throws OperationNotPerformedException { + assertTrue(container.getConfigSpec().size() == 0); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(DEFAULT + 2, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(DEFAULT + 2, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + } + + @Test(expected=OperationNotPerformedException.class) + public void testScaleContainerDecrease() throws OperationNotPerformedException { + assertTrue(container.getConfigSpec().size() == 0); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.DECREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.DECREASE); + assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + } + + @Test + public void testRemoveSpec() throws OperationNotPerformedException { + assertTrue(container.getConfigSpec().size() == 0); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleContainer(container, point, AdaptationDirection.DECREASE); + assertEquals(0, container.getConfigSpec().size()); + assertEquals(DEFAULT, getNrOfProcUnitsValue(template.getTemplateConfig().get(0))); + } + + private int getNrOfProcUnitsValue(ConfigurationSpecification config) { + ActiveResourceSpecification activeSpec = (ActiveResourceSpecification) config; + return activeSpec.getProcessingResourceSpecifications().get(0).getNrOfParProcUnits().getNumber(); + } } diff --git a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/util/DmmModelActionHelperTest.java b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/util/DmmModelActionHelperTest.java index 92fde894..d83493f0 100644 --- a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/util/DmmModelActionHelperTest.java +++ b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/util/DmmModelActionHelperTest.java @@ -2,11 +2,15 @@ package edu.kit.ipd.descartes.adaptation.util; import static org.junit.Assert.assertEquals; +import org.eclipse.emf.common.util.BasicEList; +import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EObject; +import org.eclipse.emf.ecore.util.EcoreUtil; import org.junit.Before; import org.junit.Test; import edu.kit.ipd.descartes.adaptation.AbstractTest; +import edu.kit.ipd.descartes.adaptation.model.util.DmmModelChanger; import edu.kit.ipd.descartes.core.AdaptableEntity; import edu.kit.ipd.descartes.mm.containerrepository.ContainerTemplate; import edu.kit.ipd.descartes.mm.containerrepository.ContainerrepositoryFactory; @@ -24,6 +28,7 @@ import edu.kit.ipd.descartes.mm.resourcelandscape.RuntimeEnvironment; public class DmmModelActionHelperTest extends AbstractTest { + private static final String CANDIDATE = "Candidate"; AdaptableEntity aEntity = null; AdaptableEntity aEntity2 = null; RuntimeEnvironment vm = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); @@ -63,5 +68,36 @@ public class DmmModelActionHelperTest extends AbstractTest { foundClass = DmmModelActionHelper.findParentConfiguredInstance(aEntity2); assertEquals(ContainerrepositoryPackage.CONTAINER_TEMPLATE, foundClass.eClass().getClassifierID()); } + + @Test + public void testFilterEntities() { + RuntimeEnvironment re1 = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); + re1.setName(CANDIDATE + DmmModelChanger.COPY_MARK); + re1.setId(EcoreUtil.generateUUID()); + re1.getConfigSpec().add(aSpec); + + RuntimeEnvironment re2 = EcoreUtil.copy(re1); + re2.setId(EcoreUtil.generateUUID()); + RuntimeEnvironment re3 = EcoreUtil.copy(re1); + re3.setId(EcoreUtil.generateUUID()); + re3.setTemplate(template); + + EList<RuntimeEnvironment> entityList = new BasicEList<RuntimeEnvironment>(); + entityList.add(re1); + entityList.add(re2); + entityList.add(re3); + + RuntimeEnvironment comparator = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); + comparator.setName(CANDIDATE); + comparator.setId(EcoreUtil.generateUUID()); + comparator.getConfigSpec().add(aSpec); + comparator.setTemplate(template); + + RuntimeEnvironment result = DmmModelActionHelper.filterCandidates(entityList, comparator); + assertEquals(re3, result); + + entityList.remove(re3); + assertEquals(null, DmmModelActionHelper.filterCandidates(entityList, comparator)); + } } -- GitLab