/* * Jopr Management Platform * Copyright (C) 2005-2008 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License, version 2, as * published by the Free Software Foundation, and/or the GNU Lesser * General Public License, version 2.1, also as published by the Free * Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License and the GNU Lesser General Public License * for more details. * * You should have received a copy of the GNU General Public License * and the GNU Lesser General Public License along with this program; * if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.rhq.plugins.jbossas.test; import java.io.File; import java.io.PrintWriter; import java.util.HashSet; import java.util.List; import java.util.Set; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.testng.annotations.AfterSuite; import org.testng.annotations.BeforeSuite; import org.testng.annotations.Test; import org.rhq.core.clientapi.agent.discovery.DiscoveryAgentService; import org.rhq.core.clientapi.server.configuration.ConfigurationServerService; import org.rhq.core.clientapi.server.configuration.ConfigurationUpdateResponse; import org.rhq.core.clientapi.server.discovery.InventoryReport; import org.rhq.core.domain.configuration.Configuration; import org.rhq.core.domain.resource.Resource; import org.rhq.core.pc.PluginContainer; import org.rhq.core.pc.PluginContainerConfiguration; import org.rhq.core.pc.plugin.FileSystemPluginFinder; import org.rhq.core.pc.plugin.PluginEnvironment; import org.rhq.core.pc.plugin.PluginManager; import org.rhq.core.pc.util.InventoryPrinter; /** * @author Greg Hinkle */ @Test(groups = "jboss.plugin") public class JBossASPluginTest { private Log log = LogFactory.getLog(JBossASPluginTest.class); private static final String SERVER_AS = "JBoss Application Server 4.0.5.GA"; private static final String PLUGIN_NAME = "JBossAS"; private MockConfigurationServerService configurationCallback = new MockConfigurationServerService(); @BeforeSuite public void start() { try { File pluginDir = new File("target/itest/plugins"); PluginContainerConfiguration pcConfig = new PluginContainerConfiguration(); pcConfig.setPluginFinder(new FileSystemPluginFinder(pluginDir)); pcConfig.setPluginDirectory(pluginDir); pcConfig.setInsideAgent(false); PluginContainer.getInstance().setConfiguration(pcConfig); PluginContainer.getInstance().initialize(); System.out.println("Plugin container started with the following plugins:"); Set<String> pluginNames = PluginContainer.getInstance().getPluginManager().getMetadataManager() .getPluginNames(); for (String pluginName : pluginNames) { System.out.println("\t* " + pluginName); } } catch (Exception e) { e.printStackTrace(); } } @AfterSuite public void stop() { PluginContainer.getInstance().shutdown(); } @Test public void testPluginLoad() { PluginManager pluginManager = PluginContainer.getInstance().getPluginManager(); PluginEnvironment pluginEnvironment = pluginManager.getPlugin(PLUGIN_NAME); assert (pluginEnvironment != null) : "Null environment, plugin not loaded"; assert (pluginEnvironment.getPluginName().equals(PLUGIN_NAME)); } @Test(dependsOnMethods = "testPluginLoad") public void testServerDiscovery() throws Exception { InventoryReport report = PluginContainer.getInstance().getInventoryManager().executeServerScanImmediately(); assert report != null; System.out.println("Discovery took: " + (report.getEndTime() - report.getStartTime()) + "ms"); Resource platform = PluginContainer.getInstance().getInventoryManager().getPlatform(); Set<Resource> servers = platform.getChildResources(); // assert servers.size() != 0; Don't require a running app server for testing at this point System.out.println("Found " + servers.size() + " servers"); } @Test(dependsOnMethods = "testServerDiscovery") public void testServiceDiscovery() throws Exception { try { InventoryReport report = PluginContainer.getInstance().getInventoryManager() .executeServiceScanImmediately(); Resource platform = PluginContainer.getInstance().getInventoryManager().getPlatform(); /*System.out.println("RUNTIME SERVERS: " + platform.getChildResources().size()); * for (Resource server : platform.getChildResources()) { System.out.println("Server: " + * server.toString()); System.out.println("Found with " + server.getChildResources().size() + " child * services");}*/ } catch (Exception e) { log.error("Failure to run discovery", e); throw e; } InventoryPrinter.outputInventory(new PrintWriter(System.out), false); } /*//@Test(dependsOnMethods = "testServiceDiscovery") * // Test disabled public void datasourceConfigurationRead() throws Exception { * * for (Resource datasource : findResources(PluginContainer.getInstance().getInventoryManager().getPlatform(), * "Datasource", new ArrayList<Resource>())) { //ResourceComponent serviceComponent // = * PluginContainer.getInstance().getInventoryManager().getResourceComponent(datasource); * * //Configuration config = ((ConfigurationFacet)serviceComponent).loadResourceConfiguration(); * System.out.println("printing datasource config for " + datasource); //if (config != null) // * ConfigurationPrinter.prettyPrintConfiguration(config); }}*/ /*// @TODO when we can run integration testing with the AS, the asserts on the next few tests should be uncommented * out * //@Test(dependsOnMethods = "testServiceDiscovery") public void dataSourceCreate() throws Exception { try { * PluginContainer pc = PluginContainer.getInstance(); ConfigurationAgentService configService = * pc.getConfigurationAgentService(); ResourceFactoryAgentService resourceFactoryAgentService = * pc.getResourceFactoryAgentService(); DiscoveryAgentService discoveryService = * PluginContainer.getInstance().getDiscoveryAgentService(); * * Resource platform = discoverPlatform(); // TODO now how to actually find the AS 4.x server Resource jonServer * = findServer("JON", platform); ResourceType dsType = * pc.getPluginManager().getMetadataManager().getType("Datasource", "JBossAS"); assert dsType != null : "Couldn't * find datasource type to test with."; * * Configuration config = new Configuration(); config.put(new PropertySimple("jndiName", "NewDS")); * * CreateResourceRequest request = new CreateResourceRequest(1, jonServer.getId(), "createdResource", * dsType.getName(), dsType.getPlugin(), config); * * resourceFactoryAgentService.createResource(request); * * Thread.sleep(3000); * * platform = discoverPlatform(); Resource newDs = findService("NewDS", SERVER_AS, platform); //assert newDs != * null : "Created service cannot be found"; * * Availability newDsAvailability = discoveryService.getAvailability(newDs); //assert * newDsAvailability.getAvailabilityType().equals(AvailabilityType.DOWN) : "Availability not set for newly created * service: " + newDsAvailability; * * Configuration newDsConfiguration = configService.loadResourceConfiguration(newDs.getId()); //assert * newDsConfiguration != null : "Null configuration found for newly created resource"; } catch (Exception e) { * e.printStackTrace(); } * * *}*/ /*//@Test(dependsOnMethods = "testDataSourceCreate") * //Test is disabled public void dataSourceUpdate() throws Exception { try { Resource platform = * discoverPlatform(); Resource jonDs = findService("RHQDS", SERVER_AS, platform); * * PluginContainer pc = PluginContainer.getInstance(); ConfigurationAgentService configService = * pc.getConfigurationAgentService(); * * Configuration configuration = configService.loadResourceConfiguration(jonDs.getId()); * * // Sanity check, to make sure jndi name is as we expect it //assert configuration != null : "Configuration for * JON DS was null"; //assert configuration.getSimple("jndiName").getStringValue().equals("RHQDS") : "Property * jndiName was incorrect"; * * // Change a value and update configuration = configuration.deepCopy(); configuration.put(new * PropertySimple("jndiName", "Test DS")); configurationCallback.reset(); * configService.updateResourceConfiguration(new ConfigurationUpdateRequest(0, configuration, jonDs.getId())); * Thread.sleep(2000); // this should not take longer than a couple of seconds //assert * configurationCallback.getLastResult() != null : "didn't get configuration update yet - do we have to wait * longer?"; //assert configurationCallback.getLastResult().getStatus() == ConfigurationUpdateStatus.SUCCESS; * * // Verify changes are in place configuration = configService.loadResourceConfiguration(jonDs.getId()); * * //assert configuration.getSimple("jndiName").getStringValue().equals("Test DS") : "Updated property jndiName was * incorrect"; * * // Rollback changes (find a better way of doing this) configuration.put(new PropertySimple("jndiName", * "RHQDS")); configService.updateResourceConfiguration(new ConfigurationUpdateRequest(0, configuration, * jonDs.getId())); } catch (Exception e) { e.printStackTrace(); } * *}*/ // Test is disabled /*public void dataSourceDelete() throws Exception * { try { PluginContainer pc = PluginContainer.getInstance(); ResourceFactoryAgentService * resourceFactoryAgentService = pc.getResourceFactoryAgentService(); * * Resource platform = discoverPlatform(); // Rediscover to pick up new resource Resource deleteMe = * findService("NewDS", SERVER_AS, platform); // assert deleteMe != null : "Created service cannot be * found"; * * // Delete the newly created resource DeleteResourceRequest deleteRequest = new DeleteResourceRequest(1, * deleteMe.getId()); resourceFactoryAgentService.deleteResource(deleteRequest); * * Thread.sleep(1000); * * platform = discoverPlatform(); // Rediscover to pick up deletion deleteMe = findService("NewDS", SERVER_AS, * platform); //assert deleteMe == null : "Created service was not deleted"; } catch (Exception e) { * e.printStackTrace(); }}*/ /* * Private helper methods. */ private Resource discoverPlatform() throws Exception { PluginContainer pc = PluginContainer.getInstance(); DiscoveryAgentService discovery = pc.getDiscoveryAgentService(); discovery.executeServerScanImmediately(); discovery.executeServiceScanImmediately(); Resource platform = discovery.getPlatform(); return platform; } private Resource findServer(String name, Resource platform) { Set<Resource> servers = platform.getChildResources(); for (Resource s : servers) { if (name.equals(s.getName())) { return s; } } return null; } private Resource findService(String serviceName, String serverName, Resource platform) { Resource server = findServer(serverName, platform); if (server == null) { return null; } Set<Resource> services = server.getChildResources(); for (Resource s : services) { if (serviceName.equals(s.getName())) { return s; } } return null; } private List<Resource> findResources(Resource parent, String typeName, List<Resource> foundResources) { if (parent.getResourceType().getName().equals(typeName)) { foundResources.add(parent); } for (Resource resource : parent.getChildResources()) { for (Resource child : resource.getChildResources()) { findResources(child, typeName, foundResources); } } return foundResources; } /* * @Test(dependsOnMethods = "testServiceDiscovery") public void testDatabaseMeasurement() throws Exception { * Resource platform = PluginContainer.getInstance().getInventoryManager().getPlatform(); for (Resource server : * platform.getChildResources()) { List<Resource> services = new ArrayList<Resource>(server.getChildResources()); * Collections.sort(services); for (Resource service : services) { ResourceComponent serviceComponent * = PluginContainer.getInstance().getInventoryManager().getResourceComponent(service); if (serviceComponent * instanceof MeasurementFacet) { Set<MeasurementScheduleRequest> metricList = new * HashSet<MeasurementScheduleRequest>(); metricList.add(new MeasurementScheduleRequest(1, "numbackends", * 1000, true)); MeasurementReport report = new MeasurementReport(); ((MeasurementFacet) * serviceComponent).getValues(report, metricList); for (MeasurementData value : report.getNumericData()) * { System.out.println(value.getValue() + ":" + service.getName()); } } } }}*/ private Set<Resource> getDiscoveredServers() { Set<Resource> found = new HashSet<Resource>(); Resource platform = PluginContainer.getInstance().getInventoryManager().getPlatform(); for (Resource resource : platform.getChildResources()) { if (resource.getResourceType().getName().equals("Postgres Server")) { found.add(resource); } } return found; } private class MockConfigurationServerService implements ConfigurationServerService { private ConfigurationUpdateResponse lastResult; public void reset() { lastResult = null; } public ConfigurationUpdateResponse getLastResult() { return lastResult; } public void completeConfigurationUpdate(ConfigurationUpdateResponse response) { lastResult = response; } public void persistUpdatedResourceConfiguration(int resourceId, Configuration resourceConfiguration) { // TODO Auto-generated method stub } @Override public Configuration persistUpdatedPluginConfiguration(int resourceId, Configuration pluginConfiguration) { // TODO Auto-generated method stub return null; } } }