package org.rhq.test.arquillian.avail; import static org.mockito.Matchers.any; import static org.mockito.Mockito.when; 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.Deployment; import org.jboss.arquillian.container.test.api.TargetsContainer; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.arquillian.testng.Arquillian; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.rhq.core.clientapi.server.discovery.InventoryReport; import org.rhq.core.domain.resource.InventoryStatus; import org.rhq.core.pc.PluginContainer; import org.rhq.core.pc.inventory.ResourceContainer; import org.rhq.test.arquillian.AfterDiscovery; import org.rhq.test.arquillian.BeforeDiscovery; import org.rhq.test.arquillian.FakeServerInventory; import org.rhq.test.arquillian.MockingServerServices; import org.rhq.test.arquillian.ResourceComponentInstances; import org.rhq.test.arquillian.ResourceContainers; import org.rhq.test.arquillian.RunDiscovery; import org.rhq.test.arquillian.TestDiscoveryComponent; import org.rhq.test.arquillian.TestResourceComponent; import org.rhq.test.shrinkwrap.RhqAgentPluginArchive; public class AvailTest extends Arquillian { @Deployment(name = "availPlugin") @TargetsContainer("connected-pc") public static RhqAgentPluginArchive getTestPlugin() { return ShrinkWrap.create(RhqAgentPluginArchive.class, "avail-plugin-1.0.jar") .addClasses(TestDiscoveryComponent.class, TestResourceComponent.class) .setPluginDescriptor("avail-rhq-plugin.xml"); } @ArquillianResource private ContainerController pcController; @ArquillianResource private PluginContainer pluginContainer; @ArquillianResource public MockingServerServices serverServices; private FakeServerInventory fakeServerInventory; private FakeServerInventory.CompleteDiscoveryChecker completeDiscoveryChecker; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailParentServer1") private Set<ResourceContainer> parentContainers1; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailParentServer2") private Set<ResourceContainer> parentContainers2; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailChildService1") private Set<ResourceContainer> childContainers1; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailChildService2") private Set<ResourceContainer> childContainers2; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailGrandchildService1") private Set<ResourceContainer> grandchildContainers1; @ResourceContainers(plugin = "availPlugin", resourceType = "AvailGrandchildService2") private Set<ResourceContainer> grandchildContainers2; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailParentServer1") private Set<AvailResourceComponent> parentComponents1; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailParentServer2") private Set<AvailResourceComponent> parentComponents2; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailChildService1") private Set<AvailResourceComponent> childComponents1; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailChildService2") private Set<AvailResourceComponent> childComponents2; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailGrandchildService1") private Set<AvailResourceComponent> grandchildComponents1; @ResourceComponentInstances(plugin = "availPlugin", resourceType = "AvailGrandchildService2") private Set<AvailResourceComponent> grandchildComponents2; @BeforeDiscovery public void resetServerServices() throws Exception { serverServices.resetMocks(); fakeServerInventory = new FakeServerInventory(); completeDiscoveryChecker = fakeServerInventory.createAsyncDiscoveryCompletionChecker(5); //autoimport everything when(serverServices.getDiscoveryServerService().mergeInventoryReport(any(InventoryReport.class))).then( fakeServerInventory.mergeInventoryReport(InventoryStatus.COMMITTED)); when(serverServices.getDiscoveryServerService().getResourceSyncInfo(any(int.class))).then( fakeServerInventory.getResourceSyncInfo()); } @AfterDiscovery public void waitForDiscovery() throws Exception { completeDiscoveryChecker.waitForDiscoveryComplete(10000); } @Test @RunDiscovery public void testConfirmInitialInventory() throws Exception { Assert.assertNotNull(pluginContainer); Assert.assertTrue(pluginContainer.isStarted()); // make sure we have all the resource containers for all the resources Assert.assertEquals(parentContainers1.size(), 2, "missing parent1"); Assert.assertEquals(parentContainers2.size(), 2, "missing parent2"); Assert.assertEquals(childContainers1.size(), 4, "missing child1"); Assert.assertEquals(childContainers2.size(), 4, "missing child2"); Assert.assertEquals(grandchildContainers1.size(), 8, "missing grandchild1"); Assert.assertEquals(grandchildContainers2.size(), 8, "missing grandchild2"); // make sure we have all the resource components for all the resources Assert.assertEquals(parentComponents1.size(), 2, "missing parent1"); Assert.assertEquals(parentComponents2.size(), 2, "missing parent2"); Assert.assertEquals(childComponents1.size(), 4, "missing child1"); Assert.assertEquals(childComponents2.size(), 4, "missing child2"); Assert.assertEquals(grandchildComponents1.size(), 8, "missing grandchild1"); Assert.assertEquals(grandchildComponents2.size(), 8, "missing grandchild2"); } /* @Test(dependsOnMethods = "testConfirmInitialInventory") public void testSomethingElse() { } */ }