1
2
3
4
5
6
7
8
9
10
11 package org.mule.management;
12
13 import static org.junit.Assert.assertEquals;
14 import static org.junit.Assert.assertTrue;
15
16 import org.mule.tck.AbstractServiceAndFlowTestCase;
17
18 import java.util.ArrayList;
19 import java.util.Arrays;
20 import java.util.Collection;
21 import java.util.List;
22 import java.util.Set;
23
24 import javax.management.MBeanServer;
25 import javax.management.MBeanServerFactory;
26 import javax.management.ObjectInstance;
27 import javax.management.ObjectName;
28
29 import org.junit.Test;
30 import org.junit.runners.Parameterized.Parameters;
31
32 public class JmxDuplicateEndpointNamesTestCase extends AbstractServiceAndFlowTestCase
33 {
34
35 private List<ObjectInstance> endpointMBeans = new ArrayList<ObjectInstance>();
36
37 public JmxDuplicateEndpointNamesTestCase(ConfigVariant variant, String configResources)
38 {
39 super(variant, configResources);
40 }
41
42 @Parameters
43 public static Collection<Object[]> parameters()
44 {
45 return Arrays.asList(new Object[][]{
46 {ConfigVariant.SERVICE, "duplicate-endpoint-addesses-service.xml"},
47 {ConfigVariant.FLOW, "duplicate-endpoint-addesses-flow.xml"}
48 });
49 }
50
51 @Test
52 public void testDuplicateNames()
53 {
54 List<?> mBeanServers = MBeanServerFactory.findMBeanServer(null);
55 assertTrue("no local MBean server found", mBeanServers.size() > 0);
56
57 inspectMBeanServers(mBeanServers);
58 assertEquals(2, endpointMBeans.size());
59 }
60
61 private void inspectMBeanServers(List<?> mBeanServers)
62 {
63 for (Object o : mBeanServers)
64 {
65 MBeanServer server = (MBeanServer) o;
66
67 Set<?> mBeans = server.queryMBeans(null, null);
68 assertTrue("no registered MBeans found", mBeans.size() > 0);
69
70 inspectMBeans(mBeans);
71 }
72 }
73
74 private void inspectMBeans(Set<?> mBeans)
75 {
76 for (Object o : mBeans)
77 {
78 ObjectInstance instance = (ObjectInstance) o;
79 if (objectNameMatches(instance))
80 {
81 endpointMBeans.add(instance);
82 }
83 }
84 }
85
86 private boolean objectNameMatches(ObjectInstance instance)
87 {
88 ObjectName name = instance.getObjectName();
89 return name.getCanonicalName().contains("vmInbound");
90 }
91
92 }
93
94