Bug 343131 - [region] mBeans are still registered after framework stop
diff --git a/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/AbstractRegionSystemTest.java b/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/AbstractRegionSystemTest.java
index 34b47af..45e912f 100644
--- a/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/AbstractRegionSystemTest.java
+++ b/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/AbstractRegionSystemTest.java
@@ -79,6 +79,8 @@
@Override
protected void tearDown() throws Exception {
+ if ((regionBundle.getState() & Bundle.ACTIVE) == 0)
+ startRegionBundle();
for (Region region : digraph) {
if (!region.contains(0)) {
digraph.removeRegion(region);
diff --git a/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/RegionSystemTests.java b/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/RegionSystemTests.java
index 85a6036..7846818 100644
--- a/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/RegionSystemTests.java
+++ b/bundles/org.eclipse.equinox.region.tests/src/org/eclipse/equinox/region/tests/system/RegionSystemTests.java
@@ -10,7 +10,9 @@
*******************************************************************************/
package org.eclipse.equinox.region.tests.system;
+import java.lang.management.ManagementFactory;
import java.util.*;
+import javax.management.*;
import org.eclipse.equinox.region.*;
import org.osgi.framework.*;
import org.osgi.util.tracker.ServiceTracker;
@@ -265,4 +267,57 @@
cp2Tracker.close();
sc1Tracker.close();
}
+
+ private static final String REGION_DOMAIN_PROP = "org.eclipse.equinox.region.domain";
+
+ public void testMbeans() throws MalformedObjectNameException, BundleException, IntrospectionException, InstanceNotFoundException, ReflectionException, MBeanException, AttributeNotFoundException {
+ MBeanServer server = ManagementFactory.getPlatformMBeanServer();
+ ObjectName digraphName = new ObjectName(REGION_DOMAIN_PROP + ":type=RegionDigraph");
+ ObjectName regionNameAllQuery = new ObjectName(REGION_DOMAIN_PROP + ":type=Region,name=*");
+ Set<ObjectInstance> digraphs = server.queryMBeans(digraphName, null);
+ assertEquals("Expected only one instance of digraph", 1, digraphs.size());
+ Set<ObjectInstance> regions = server.queryMBeans(null, regionNameAllQuery);
+ assertEquals("Expected only one instance of region", 1, regions.size());
+
+ Region pp1Region = digraph.createRegion(PP1);
+ Bundle pp1Bundle = bundleInstaller.installBundle(PP1, pp1Region);
+ Region sp1Region = digraph.createRegion(SP1);
+ Bundle sp1Bundle = bundleInstaller.installBundle(SP1, sp1Region);
+
+ regions = server.queryMBeans(null, regionNameAllQuery);
+ assertEquals("Wrong number of regions", 3, regions.size());
+
+ Set<ObjectInstance> pp1Query = server.queryMBeans(null, new ObjectName(REGION_DOMAIN_PROP + ":type=Region,name=" + PP1));
+ assertEquals("Expected only one instance of: " + PP1, 1, pp1Query.size());
+ Set<ObjectInstance> sp1Query = server.queryMBeans(null, new ObjectName(REGION_DOMAIN_PROP + ":type=Region,name=" + SP1));
+ assertEquals("Expected only one instance of: " + SP1, 1, sp1Query.size());
+ ObjectName pp1Name = (ObjectName) server.invoke(digraphs.iterator().next().getObjectName(), "getRegion", new Object[] {PP1}, new String[] {String.class.getName()});
+ assertEquals(PP1 + " regions not equal.", pp1Query.iterator().next().getObjectName(), pp1Name);
+ ObjectName sp1Name = (ObjectName) server.invoke(digraphs.iterator().next().getObjectName(), "getRegion", new Object[] {SP1}, new String[] {String.class.getName()});
+ assertEquals(SP1 + " regions not equal.", sp1Query.iterator().next().getObjectName(), sp1Name);
+
+ // test non existing region
+ ObjectName shouldNotExistName = (ObjectName) server.invoke(digraphs.iterator().next().getObjectName(), "getRegion", new Object[] {"ShouldNotExist"}, new String[] {String.class.getName()});
+ assertNull("Should not exist", shouldNotExistName);
+
+ long[] bundleIds = (long[]) server.getAttribute(pp1Name, "BundleIds");
+ assertEquals("Wrong number of bundles", 1, bundleIds.length);
+ assertEquals("Wrong bundle", pp1Bundle.getBundleId(), bundleIds[0]);
+ String name = (String) server.getAttribute(pp1Name, "Name");
+ assertEquals("Wrong name", PP1, name);
+
+ bundleIds = (long[]) server.getAttribute(sp1Name, "BundleIds");
+ assertEquals("Wrong number of bundles", 1, bundleIds.length);
+ assertEquals("Wrong bundle", sp1Bundle.getBundleId(), bundleIds[0]);
+ name = (String) server.getAttribute(sp1Name, "Name");
+ assertEquals("Wrong name", SP1, name);
+
+ regionBundle.stop();
+
+ // Now make sure we have no mbeans
+ digraphs = server.queryMBeans(digraphName, null);
+ assertEquals("Wrong number of digraphs", 0, digraphs.size());
+ regions = server.queryMBeans(null, regionNameAllQuery);
+ assertEquals("Wrong number of regions", 0, regions.size());
+ }
}