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