From 8ff450d5569b08ab96b3b96248f2bf9277f32445 Mon Sep 17 00:00:00 2001 From: Nikolaus Huber <nikolaus.huber@uni-wuerzburg.de> Date: Wed, 6 Mar 2013 16:46:17 +0000 Subject: [PATCH] git-svn-id: https://se1.informatik.uni-wuerzburg.de/usvn/svn/code/code/DMM/trunk@10639 9e42b895-fcda-4063-8a3b-11be15eb1bbd --- .../model/dmm/util/DmmModelChangerTest.java | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java diff --git a/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java new file mode 100644 index 00000000..9b9534e2 --- /dev/null +++ b/edu.kit.ipd.descartes.adaptation.test/src/edu/kit/ipd/descartes/adaptation/model/dmm/util/DmmModelChangerTest.java @@ -0,0 +1,194 @@ +package edu.kit.ipd.descartes.adaptation.model.dmm.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +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.exceptions.OperationNotPerformedException; +import edu.kit.ipd.descartes.adaptation.model.dmm.util.DmmModelChanger; +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; +import edu.kit.ipd.descartes.mm.resourcelandscape.Container; +import edu.kit.ipd.descartes.mm.resourcelandscape.ResourcelandscapeFactory; +import edu.kit.ipd.descartes.mm.resourcelandscape.RuntimeEnvironment; + +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; + + RuntimeEnvironment original = null; + NumberOfParallelProcessingUnits adaptableNumberOfCores = null; + ModelVariableConfigurationRange point = null; + ActiveResourceSpecification spec = null; + Container container = null; + ContainerTemplate template = null; + Container parent = null; + + @Before + public void setUp() throws Exception { + super.setUp(); + parent = ResourcelandscapeFactory.eINSTANCE.createComputingInfrastructure(); + container = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); + template = ContainerrepositoryFactory.eINSTANCE.createContainerTemplate(); + original = ResourcelandscapeFactory.eINSTANCE.createRuntimeEnvironment(); + adaptableNumberOfCores = ResourceconfigurationFactory.eINSTANCE.createNumberOfParallelProcessingUnits(); + point = AdaptationpointsFactory.eINSTANCE.createModelVariableConfigurationRange(); + spec = ResourceconfigurationFactory.eINSTANCE.createActiveResourceSpecification(); + ProcessingResourceSpecification procSpec = ResourceconfigurationFactory.eINSTANCE.createProcessingResourceSpecification(); + + 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); + original.setName(TEST_RUNTIME_ENV); + original.setTemplate(ContainerrepositoryFactory.eINSTANCE.createContainerTemplate()); + + point.setMinValue(MIN); + point.setMaxValue(MAX); + point.setAdaptableEntity(adaptableNumberOfCores); + point.setName(EMPTY); + + parent.setName(PARENT_CONTAINER); + parent.getContains().add(original); + + template.getTemplateConfig().add(spec); + template.setName(EMPTY); + container.setTemplate(template); + container.setName(EMPTY); + } + + @Test(expected=OperationNotPerformedException.class) + public void testScaleModelVariableException() throws OperationNotPerformedException { + assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT); + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE); + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE); + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE); + assertEquals(DEFAULT + 2, adaptableNumberOfCores.getNumber()); + } + + @Test + public void testScaleModelVariable() throws OperationNotPerformedException { + + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.NOT_SET); + assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT); + + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE); + assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT + 1); + + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.INCREASE); + assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT + 2); + + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE); + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE); + DmmModelChanger.scaleModelVariable(point, AdaptationDirection.DECREASE); + assertTrue(adaptableNumberOfCores.getNumber() == DEFAULT - 1); + + + } + + @Test + public void testScaleInRuntimeEnvironmentInstance() { + RuntimeEnvironment copy = DmmModelChanger.createNewRuntimeEnvironmentInstance(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)); + assertTrue(!original.getTemplate().getReferringContainers().contains(removedElement)); + } + + @Test + public void testScaleOutRuntimeEnvironmentInstance() { + original.setTemplate(template); + RuntimeEnvironment copy = DmmModelChanger.createNewRuntimeEnvironmentInstance(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(EcoreUtil.equals(original.getTemplate().getTemplateConfig(), copy.getConfigSpec())); + + assertTrue(original.getTemplate().getReferringContainers().contains(copy)); + + assertTrue(parent.getContains().size() == 2); + + 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.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(DEFAULT + 2, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleResourceProvidedByContainer(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.scaleResourceProvidedByContainer(container, point, AdaptationDirection.DECREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.DECREASE); + assertEquals(DEFAULT - 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + } + + @Test + public void testRemoveSpec() throws OperationNotPerformedException { + assertTrue(container.getConfigSpec().size() == 0); + DmmModelChanger.scaleResourceProvidedByContainer(container, point, AdaptationDirection.INCREASE); + assertEquals(template.getTemplateConfig().size(), container.getConfigSpec().size()); + assertEquals(DEFAULT + 1, getNrOfProcUnitsValue(container.getConfigSpec().get(0))); + DmmModelChanger.scaleResourceProvidedByContainer(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(); + } + +} -- GitLab