1
2
3
4
5
6
7
8
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
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
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
93 assertTrue(mbeanClasses.contains(mx4j.tools.adaptor.http.HttpAdaptor.class.getName()));
94 }
95
96
97
98
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
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 }