/* * JBoss, Home of Professional Open Source. * Copyright 2008, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.profileservice.test; import java.net.URL; import java.util.Collection; import java.util.List; import java.util.Set; import javax.rmi.PortableRemoteObject; import junit.framework.Test; import org.jboss.deployers.spi.management.ManagementView; import org.jboss.managed.api.ComponentType; import org.jboss.managed.api.ManagedComponent; import org.jboss.managed.api.ManagedOperation; import org.jboss.managed.api.ManagedProperty; import org.jboss.managed.api.RunState; import org.jboss.metatype.api.values.CompositeValue; import org.jboss.metatype.api.values.MetaValue; import org.jboss.metatype.api.values.SimpleValue; import org.jboss.metatype.api.values.TableValue; import org.jboss.test.ejb.proxy.beans.StatefulCounter; import org.jboss.test.ejb.proxy.beans.StatefulCounterHome; import org.jboss.test.ejb.proxy.beans.HandleRetrievalStatefulSessionInterceptor.RetrievalMethodHandle; import org.jboss.test.ejb.proxy.test.ProxyLogicTestCase; /** * Tests JMX components exposed outside the MC * * @author Jason T. Greene */ public class JMXMappingUnitTestCase extends AbstractProfileServiceTest { public JMXMappingUnitTestCase(String name) { super(name); } public static Test suite() throws Exception { return getDeploySetup(JMXMappingUnitTestCase.class, "ejbproxy-test.jar"); } public void testEjbMetrics() throws Exception { getLog().debug(getName()); Object ref = getInitialContext().lookup("ejb/StatefulCounterEjb"); StatefulCounterHome home = (StatefulCounterHome) PortableRemoteObject.narrow(ref, StatefulCounterHome.class); StatefulCounter counter = home.create(); assertEquals(1, counter.count()); assertEquals(2, counter.count()); ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("EJB", "StatefulSession")); for (ManagedComponent comp : comps) { System.out.println(comp.getName()); ManagedProperty property = comp.getProperty("DetypedInvocationStatistics"); if ("jboss.j2ee:jndiName=ejb/StatefulCounterEjb,service=EJB".equals(comp.getName())) { MetaValue value = property.getValue(); System.out.println("Value = " + value); CompositeValue methodStatsMap = (CompositeValue)((CompositeValue) value).get("methodStats"); CompositeValue methodStats = (CompositeValue)methodStatsMap.get("count"); assertEquals(2L, ((SimpleValue)methodStats.get("count")).getValue()); return; } } fail("Could not find EJB!"); } public void testWebApplicationManager() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebApplicationManager")); for (ManagedComponent comp : comps) { if ("jboss.web:host=localhost,path=/jmx-console,type=Manager".equals(comp.getName())) { assertEquals(16, ((SimpleValue)comp.getProperty("sessionIdLength").getValue()).getValue()); assertEquals("MD5", ((SimpleValue)comp.getProperty("algorithm").getValue()).getValue()); return; } } fail("Could not find jmx-console Manager"); } public void testServlet() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "Servlet")); for (ManagedComponent comp : comps) { if ("jboss.web:J2EEApplication=none,J2EEServer=none,WebModule=//localhost/jmx-console,j2eeType=Servlet,name=HtmlAdaptor".equals(comp.getName())) { assertEquals("jboss.web", ((SimpleValue)comp.getProperty("engineName").getValue()).getValue()); // Statistic int requests = (Integer)((SimpleValue)comp.getProperty("requestCount").getValue()).getValue(); new URL("http://" + getServerHost() + ":8080/jmx-console/HtmlAdaptor").openStream().close(); assertEquals(requests + 1, ((SimpleValue)comp.getProperty("requestCount").getValue()).getValue()); return; } } fail("Could not find HtmlAdapor servlet"); } public void testWebApplication() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebApplication")); for (ManagedComponent comp : comps) { if ("jboss.web:J2EEApplication=none,J2EEServer=none,j2eeType=WebModule,name=//localhost/jmx-console".equals(comp.getName())) { assertEquals("jboss", ((SimpleValue)comp.getProperty("server").getValue()).getValue()); ((SimpleValue)comp.getProperty("docBase").getValue()).getValue().toString().endsWith("jmx-console.war/"); return; } } fail("Could not find jmx-console Web Application"); } public void testWebHost() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebHost")); for (ManagedComponent comp : comps) { if ("jboss.web:host=localhost,type=Host".equals(comp.getName())) { assertEquals("localhost", ((SimpleValue)comp.getProperty("name").getValue()).getValue()); return; } } fail("Could not find localhost Host"); } public void testConnector() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebRequestProcessor")); for (ManagedComponent comp : comps) { if (comp.getName().startsWith("jboss.web:name=http-")) { // Statistic int requests = (Integer)((SimpleValue)comp.getProperty("requestCount").getValue()).getValue(); new URL("http://" + getServerHost() + ":8080/").openStream().close(); assertEquals(requests + 1, ((SimpleValue)comp.getProperty("requestCount").getValue()).getValue()); return; } } fail("Could not find connector!"); } public void testContextMO() throws Exception { ManagementView mgtView = getManagementView(); mgtView.load(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("WAR", "Context")); for (ManagedComponent comp : comps) { if (comp.getDeployment().getName().endsWith("jmx-console.war/")) { assertEquals("/jmx-console", ((SimpleValue)comp.getProperty("contextRoot").getValue()).getValue()); return; } } fail("Could not find deployment context root!"); } public void testRunState() throws Exception { ManagementView mgtView = getManagementView(); Set<ManagedComponent> comps = mgtView.getComponentsForType(new ComponentType("MBean", "WebHost")); for (ManagedComponent comp : comps) { if ("jboss.web:host=localhost,type=Host".equals(comp.getName())) { assertEquals(RunState.RUNNING, comp.getRunState()); return; } } fail("Could not find localhost Host"); } }