Fix for bug 355381 - Add subproject for tests to gemini management.
diff --git a/org.eclipse.gemini.mgmt.tests/.classpath b/org.eclipse.gemini.mgmt.tests/.classpath
new file mode 100644
index 0000000..9aa40d0
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry excluding="**/.svn/*" kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.gemini.mgmt.tests/.project b/org.eclipse.gemini.mgmt.tests/.project
new file mode 100644
index 0000000..e4ddbc0
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<projectDescription>

+	<name>org.eclipse.gemini.mgmt.tests</name>

+	<comment></comment>

+	<projects>

+	</projects>

+	<buildSpec>

+		<buildCommand>

+			<name>org.eclipse.jdt.core.javabuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.ManifestBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+		<buildCommand>

+			<name>org.eclipse.pde.SchemaBuilder</name>

+			<arguments>

+			</arguments>

+		</buildCommand>

+	</buildSpec>

+	<natures>

+		<nature>org.eclipse.pde.PluginNature</nature>

+		<nature>org.eclipse.jdt.core.javanature</nature>

+	</natures>

+</projectDescription>

diff --git a/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.jdt.core.prefs b/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..9055ad4
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Wed Jul 13 17:17:27 EEST 2011

+eclipse.preferences.version=1

+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled

+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6

+org.eclipse.jdt.core.compiler.compliance=1.6

+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error

+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error

+org.eclipse.jdt.core.compiler.source=1.6

diff --git a/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.pde.core.prefs b/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000..fe0811d
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,4 @@
+#Wed Jul 13 17:17:27 EEST 2011

+eclipse.preferences.version=1

+pluginProject.extensions=false

+resolve.requirebundle=false

diff --git a/org.eclipse.gemini.mgmt.tests/META-INF/MANIFEST.MF b/org.eclipse.gemini.mgmt.tests/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..83e14cf
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/META-INF/MANIFEST.MF
@@ -0,0 +1,11 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Gemini Management Tests
+Bundle-SymbolicName: org.eclipse.gemini.mgmt.tests
+Bundle-Version: 1.0.0.qualifier
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Import-Package: javax.management,
+ javax.management.remote,
+ org.osgi.framework;version="1.3.0"
+Fragment-Host: org.eclipse.gemini.mgmt
+Require-Bundle: org.junit4
diff --git a/org.eclipse.gemini.mgmt.tests/build.properties b/org.eclipse.gemini.mgmt.tests/build.properties
new file mode 100644
index 0000000..cf6aae6
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/build.properties
@@ -0,0 +1,5 @@
+source.. = src/

+output.. = bin/

+bin.includes = META-INF/,\

+               .

+jars.extra.classpath=platform:/plugin/org.eclipse.gemini.mgmt/osgi.enterprise.jar
\ No newline at end of file
diff --git a/org.eclipse.gemini.mgmt.tests/pom.xml b/org.eclipse.gemini.mgmt.tests/pom.xml
new file mode 100644
index 0000000..37d2d33
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/pom.xml
@@ -0,0 +1,54 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<parent>
+		<groupId>org.eclipse.gemini.mgmt</groupId>
+		<artifactId>org.eclipse.gemini.mgmt_parent</artifactId>
+		<version>1.0.0-SNAPSHOT</version>
+		<relativePath>../gemini.mgmt.releng/pom.xml</relativePath>
+	</parent>
+
+	<artifactId>org.eclipse.gemini.mgmt.tests</artifactId>
+	<packaging>eclipse-test-plugin</packaging>
+	<name>Gemini Management Bundle Tests</name>
+
+<!--	<dependencies>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.enterprise</artifactId>
+			<version>4.2.0</version>
+		</dependency>
+	</dependencies>
+-->
+	<build>
+		<plugins>
+		  <plugin>
+				<groupId>org.sonatype.tycho</groupId>
+				<artifactId>maven-osgi-test-plugin</artifactId>
+				<configuration>
+					<argLine>-Xmx512m -Xms128m -XX:PermSize=128m -XX:MaxPermSize=384m -Dcom.sun.management.jmxremote.port=21045 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false</argLine>
+					<bundleStartLevel>
+						<bundle>
+							<id>osgi.enterprise</id>
+							<level>1</level>
+							<autoStart>true</autoStart>
+						</bundle>
+					</bundleStartLevel>
+				</configuration>
+			</plugin>
+			<!-- <plugin>
+				<groupId>org.sonatype.tycho</groupId>
+				<artifactId>maven-osgi-source-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.codehaus.mojo</groupId>
+				<artifactId>findbugs-maven-plugin</artifactId>
+			</plugin>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-pmd-plugin</artifactId>
+			</plugin> -->
+		</plugins>
+	</build>
+</project>
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
new file mode 100644
index 0000000..66e0302
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
@@ -0,0 +1,436 @@
+package org.eclipse.gemini.mgmt.framework;

+

+import static org.junit.Assert.assertEquals;

+import static org.junit.Assert.assertTrue;

+import static org.junit.Assert.fail;

+

+import java.io.IOException;

+import java.lang.management.ManagementFactory;

+import java.net.MalformedURLException;

+import java.util.Arrays;

+import java.util.Collection;

+import java.util.Iterator;

+import java.util.Map;

+import java.util.Set;

+

+import javax.management.InstanceNotFoundException;

+import javax.management.MBeanException;

+import javax.management.MBeanServer;

+import javax.management.MBeanServerConnection;

+import javax.management.MalformedObjectNameException;

+import javax.management.ObjectName;

+import javax.management.ReflectionException;

+import javax.management.openmbean.CompositeData;

+import javax.management.openmbean.TabularData;

+import javax.management.openmbean.TabularDataSupport;

+import javax.management.remote.JMXConnector;

+import javax.management.remote.JMXConnectorFactory;

+import javax.management.remote.JMXServiceURL;

+

+import org.junit.Test;

+import org.osgi.framework.Bundle;

+import org.osgi.framework.BundleContext;

+import org.osgi.framework.FrameworkUtil;

+import org.osgi.framework.ServiceReference;

+import org.osgi.jmx.framework.BundleStateMBean;

+import org.osgi.service.packageadmin.PackageAdmin;

+import org.osgi.service.startlevel.StartLevel;

+

+import org.eclipse.gemini.mgmt.Activator;

+//import com.sap.core.js.conf.bundlestate.util.BundleState;

+import org.eclipse.gemini.mgmt.codec.Util;

+import org.eclipse.gemini.mgmt.framework.codec.OSGiBundle;

+import org.eclipse.gemini.mgmt.framework.BundleState;

+

+public class BundleStateTest {

+	

+	@Test

+	public void nameAndVersionTest() throws Exception {

+		BundleContext bc = FrameworkUtil.getBundle(Activator.class).getBundleContext();

+		ServiceReference ref = bc.getServiceReference(MBeanServer.class.getCanonicalName());

+		if (ref == null) {

+			bc.registerService(MBeanServer.class.getCanonicalName(), ManagementFactory.getPlatformMBeanServer(), null);

+		}

+		JMXConnector connector = null;

+		CompositeData bundleInfo;

+		String symbolicName;

+		String version;

+		Object key;

+		Object[] keysArray;

+		Bundle bundle;

+		int mask = BundleState.SYMBOLIC_NAME + BundleState.IDENTIFIER + BundleState.VERSION;

+		long start = System.currentTimeMillis();

+		TabularDataSupport table = jmxInvokeListBundles(mask);

+		long end = System.currentTimeMillis();

+		assertTrue((end - start) < 1000);

+		Set keys = table.keySet();

+		Iterator iter = keys.iterator();

+		while (iter.hasNext()) {

+			key = iter.next();

+			keysArray = ((Collection) key).toArray();

+			bundleInfo = (CompositeData) table.get(keysArray);

+			symbolicName = (String) bundleInfo

+					.get(BundleStateMBean.SYMBOLIC_NAME);

+			version = (String) bundleInfo.get(BundleStateMBean.VERSION);

+			bundle = bc.getBundle((Long) keysArray[0]);

+			assertEquals(symbolicName, bundle.getSymbolicName());

+			assertEquals(version, bundle.getVersion().toString());

+		}

+	}

+

+	@Test

+	public void fullMaskTest() throws Exception {

+		JMXConnector connector = null;

+		CompositeData bundleInfo;

+		String location;

+		String symbolicName;

+		String version;

+		int startLevel;

+		String state;

+		long lastModified;

+		boolean persistenlyStarted;

+		boolean removalPending;

+		boolean required;

+		boolean fragment;

+		Long[] registeredServices;

+		Long[] servicesInUse;

+		Map<String, CompositeData> headers;

+		String[] exportedPackages;

+		String[] importedPackages;

+		Long[] fragments;

+		Long[] hosts;

+		Long[] requiringBundles;

+		Long[] requiredBundles;

+		Object key;

+		Object[] keysArray;

+		Bundle bundle;

+		int mask = BundleState.LOCATION + BundleState.IDENTIFIER

+				+ BundleState.SYMBOLIC_NAME + BundleState.VERSION

+				+ BundleState.START_LEVEL + BundleState.STATE

+				+ BundleState.LAST_MODIFIED + BundleState.PERSISTENTLY_STARTED

+				+ BundleState.REMOVAL_PENDING + BundleState.REQUIRED

+				+ BundleState.FRAGMENT + BundleState.REGISTERED_SERVICES

+				+ BundleState.SERVICES_IN_USE + BundleState.HEADERS

+				+ BundleState.EXPORTED_PACKAGES + BundleState.IMPORTED_PACKAGES

+				+ BundleState.FRAGMENTS + BundleState.HOSTS

+				+ BundleState.REQUIRING_BUNDLES + BundleState.REQUIRED_BUNDLES;

+		TabularDataSupport table = jmxInvokeListBundles(mask);

+		Set keys = table.keySet();

+		Iterator iter = keys.iterator();

+		BundleContext bc = FrameworkUtil.getBundle(BundleState.class).getBundleContext();

+		StartLevel sl = (StartLevel) bc.getService(bc

+				.getServiceReference(StartLevel.class.getCanonicalName()));

+		PackageAdmin admin = (PackageAdmin) bc.getService(bc

+				.getServiceReference(PackageAdmin.class.getCanonicalName()));

+		while (iter.hasNext()) {

+			key = iter.next();

+			keysArray = ((Collection) key).toArray();

+			bundleInfo = (CompositeData) table.get(keysArray);

+

+			location = (String) bundleInfo.get(BundleStateMBean.LOCATION);

+			symbolicName = (String) bundleInfo

+					.get(BundleStateMBean.SYMBOLIC_NAME);

+			version = (String) bundleInfo.get(BundleStateMBean.VERSION);

+			startLevel = ((Integer) bundleInfo

+					.get(BundleStateMBean.START_LEVEL)).intValue();

+			state = (String) bundleInfo.get(BundleStateMBean.STATE);

+			lastModified = ((Long) bundleInfo

+					.get(BundleStateMBean.LAST_MODIFIED)).longValue();

+			persistenlyStarted = ((Boolean) bundleInfo

+					.get(BundleStateMBean.PERSISTENTLY_STARTED)).booleanValue();

+			removalPending = ((Boolean) bundleInfo

+					.get(BundleStateMBean.REMOVAL_PENDING)).booleanValue();

+			required = ((Boolean) bundleInfo.get(BundleStateMBean.REQUIRED))

+					.booleanValue();

+			fragment = ((Boolean) bundleInfo.get(BundleStateMBean.FRAGMENT))

+					.booleanValue();

+			registeredServices = (Long[]) bundleInfo

+					.get(BundleStateMBean.REGISTERED_SERVICES);

+			servicesInUse = (Long[]) bundleInfo

+					.get(BundleStateMBean.SERVICES_IN_USE);

+			headers = (Map<String, CompositeData>) bundleInfo

+					.get(BundleStateMBean.HEADERS);

+			exportedPackages = (String[]) bundleInfo

+					.get(BundleStateMBean.EXPORTED_PACKAGES);

+			importedPackages = (String[]) bundleInfo

+					.get(BundleStateMBean.IMPORTED_PACKAGES);

+			fragments = (Long[]) bundleInfo.get(BundleStateMBean.FRAGMENTS);

+			hosts = (Long[]) bundleInfo.get(BundleStateMBean.HOSTS);

+			requiringBundles = (Long[]) bundleInfo

+					.get(BundleStateMBean.REQUIRING_BUNDLES);

+			requiredBundles = (Long[]) bundleInfo

+					.get(BundleStateMBean.REQUIRED_BUNDLES);

+

+			bundle = bc.getBundle((Long) keysArray[0]);

+			assertEquals(location, bundle.getLocation());

+			assertEquals(symbolicName, bundle.getSymbolicName());

+			assertEquals(version, bundle.getVersion().toString());

+			assertEquals(startLevel, sl.getBundleStartLevel(bundle));

+			assertEquals(state, stateToString(bundle.getState()));

+			assertEquals(lastModified, bundle.getLastModified());

+			assertEquals(persistenlyStarted,

+					Util.isBundlePersistentlyStarted(bundle, sl));

+			assertEquals(removalPending,

+					Util.isRequiredBundleRemovalPending(bundle, bc, admin));

+			assertEquals(required, Util.isBundleRequired(bundle, bc, admin));

+			assertEquals(fragment, Util.isBundleFragment(bundle, admin));

+

+			long[] rs = new long[registeredServices.length];

+			for (int i = 0; i < registeredServices.length; i++) {

+				rs[i] = registeredServices[i].longValue();

+			}

+			long[] rs2 = Util.serviceIds(bundle.getRegisteredServices());

+			Arrays.sort(rs);

+			Arrays.sort(rs2);

+			assertTrue(Arrays.equals(rs, rs2));

+

+			long[] siu = new long[servicesInUse.length];

+			for (int i = 0; i < servicesInUse.length; i++) {

+				siu[i] = servicesInUse[i].longValue();

+			}

+			Arrays.sort(siu);

+			long[] siu2 = Util.serviceIds(bundle.getServicesInUse());

+			Arrays.sort(siu2);

+			assertTrue(Arrays.equals(siu, siu2));

+

+			assertEquals((TabularData) headers,

+					OSGiBundle.headerTable(Util.getBundleHeaders(bundle)));

+

+			String[] exportedPackages2 = Util.getBundleExportedPackages(bundle,

+					admin);

+			Arrays.sort(exportedPackages);

+			Arrays.sort(exportedPackages2);

+			assertTrue(Arrays.equals(exportedPackages, exportedPackages2));

+

+			String[] importedPackages2 = Util.getBundleImportedPackages(bundle,

+					bc, admin);

+			Arrays.sort(importedPackages);

+			Arrays.sort(importedPackages2);

+			assertTrue(Arrays.equals(importedPackages, importedPackages2));

+

+			long[] frags = new long[fragments.length];

+			for (int i = 0; i < fragments.length; i++) {

+				frags[i] = fragments[i].longValue();

+			}

+			Arrays.sort(frags);

+			long[] frags2 = Util.getBundleFragments(bundle, admin);

+			Arrays.sort(frags2);

+			assertTrue(Arrays.equals(frags, frags2));

+

+			long[] hst = new long[hosts.length];

+			for (int i = 0; i < hosts.length; i++) {

+				hst[i] = hosts[i].longValue();

+			}

+			Arrays.sort(hst);

+			long[] hst2 = Util.bundleIds(admin.getHosts(bundle));

+			Arrays.sort(hst2);

+			assertTrue(Arrays.equals(hst, hst2));

+

+			long[] reqB = new long[requiringBundles.length];

+			for (int i = 0; i < requiringBundles.length; i++) {

+				reqB[i] = requiringBundles[i].longValue();

+			}

+			Arrays.sort(reqB);

+			long[] reqB2 = Util.getBundlesRequiring(bundle, bc, admin);

+			Arrays.sort(reqB2);

+			assertTrue(Arrays.equals(reqB, reqB2));

+

+			long[] requiredB = new long[requiredBundles.length];

+			for (int i = 0; i < requiredBundles.length; i++) {

+				requiredB[i] = requiredBundles[i].longValue();

+			}

+			Arrays.sort(requiredB);

+			long[] requiredB2 = Util.getDependencies(bundle, admin);

+			Arrays.sort(requiredB2);

+			assertTrue(Arrays.equals(requiredB, requiredB2));

+		}

+	}

+

+	@Test

+	public void randomMaskTest() throws Exception {

+		JMXConnector connector = null;

+		CompositeData bundleInfo;

+		String version;

+		String state;

+		long lastModified;

+		boolean persistenlyStarted;

+		boolean removalPending;

+		Long[] registeredServices;

+		Long[] servicesInUse;

+		String[] exportedPackages;

+		String[] importedPackages;

+		Long[] hosts;

+		Long[] requiringBundles;

+		Object key;

+		Object[] keysArray;

+		Bundle bundle;

+		int mask = BundleState.IDENTIFIER + BundleState.VERSION

+		+ BundleState.STATE + BundleState.LAST_MODIFIED

+		+ BundleState.PERSISTENTLY_STARTED + BundleState.REMOVAL_PENDING

+		+ BundleState.REGISTERED_SERVICES + BundleState.SERVICES_IN_USE

+		+ BundleState.EXPORTED_PACKAGES + BundleState.IMPORTED_PACKAGES

+		+ BundleState.HOSTS + BundleState.REQUIRING_BUNDLES;

+		TabularDataSupport table = jmxInvokeListBundles(mask);

+		Set keys = table.keySet();

+		Iterator iter = keys.iterator();

+		BundleContext bc = FrameworkUtil.getBundle(BundleState.class).getBundleContext();

+		StartLevel sl = (StartLevel) bc.getService(bc

+				.getServiceReference(StartLevel.class.getCanonicalName()));

+		PackageAdmin admin = (PackageAdmin) bc.getService(bc

+				.getServiceReference(PackageAdmin.class.getCanonicalName()));

+		while (iter.hasNext()) {

+			key = iter.next();

+			keysArray = ((Collection) key).toArray();

+			bundleInfo = (CompositeData) table.get(keysArray);

+

+			version = (String) bundleInfo.get(BundleStateMBean.VERSION);

+			state = (String) bundleInfo.get(BundleStateMBean.STATE);

+			lastModified = ((Long) bundleInfo

+					.get(BundleStateMBean.LAST_MODIFIED)).longValue();

+			persistenlyStarted = ((Boolean) bundleInfo

+					.get(BundleStateMBean.PERSISTENTLY_STARTED)).booleanValue();

+			removalPending = ((Boolean) bundleInfo

+					.get(BundleStateMBean.REMOVAL_PENDING)).booleanValue();

+			registeredServices = (Long[]) bundleInfo

+					.get(BundleStateMBean.REGISTERED_SERVICES);

+			servicesInUse = (Long[]) bundleInfo

+					.get(BundleStateMBean.SERVICES_IN_USE);

+			exportedPackages = (String[]) bundleInfo

+					.get(BundleStateMBean.EXPORTED_PACKAGES);

+			importedPackages = (String[]) bundleInfo

+					.get(BundleStateMBean.IMPORTED_PACKAGES);

+			hosts = (Long[]) bundleInfo.get(BundleStateMBean.HOSTS);

+			requiringBundles = (Long[]) bundleInfo

+					.get(BundleStateMBean.REQUIRING_BUNDLES);

+			bundle = bc.getBundle((Long) keysArray[0]);

+

+			assertEquals(version, bundle.getVersion().toString());

+			assertEquals(state, stateToString(bundle.getState()));

+			assertEquals(lastModified, bundle.getLastModified());

+			assertEquals(persistenlyStarted,

+					Util.isBundlePersistentlyStarted(bundle, sl));

+			assertEquals(removalPending,

+					Util.isRequiredBundleRemovalPending(bundle, bc, admin));

+

+			long[] rs = new long[registeredServices.length];

+			for (int i = 0; i < registeredServices.length; i++) {

+				rs[i] = registeredServices[i].longValue();

+			}

+			long[] rs2 = Util.serviceIds(bundle.getRegisteredServices());

+			Arrays.sort(rs);

+			Arrays.sort(rs2);

+			assertTrue(Arrays.equals(rs, rs2));

+

+			long[] siu = new long[servicesInUse.length];

+			for (int i = 0; i < servicesInUse.length; i++) {

+				siu[i] = servicesInUse[i].longValue();

+			}

+			Arrays.sort(siu);

+			long[] siu2 = Util.serviceIds(bundle.getServicesInUse());

+			Arrays.sort(siu2);

+			assertTrue(Arrays.equals(siu, siu2));

+

+			String[] exportedPackages2 = Util.getBundleExportedPackages(bundle,

+					admin);

+			Arrays.sort(exportedPackages);

+			Arrays.sort(exportedPackages2);

+			assertTrue(Arrays.equals(exportedPackages, exportedPackages2));

+

+			String[] importedPackages2 = Util.getBundleImportedPackages(bundle,

+					bc, admin);

+			Arrays.sort(importedPackages);

+			Arrays.sort(importedPackages2);

+			assertTrue(Arrays.equals(importedPackages, importedPackages2));

+

+			long[] hst = new long[hosts.length];

+			for (int i = 0; i < hosts.length; i++) {

+				hst[i] = hosts[i].longValue();

+			}

+			Arrays.sort(hst);

+			long[] hst2 = Util.bundleIds(admin.getHosts(bundle));

+			Arrays.sort(hst2);

+			assertTrue(Arrays.equals(hst, hst2));

+

+			long[] reqB = new long[requiringBundles.length];

+			for (int i = 0; i < requiringBundles.length; i++) {

+				reqB[i] = requiringBundles[i].longValue();

+			}

+			Arrays.sort(reqB);

+			long[] reqB2 = Util.getBundlesRequiring(bundle, bc, admin);

+			Arrays.sort(reqB2);

+			assertTrue(Arrays.equals(reqB, reqB2));

+		}

+	}

+

+	private TabularDataSupport jmxInvokeListBundles(int mask)

+			throws MalformedURLException, IOException,

+			MalformedObjectNameException, InstanceNotFoundException,

+			MBeanException, ReflectionException {

+		JMXConnector connector;

+		String url = "service:jmx:rmi:///jndi/rmi://localhost:21045/jmxrmi";

+		JMXServiceURL jmxURL = new JMXServiceURL(url);

+		connector = JMXConnectorFactory.connect(jmxURL);

+		MBeanServerConnection connection = connector.getMBeanServerConnection();

+		ObjectName name = new ObjectName(CustomBundleStateMBean.OBJECTNAME);

+		TabularDataSupport table = (TabularDataSupport) connection.invoke(name,

+				"listBundles", new Object[] { new Integer(mask) },

+				new String[] { "int" });

+		return table;

+	}

+

+	@Test

+	public void illegalMaskTest() throws Exception {

+		JMXConnector connector = null;

+		CompositeData bundleInfo;

+		String version;

+		String state;

+		long lastModified;

+		boolean persistenlyStarted;

+		boolean removalPending;

+		Long[] registeredServices;

+		Long[] servicesInUse;

+		String[] exportedPackages;

+		String[] importedPackages;

+		Long[] hosts;

+		Long[] requiringBundles;

+		Object key;

+		Object[] keysArray;

+		Bundle bundle;

+		int mask = 1048576;

+		try {

+			TabularDataSupport table = jmxInvokeListBundles(mask);

+			fail("Expected exception did not occur!");

+		} catch (Exception e) {

+			assertTrue(e.getCause() instanceof java.lang.IllegalArgumentException);

+		}

+	}

+

+	private String stateToString(int state) {

+		String strState = null;

+		switch (state) {

+		case 1:

+			strState = "UNINSTALLED";

+			break;

+		case 2:

+			strState = "INSTALLED";

+			break;

+		case 4:

+			strState = "RESOLVED";

+			break;

+		case 8:

+			strState = "STARTING";

+			break;

+		case 16:

+			strState = "STOPPING";

+			break;

+		case 32:

+			strState = "ACTIVE";

+			break;

+		default:

+			strState = "UNKNOWN";

+			break;

+		}

+		return strState;

+	}

+}

+