Skip to content
Snippets Groups Projects
Commit 1ffac143 authored by Nikolaus Huber's avatar Nikolaus Huber
Browse files

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
parent ba4303e2
No related branches found
No related tags found
No related merge requests found
......@@ -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();
}
}
......@@ -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));
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment