package org.inria.myriads.snoozenode.groupmanager.virtualclustermanager; import java.util.ArrayList; import java.util.HashMap; import junit.framework.TestCase; import org.easymock.EasyMock; import org.inria.myriads.snoozecommon.communication.groupmanager.GroupManagerDescription; import org.inria.myriads.snoozecommon.communication.localcontroller.LocalControllerDescription; import org.inria.myriads.snoozecommon.communication.virtualcluster.VirtualMachineMetaData; import org.inria.myriads.snoozecommon.communication.virtualcluster.status.VirtualMachineErrorCode; import org.inria.myriads.snoozecommon.communication.virtualcluster.status.VirtualMachineStatus; import org.inria.myriads.snoozecommon.globals.Globals; import org.inria.myriads.snoozenode.configurator.api.NodeConfiguration; import org.inria.myriads.snoozenode.configurator.scheduler.GroupLeaderSchedulerSettings; import org.inria.myriads.snoozenode.database.api.GroupLeaderRepository; import org.inria.myriads.snoozenode.groupmanager.estimator.ResourceDemandEstimator; import org.inria.myriads.snoozenode.groupmanager.leaderpolicies.enums.Dispatching; import static org.easymock.EasyMock.expect; import static org.easymock.EasyMock.replay; /** * * Test virtual cluster manager. * * @author msimonin * */ public class TestVirtualClusterManager extends TestCase { /** Virtual cluster manager (under test). */ private VirtualClusterManager virtualClusterManager_; /** * Setup method. */ public void setUp() { GroupLeaderRepository repository = EasyMock.createMock(GroupLeaderRepository.class); NodeConfiguration nodeConfiguration = EasyMock.createMock(NodeConfiguration.class); ResourceDemandEstimator estimator = EasyMock.createMock(ResourceDemandEstimator.class); GroupLeaderSchedulerSettings groupLeaderScheduler = new GroupLeaderSchedulerSettings(); groupLeaderScheduler.setDispatchingPolicy(Dispatching.FirstFit); //gl -> gm1, gm2, gm3 //Map<String, GroupManagerDescription> groupManagers = new HashMap<String, GroupManagerDescription>(); ArrayList<GroupManagerDescription> groupManagers = new ArrayList<GroupManagerDescription>(); GroupManagerDescription gm1 = new GroupManagerDescription(); GroupManagerDescription gm2 = new GroupManagerDescription(); GroupManagerDescription gm3 = new GroupManagerDescription(); gm1.setId("gm1"); gm2.setId("gm2"); gm3.setId("gm3"); groupManagers.add(gm1); groupManagers.add(gm2); groupManagers.add(gm3); // gm1 -> lc1 , lc2 HashMap<String, LocalControllerDescription> lcgm1 = new HashMap<String, LocalControllerDescription>(); LocalControllerDescription lc1 = new LocalControllerDescription(); lc1.setId("lc1"); LocalControllerDescription lc2 = new LocalControllerDescription(); lc2.setId("lc2"); lcgm1.put("lc1", lc1); lcgm1.put("lc2", lc2); gm1.setLocalControllers(lcgm1); // gm2 -> lc3 HashMap<String, LocalControllerDescription> lcgm2 = new HashMap<String, LocalControllerDescription>(); LocalControllerDescription lc3 = new LocalControllerDescription(); lc3.setId("lc3"); lcgm2.put("lc3", lc3); gm2.setLocalControllers(lcgm2); // gm3 -> no lcs // -- expect(repository.getGroupManagerDescriptions(0)).andReturn(groupManagers); expect(nodeConfiguration.getGroupLeaderScheduler()).andReturn(groupLeaderScheduler).anyTimes(); replay(repository); replay(nodeConfiguration); replay(estimator); virtualClusterManager_ = new VirtualClusterManager(nodeConfiguration, repository, estimator); } /** * Test with a right gm set. * should position the gm only */ public void testSetVirtualMachineLocationGMset() { VirtualMachineMetaData vm = new VirtualMachineMetaData(); virtualClusterManager_.setVirtualMachineLocation(vm, "gm1"); assertEquals("gm1", vm.getVirtualMachineLocation().getGroupManagerId()); assertEquals(Globals.DEFAULT_INITIALIZATION, vm.getVirtualMachineLocation().getLocalControllerId()); } /** * Test with a wrong gm set. * should position the gm to default and set error code. */ public void testSetVirtualMachineLocationWrongGMset() { VirtualMachineMetaData vm = new VirtualMachineMetaData(); virtualClusterManager_.setVirtualMachineLocation(vm, "gm42"); assertEquals(Globals.DEFAULT_INITIALIZATION, vm.getVirtualMachineLocation().getGroupManagerId()); assertEquals(Globals.DEFAULT_INITIALIZATION, vm.getVirtualMachineLocation().getLocalControllerId()); assertEquals(VirtualMachineStatus.ERROR, vm.getStatus()); assertEquals(VirtualMachineErrorCode.INVALID_HOST_ID, vm.getErrorCode()); } /** * Test with a lc set. * should position the gm & the lc */ public void testSetVirtualMachineLocationLCset() { VirtualMachineMetaData vm = new VirtualMachineMetaData(); virtualClusterManager_.setVirtualMachineLocation(vm, "lc1"); assertEquals("gm1", vm.getVirtualMachineLocation().getGroupManagerId()); assertEquals("lc1", vm.getVirtualMachineLocation().getLocalControllerId()); } /** * Test with a wrong lc set. * should position the gm & the lc to default and error code to invalid_host_id */ public void testSetVirtualMachineLocationWrongLCset() { VirtualMachineMetaData vm = new VirtualMachineMetaData(); virtualClusterManager_.setVirtualMachineLocation(vm, "lc42"); assertEquals(Globals.DEFAULT_INITIALIZATION, vm.getVirtualMachineLocation().getGroupManagerId()); assertEquals(Globals.DEFAULT_INITIALIZATION, vm.getVirtualMachineLocation().getLocalControllerId()); assertEquals(VirtualMachineStatus.ERROR, vm.getStatus()); assertEquals(VirtualMachineErrorCode.INVALID_HOST_ID, vm.getErrorCode()); } }