/** * Copyright (C) 2008 Progress Software, Inc. All rights reserved. * http://fusesource.com * * The software in this package is published under the terms of the AGPL license * a copy of which has been included with this distribution in the license.txt file. */ package org.fusesource.cloudmix.common.controller; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; import junit.framework.TestCase; import org.easymock.EasyMock; import org.fusesource.cloudmix.common.GridController; import org.fusesource.cloudmix.common.dto.AgentDetails; import org.fusesource.cloudmix.common.dto.FeatureDetails; public class FeatureControllerTest extends TestCase { public void testSelectAgentForDeploymentAgentEmtpy() { GridController cl = EasyMock.createMock(GridController.class); FeatureDetails fd = new FeatureDetails("f1"); FeatureController fc = new FeatureController(cl, fd); assertNull(fc.selectAgentForDeployment("testing", Collections.<AgentController>emptyList())); } public void testSelectAgentForDeployment() { GridController cl = EasyMock.createMock(GridController.class); AgentDetails ad1 = new AgentDetails(); // ad1.setProfile("default"); not needed, this is the default ad1.setHostname("host1"); AgentController a1 = new AgentController(cl, ad1); AgentDetails ad2 = new AgentDetails(); ad2.setProfile("production"); ad2.setHostname("host1"); AgentController a2 = new AgentController(cl, ad2); AgentDetails ad3 = new AgentDetails(); ad3.setProfile("default"); ad3.setHostname("host2"); AgentController a3 = new AgentController(cl, ad3); FeatureDetails fd = new FeatureDetails("f1"); FeatureController fc = new FeatureController(cl, fd); List<AgentController> agents = Arrays.asList(a1, a2, a3); assertSame(a1, fc.selectAgentForDeployment("default", agents)); assertSame(a2, fc.selectAgentForDeployment("production", agents)); fc.getDetails().setPreferredMachines(new HashSet<String>(Arrays.asList("host2"))); assertSame(a3, fc.selectAgentForDeployment("default", agents)); fc.getDetails().setPreferredMachines(new HashSet<String>(Arrays.asList("host3"))); assertSame(a1, fc.selectAgentForDeployment("default", agents)); fc.getDetails().setPreferredMachines(null); a1.getFeatures().add("f99"); assertSame(a3, fc.selectAgentForDeployment("default", agents)); } public void testValidatePackageType() { String[] warType = {"war"}; String[] osgiType = {"osgi"}; String[] mixedType = {"osgi", "ear"}; String[] superMixedType = {"osgi", "ear", "tar"}; GridController cl = EasyMock.createMock(GridController.class); AgentDetails ad1 = new AgentDetails(); ad1.setSupportPackageTypes(superMixedType); AgentController a1 = new AgentController(cl, ad1); AgentDetails ad2 = new AgentDetails(); ad2.setSupportPackageTypes(warType); AgentController a2 = new AgentController(cl, ad2); AgentDetails ad3 = new AgentDetails(); ad3.setSupportPackageTypes(osgiType); AgentController a3 = new AgentController(cl, ad3); FeatureDetails fd = new FeatureDetails("f1"); FeatureController fc = new FeatureController(cl, fd); List<AgentController> agents = Arrays.asList(a1, a2, a3); // Normal behaviour assertSame(null, fc.selectAgentForDeployment("production", agents)); assertSame(a1, fc.selectAgentForDeployment("default", agents)); // Now make sure we stop using a1 when packages aren't compatible fd.setPackageTypes(warType); assertSame(a2, fc.selectAgentForDeployment("default", agents)); fd.setPackageTypes(mixedType); assertSame(a1, fc.selectAgentForDeployment("default", agents)); } public void testValidateContainerType() { GridController cl = EasyMock.createMock(GridController.class); AgentDetails ad1 = new AgentDetails(); ad1.setContainerType("mop"); AgentController a1 = new AgentController(cl, ad1); AgentDetails ad2 = new AgentDetails(); ad2.setContainerType("smx4"); AgentController a2 = new AgentController(cl, ad2); AgentDetails ad3 = new AgentDetails(); AgentController a3 = new AgentController(cl, ad3); FeatureDetails fd = new FeatureDetails("f1"); fd.validContainerType("mop").maximumInstances("3"); FeatureController fc = new FeatureController(cl, fd); List<AgentController> agents = Arrays.asList(a1, a2, a3); // Normal behaviour assertSame(null, fc.selectAgentForDeployment("production", agents)); assertSame(a1, fc.selectAgentForDeployment("default", agents)); } public void testResourceAPI() { FeatureDetails fd = new FeatureDetails("f1"); fd.setResource("http://localhost/123"); FeatureController fc = new FeatureController(null, fd); assertEquals("http://localhost/123", fc.getResource()); } public void testPreferredMachinesAPI() { FeatureDetails fd = new FeatureDetails("f1"); Set<String> pm = new HashSet<String>(Arrays.asList("1", "2")); fd.setPreferredMachines(pm); FeatureController fc = new FeatureController(null, fd); assertEquals(pm, fc.getPreferredMachines()); } }