package org.rhq.test.arquillian;
import java.util.Set;
import org.testng.Assert;
import org.testng.annotations.Test;
import org.jboss.arquillian.container.test.api.ContainerController;
import org.jboss.arquillian.container.test.api.Deployer;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.test.api.ArquillianResource;
import org.jboss.arquillian.testng.Arquillian;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.resolver.api.maven.Maven;
import org.jboss.shrinkwrap.resolver.api.maven.ScopeType;
import org.jboss.shrinkwrap.resolver.api.maven.strategy.AcceptScopesStrategy;
import org.rhq.core.domain.resource.Resource;
import org.rhq.core.domain.resource.ResourceCategory;
import org.rhq.core.domain.resource.ResourceType;
import org.rhq.core.pc.PluginContainer;
import org.rhq.core.pc.inventory.ResourceContainer;
import org.rhq.test.shrinkwrap.RhqAgentPluginArchive;
/**
* @author Lukas Krejci
*/
@RunDiscovery
public class RhqAgentPluginContainerTest extends Arquillian {
@Deployment(name = "simplePlugin")
public static RhqAgentPluginArchive getTestPlugin() {
return ShrinkWrap.create(RhqAgentPluginArchive.class, "test-plugin-1.0.0.jar")
.addClasses(TestDiscoveryComponent.class, TestResourceComponent.class)
.setPluginDescriptor("test-rhq-plugin.xml");
}
@Deployment(name = "dependentPlugin")
public static RhqAgentPluginArchive getDependentTestPlugin() {
return ShrinkWrap
.create(RhqAgentPluginArchive.class, "test-dependent-plugin-1.0.0.jar")
.addClasses(TestDiscoveryComponent.class, TestResourceComponent.class)
.setPluginDescriptor("test-dependent-rhq-plugin.xml")
.withRequiredPluginsFrom(
Maven.resolver().loadPomFromFile("pom.xml")
.importRuntimeAndTestDependencies(new AcceptScopesStrategy(ScopeType.TEST)).as(JavaArchive.class));
}
@Deployment(name = "manuallyDeployed", managed = false)
public static RhqAgentPluginArchive getManualPlugin() {
return ShrinkWrap.create(RhqAgentPluginArchive.class, "test-manual-plugin-1.0.0.jar")
.addClasses(TestDiscoveryComponent.class, TestResourceComponent.class)
.setPluginDescriptor("test-manual-rhq-plugin.xml");
}
@ArquillianResource
private PluginContainer pluginContainer;
@DiscoveredResources(plugin = "testPlugin", resourceType = "TestServer")
private Set<Resource> testResources;
@DiscoveredResources(plugin = "testDependentPlugin", resourceType = "TestServer")
private Set<Resource> testDependentResources;
@ResourceComponentInstances(plugin = "testDependentPlugin", resourceType = "TestServer")
private Set<TestResourceComponent> dependentComponents;
@ResourceContainers(plugin = "testDependentPlugin", resourceType = "TestServer")
private Set<ResourceContainer> dependentResourceContainers;
@ArquillianResource
private ContainerController pcController;
@ArquillianResource
private Deployer pluginDeployer;
@Test
public void testEnricherSetsPluginContainerInstance() {
Assert.assertNotNull(pluginContainer);
}
@Test(dependsOnMethods = "testEnricherSetsPluginContainerInstance")
public void testPluginContainerStartedInTest() {
Assert.assertTrue(pluginContainer.isStarted());
}
@Test(dependsOnMethods = "testEnricherSetsPluginContainerInstance")
public void testPluginDeployed() {
Assert.assertEquals(testResources.size(), 1, "There should be one resource with the test type");
}
@Test
public void testRequiredPluginsFoundAndDeployed() {
Assert.assertEquals(testDependentResources.size(), 1,
"The dependent plugin should have been loaded and its single resource discovered.");
}
@Test
public void testResourceComponentInstancesAssigned() {
Assert.assertEquals(dependentComponents.size(), 1, "There should be 1 resource component available");
}
@Test
public void testResourceContainersAssigned() {
Assert.assertEquals(dependentResourceContainers.size(), 1, "There should be one resource container available");
}
@Test
public void manualDeployment() {
pluginDeployer.deploy("manuallyDeployed");
pluginContainer.getInventoryManager().executeServerScanImmediately();
ResourceType expectedResourceType = new ResourceType("TestServer", "testManualPlugin", ResourceCategory.SERVER,
null);
Set<Resource> resources = pluginContainer.getInventoryManager().getResourcesWithType(expectedResourceType);
//make the deployment look as original again so that other tests still work
pluginDeployer.undeploy("manuallyDeployed");
Assert.assertEquals(resources.size(), 1,
"There should be a newly discovered resource of a manually deployed plugin");
//now try again, we should no longer see the resource
pluginContainer.getInventoryManager().executeServerScanImmediately();
resources = pluginContainer.getInventoryManager().getResourcesWithType(expectedResourceType);
Assert.assertEquals(resources.size(), 0,
"There should no longer be any resource from the manually deployed plugin after undeployment.");
}
}