1   /*
2    * $Id: JmxSupportTestCase.java 11371 2008-03-15 03:12:09Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.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  package org.mule.management.support;
11  
12  import org.mule.api.context.MuleContextBuilder;
13  import org.mule.config.DefaultMuleConfiguration;
14  import org.mule.management.AbstractMuleJmxTestCase;
15  import org.mule.module.management.agent.JmxAgent;
16  import org.mule.module.management.mbean.StatisticsService;
17  import org.mule.module.management.support.JmxModernSupport;
18  
19  import java.util.Arrays;
20  import java.util.List;
21  
22  import javax.management.ObjectName;
23  
24  public class JmxSupportTestCase extends AbstractMuleJmxTestCase
25  {
26      private final String MANAGER_ID = "Test_Instance";
27      private final String TEST_DOMAIN = JmxModernSupport.DEFAULT_JMX_DOMAIN_PREFIX + "." + MANAGER_ID;
28  
29      //@Override
30      protected void configureMuleContext(MuleContextBuilder contextBuilder)
31      {
32          super.configureMuleContext(contextBuilder);
33  
34          DefaultMuleConfiguration config = new DefaultMuleConfiguration();
35          config.setId(MANAGER_ID);
36          contextBuilder.setMuleConfiguration(config);
37      }
38  
39      public void testClashingDomains() throws Exception
40      {
41          // pre-register the same domain to simulate a clashing domain
42          ObjectName name = ObjectName.getInstance(TEST_DOMAIN + ":name=TestDuplicates");
43          mBeanServer.registerMBean(new StatisticsService(), name);
44  
45          JmxAgent agent = new JmxAgent();
46          agent.setMuleContext(muleContext);
47          agent.initialise();
48          muleContext.getRegistry().registerAgent(agent);
49          muleContext.start();
50  
51          List domains = Arrays.asList(mBeanServer.getDomains());
52          assertTrue("Should have contained an original domain.", domains.contains(TEST_DOMAIN));
53          assertTrue("Should have contained a new domain.", domains.contains(TEST_DOMAIN + ".1"));
54      }
55  
56      public void testClashingSuffixedDomains() throws Exception
57      {
58  
59          // get original, pre-test number of domains
60          int numOriginalDomains = mBeanServer.getDomains().length;
61  
62          // pre-register the same domain to simulate a clashing domain
63          ObjectName name = ObjectName.getInstance(TEST_DOMAIN + ":name=TestDuplicates");
64          mBeanServer.registerMBean(new StatisticsService(), name);
65  
66          // add another domain with suffix already applied
67          name = ObjectName.getInstance(TEST_DOMAIN + ".1" + ":name=TestDuplicates");
68          mBeanServer.registerMBean(new StatisticsService(), name);
69  
70          assertEquals("Wrong number of domains created.",
71                       numOriginalDomains + 2, mBeanServer.getDomains().length);
72  
73          JmxAgent agent = new JmxAgent();
74          agent.setMuleContext(muleContext);
75          agent.initialise();
76          muleContext.getRegistry().registerAgent(agent);
77          muleContext.start();
78  
79          List domains = Arrays.asList(mBeanServer.getDomains());
80          // one extra domain created by Mule's clash resolution
81          assertEquals("Wrong number of domains created.",
82                       numOriginalDomains + 3, domains.size());
83  
84          assertTrue("Should have contained an original domain.", domains.contains(TEST_DOMAIN));
85          assertTrue("Should have contained an original suffixed domain.", domains.contains(TEST_DOMAIN + ".1"));
86          assertTrue("Should have contained a new domain.", domains.contains(TEST_DOMAIN + ".2"));
87      }
88      
89      protected void doTearDown() throws Exception
90      {
91          // This MBean was registered manually so needs to be unregistered manually in tearDown()
92          unregisterMBeansByMask(TEST_DOMAIN + ":name=TestDuplicates");
93          super.doTearDown();
94      }
95  }