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