package de.cinovo.cloudconductor.server.test; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import de.cinovo.cloudconductor.api.lib.exceptions.CloudConductorException; import de.cinovo.cloudconductor.api.lib.manager.AgentHandler; import de.cinovo.cloudconductor.api.model.PackageState; import de.cinovo.cloudconductor.api.model.PackageStateChanges; import de.cinovo.cloudconductor.api.model.PackageVersion; import de.cinovo.cloudconductor.api.model.ServiceStates; import de.cinovo.cloudconductor.server.APITest; import de.taimos.daemon.spring.SpringDaemonTestRunner; @RunWith(SpringDaemonTestRunner.class) @SuppressWarnings("javadoc") public class AgentTest extends APITest { private static final String TEMPLATE = "dev"; private static final String HOST_A = "HOST_A"; private static final String HOST_B = "HOST_B"; private static final String HOST_C = "HOST_C"; @Test public void testPackagesBasic() throws CloudConductorException { AgentHandler agent = new AgentHandler(this.getCSApi()); { PackageStateChanges result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_C, this.getPartiallyInstalled()); Assert.assertEquals(4, result.getToInstall().size()); Assert.assertTrue(!result.getToErase().isEmpty()); Assert.assertTrue(!result.getToUpdate().isEmpty()); } } @Test public void testPackageMultiHost() throws CloudConductorException { AgentHandler agent = new AgentHandler(this.getCSApi()); { // block the second host on update PackageStateChanges result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_A, this.getPartiallyInstalled()); result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_B, this.getPartiallyInstalled()); Assert.assertTrue(result.getToInstall().isEmpty()); Assert.assertTrue(result.getToErase().isEmpty()); Assert.assertTrue(result.getToUpdate().isEmpty()); } { // finalize update on host a PackageStateChanges result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_A, this.getAllInstalled()); Assert.assertTrue(result.getToInstall().isEmpty()); Assert.assertTrue(result.getToUpdate().isEmpty()); Assert.assertTrue(result.getToErase().isEmpty()); agent.notifyServiceState(AgentTest.TEMPLATE, AgentTest.HOST_A, new ServiceStates(new ArrayList<String>())); } { // finally start update on host b PackageStateChanges result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_B, this.getPartiallyInstalled()); Assert.assertEquals(4, result.getToInstall().size()); Assert.assertTrue(!result.getToErase().isEmpty()); Assert.assertTrue(!result.getToUpdate().isEmpty()); } { // finalize update on b PackageStateChanges result = agent.notifyPackageState(AgentTest.TEMPLATE, AgentTest.HOST_B, this.getAllInstalled()); Assert.assertTrue(result.getToInstall().isEmpty()); Assert.assertTrue(result.getToUpdate().isEmpty()); Assert.assertTrue(result.getToErase().isEmpty()); } } private PackageState getAllInstalled() { List<PackageVersion> pkgs = new ArrayList<>(); pkgs.add(new PackageVersion("nginx", "1.5.3-1", null)); pkgs.add(new PackageVersion("postgresql92", "9.2.4-1PGDG.rhel6", null)); pkgs.add(new PackageVersion("postgresql92-libs", "9.2.4-1PGDG.rhel6", null)); pkgs.add(new PackageVersion("postgresql92-server", "9.2.4-1PGDG.rhel6", null)); pkgs.add(new PackageVersion("jdk", "1.7.0_45-fcs", null)); return new PackageState(pkgs); } private PackageState getPartiallyInstalled() { List<PackageVersion> pkgs = new ArrayList<>(); pkgs.add(new PackageVersion("nginx", "1.5.2-1", null)); pkgs.add(new PackageVersion("nodejs", "0.10.12-1", null)); return new PackageState(pkgs); } }