View Javadoc

1   /*
2    * $Id: MBeansRegistrationTestCase.java 22535 2011-07-22 14:52:08Z justin.calleja $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.management.mbeans;
12  
13  import static org.junit.Assert.assertEquals;
14  import static org.junit.Assert.assertTrue;
15  
16  import java.util.ArrayList;
17  import java.util.Arrays;
18  import java.util.Collection;
19  import java.util.Iterator;
20  import java.util.List;
21  import java.util.Set;
22  
23  import javax.management.MBeanServer;
24  import javax.management.MalformedObjectNameException;
25  import javax.management.ObjectInstance;
26  
27  import org.junit.Test;
28  import org.junit.runners.Parameterized.Parameters;
29  import org.mule.module.management.agent.JmxAgent;
30  import org.mule.module.management.agent.JmxServerNotificationAgent;
31  import org.mule.module.management.mbean.ConnectorService;
32  import org.mule.module.management.mbean.EndpointService;
33  import org.mule.module.management.mbean.FlowConstructService;
34  import org.mule.module.management.mbean.FlowConstructStats;
35  import org.mule.module.management.mbean.ModelService;
36  import org.mule.module.management.mbean.MuleConfigurationService;
37  import org.mule.module.management.mbean.MuleService;
38  import org.mule.module.management.mbean.RouterStats;
39  import org.mule.module.management.mbean.ServiceService;
40  import org.mule.module.management.mbean.StatisticsService;
41  import org.mule.module.management.support.JmxSupport;
42  import org.mule.tck.AbstractServiceAndFlowTestCase;
43  
44  /**
45   * Verify that expected MBeans are registered based on the config.
46   */
47  public class MBeansRegistrationTestCase extends AbstractServiceAndFlowTestCase
48  {
49  
50      private MBeanServer mBeanServer;
51      private String domainName;
52      private JmxSupport jmxSupport;
53  
54      public MBeansRegistrationTestCase(ConfigVariant variant, String configResources)
55      {
56          super(variant, configResources);
57      }
58  
59      @Override
60      protected void doSetUp() throws Exception
61      {
62          super.doSetUp();
63          JmxAgent jmxAgent = (JmxAgent) muleContext.getRegistry().lookupAgent("jmx-agent");
64          jmxSupport = jmxAgent.getJmxSupportFactory().getJmxSupport();
65          domainName = jmxSupport.getDomainName(muleContext);
66          mBeanServer = jmxAgent.getMBeanServer();
67      }
68  
69      @Parameters
70      public static Collection<Object[]> parameters()
71      {
72          return Arrays.asList(new Object[][]{{ConfigVariant.SERVICE, "mbeans-test-service.xml"},
73              {ConfigVariant.FLOW, "mbeans-test-flow.xml"}});
74      }
75  
76      /**
77       * Verify that all expected MBeans are registered for a default config
78       */
79      @Test
80      public void testDefaultMBeansRegistration() throws Exception
81      {
82          List<String> mbeanClasses = getMBeanClasses();
83  
84          assertTrue(mbeanClasses.contains(JmxServerNotificationAgent.class.getName()
85                                           + "$BroadcastNotificationService"));
86          assertTrue(mbeanClasses.contains(JmxServerNotificationAgent.class.getName() + "$NotificationListener"));
87          assertTrue(mbeanClasses.contains(MuleService.class.getName()));
88          assertTrue(mbeanClasses.contains(MuleConfigurationService.class.getName()));
89          assertTrue(mbeanClasses.contains(StatisticsService.class.getName()));
90          assertTrue(mbeanClasses.contains(ModelService.class.getName()));
91  
92          // Only if registerMx4jAdapter="true"
93          assertTrue(mbeanClasses.contains(mx4j.tools.adaptor.http.HttpAdaptor.class.getName()));
94      }
95  
96      /**
97       * Verify that all expected MBeans are registered for connectors, services,
98       * routers, and endpoints.
99       */
100     @Test
101     public void testServiceMBeansRegistration() throws Exception
102     {
103         List<String> mbeanClasses = getMBeanClasses();
104 
105         assertTrue(mbeanClasses.contains(ConnectorService.class.getName()));
106         assertTrue(mbeanClasses.contains(ModelService.class.getName()));
107         
108         if(variant.equals(ConfigVariant.SERVICE))
109         {
110             assertTrue(mbeanClasses.contains(ServiceService.class.getName()));
111             assertTrue(mbeanClasses.contains(RouterStats.class.getName()));
112         }
113         else
114         {
115             assertTrue(mbeanClasses.contains(FlowConstructService.class.getName()));            
116             assertTrue(mbeanClasses.contains(FlowConstructStats.class.getName()));
117         }
118                
119         
120         assertTrue(mbeanClasses.contains(EndpointService.class.getName()));
121     }
122 
123     /**
124      * Verify that all MBeans were unregistered during disposal phase.
125      */
126     @Test
127     public void testMBeansUnregistration() throws Exception
128     {
129         muleContext.dispose();
130         assertEquals("No MBeans should be registered after disposal of MuleContext", 0,
131             getMBeanClasses().size());
132     }
133 
134     protected List<String> getMBeanClasses() throws MalformedObjectNameException
135     {
136         Set<ObjectInstance> mbeans = getMBeans();
137         Iterator it = mbeans.iterator();
138         List<String> mbeanClasses = new ArrayList<String>();
139         while (it.hasNext())
140         {
141             mbeanClasses.add(((ObjectInstance) it.next()).getClassName());
142         }
143         return mbeanClasses;
144     }
145 
146     protected Set<ObjectInstance> getMBeans() throws MalformedObjectNameException
147     {
148         return mBeanServer.queryMBeans(jmxSupport.getObjectName(domainName + ":*"), null);
149     }
150 
151 }