Adding a basic integration test for each of the core MBeans
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
index 9add76b..5818666 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
@@ -15,7 +15,6 @@
 import javax.management.MBeanServer;
 import javax.management.MBeanServerConnection;
 import javax.management.ObjectName;
-import javax.management.openmbean.TabularData;
 import javax.management.remote.JMXConnector;
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
@@ -39,14 +38,26 @@
 		}
 	}
 
-	protected TabularData jmxInvokeBundleState(String operation, Object[] arguments, String[] types) throws Exception {
+	protected <T> T jmxFetchData(String operation, Object[] arguments, String[] types, Class<T> returnType) throws Exception {
 		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(mBeanObjectName);
-		return (TabularData) connection.invoke(name, operation, arguments, types);
+		Object result = connection.invoke(name, operation, arguments, types);
+		return returnType.cast(result);
+	}
+
+	protected <T> T jmxFetchAttribute(String attribute, Class<T> returnType) throws Exception {
+		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(mBeanObjectName);
+		Object result = connection.getAttribute(name, attribute);
+		return returnType.cast(result);
 	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
index 12c199e..631c90f 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
@@ -112,7 +112,7 @@
 	public void nameAndVersionTest() throws Exception {

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

 		long start = System.currentTimeMillis();

-		TabularData table = jmxInvokeBundleState("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" });

+		TabularData table = jmxFetchData("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" }, TabularData.class);

 		long end = System.currentTimeMillis();

 		assertTrue((end - start) < 1000);

 		Set<?> keys = table.keySet();

@@ -133,7 +133,7 @@
 	@SuppressWarnings("unchecked")

 	@Test

 	public void listTest() throws Exception {

-		TabularData table = jmxInvokeBundleState("listBundles", new Object[]{}, new String[]{});

+		TabularData table = jmxFetchData("listBundles", new Object[]{}, new String[]{}, TabularData.class);

 		Set<?> keys = table.keySet();

 		Iterator<?> iter = keys.iterator();

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

@@ -223,7 +223,7 @@
 	@SuppressWarnings("unchecked")

 	@Test

 	public void fullMaskTest() throws Exception {

-		TabularData table = jmxInvokeBundleState("listBundles", new Object[]{ new Integer(CustomBundleStateMBean.DEFAULT) }, new String[]{ "int" });

+		TabularData table = jmxFetchData("listBundles", new Object[]{ new Integer(CustomBundleStateMBean.DEFAULT) }, new String[]{ "int" }, TabularData.class);

 		Set<?> keys = table.keySet();

 		Iterator<?> iter = keys.iterator();

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

@@ -318,7 +318,7 @@
 				+ BundleState.REGISTERED_SERVICES + BundleState.SERVICES_IN_USE

 				+ BundleState.EXPORTED_PACKAGES + BundleState.IMPORTED_PACKAGES

 				+ BundleState.HOSTS + BundleState.REQUIRING_BUNDLES;

-		TabularData table = jmxInvokeBundleState("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" });

+		TabularData table = jmxFetchData("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" }, TabularData.class);

 		Set<?> keys = table.keySet();

 		Iterator<?> iter = keys.iterator();

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

@@ -383,7 +383,7 @@
 		int mask = 2097152;

 		try {

 			@SuppressWarnings("unused")

-			TabularData table = jmxInvokeBundleState("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" });

+			TabularData table = jmxFetchData("listBundles", new Object[]{ new Integer(mask) }, new String[]{ "int" }, TabularData.class);

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

 		} catch (Exception e) {

 			assertTrue(e.getCause() instanceof IllegalArgumentException);

diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
index c950754..5593736 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
@@ -10,9 +10,25 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
+import static org.junit.Assert.assertEquals;
+
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Set;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
+
 import org.eclipse.gemini.mgmt.framework.BundleWiringState;
 import org.eclipse.gemini.mgmt.framework.CustomBundleWiringStateMBean;
+import org.eclipse.gemini.mgmt.framework.ServiceState;
+import org.junit.Before;
 import org.junit.Test;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.wiring.BundleRevision;
+import org.osgi.framework.wiring.BundleWiring;
+import org.osgi.jmx.framework.PackageStateMBean;
 
 /**
  * Integration tests for the {@link BundleWiringState} implementation of {@link CustomBundleWiringStateMBean}
@@ -20,13 +36,60 @@
  */
 public final class BundleWiringStateTest extends AbstractOSGiMBeanTest {
 
+	private CompositeData wireInfo;
+	private Object key;
+	private Object[] keysArray;
+	private Long bundleId;
+	//private Integer bundleRevisionId;
+	private CompositeData[] capabilities;
+	private CompositeData[] requirements;
+	private CompositeData[] revisionProvidedWires;
+	private CompositeData[] revisionRequiredWires;
+
 	public BundleWiringStateTest() {
 		super.mBeanObjectName = CustomBundleWiringStateMBean.OBJECTNAME;
 	}
 	
+	@Before
+	public void before(){
+		this.wireInfo = null;
+		this.key = null;
+		this.keysArray = null;	
+		this.bundleId = null;
+		//this.bundleRevisionId = null;
+		this.capabilities = null;
+		this.requirements = null;
+		this.revisionProvidedWires = null;
+		this.revisionRequiredWires = null;
+	}
+	
 	@Test
-	public void somethingTest(){
-		
+	public void currentWiringClosureTest() throws Exception {
+		TabularData table = jmxFetchData("getCurrentWiringClosure", new Object[]{new Long(0), BundleRevision.PACKAGE_NAMESPACE}, new String[]{"long", "java.lang.String"}, TabularData.class);
+		Set<?> keys = table.keySet();
+		Iterator<?> iter = keys.iterator();
+		BundleContext bc = FrameworkUtil.getBundle(ServiceState.class).getBundleContext();
+		while (iter.hasNext()) {
+			key = iter.next();
+			keysArray = ((Collection<?>) key).toArray();
+			wireInfo = table.get(keysArray);
+			
+			
+			this.bundleId = (Long) wireInfo.get(CustomBundleWiringStateMBean.BUNDLE_ID);
+			//this.bundleRevisionId = (Integer) wireInfo.get(CustomBundleWiringStateMBean.BUNDLE_REVISION_ID);
+			this.capabilities = (CompositeData[]) wireInfo.get(CustomBundleWiringStateMBean.CAPABILITIES);
+			this.requirements = (CompositeData[]) wireInfo.get(CustomBundleWiringStateMBean.REQUIREMENTS);
+			this.revisionProvidedWires = (CompositeData[]) wireInfo.get(CustomBundleWiringStateMBean.REVISION_PROVIDED_WIRES);
+			this.revisionRequiredWires = (CompositeData[]) wireInfo.get(CustomBundleWiringStateMBean.REVISION_REQUIRED_WIRES);
+			
+
+			BundleWiring wiring = bc.getBundle(this.bundleId).adapt(BundleWiring.class);
+
+			assertEquals(wiring.getCapabilities(BundleRevision.PACKAGE_NAMESPACE).size(), this.capabilities.length);
+			assertEquals(wiring.getRequirements(BundleRevision.PACKAGE_NAMESPACE).size(), this.requirements.length);
+			assertEquals(wiring.getProvidedWires(BundleRevision.PACKAGE_NAMESPACE).size(), this.revisionProvidedWires.length);
+			assertEquals(wiring.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE).size(), this.revisionRequiredWires.length);
+		}
 	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
index 1f8c72b..0daec16 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
@@ -10,6 +10,8 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
+import static org.junit.Assert.assertEquals;
+
 import org.eclipse.gemini.mgmt.framework.Framework;
 import org.junit.Test;
 import org.osgi.jmx.framework.FrameworkMBean;
@@ -25,8 +27,9 @@
 	}
 	
 	@Test
-	public void somethingTest(){
-		
+	public void frameworkStartLevelTest() throws Exception {
+		Integer result = jmxFetchAttribute("FrameworkStartLevel", Integer.class);
+		assertEquals(6, result.intValue());
 	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
index 5a5e87c..b58f756 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
@@ -10,9 +10,34 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.management.openmbean.CompositeData;
+import javax.management.openmbean.TabularData;
+
 import org.eclipse.gemini.mgmt.framework.PackageState;
+import org.eclipse.gemini.mgmt.framework.ServiceState;
+import org.junit.Before;
 import org.junit.Test;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.FrameworkUtil;
+import org.osgi.framework.ServiceReference;
 import org.osgi.jmx.framework.PackageStateMBean;
+import org.osgi.jmx.framework.ServiceStateMBean;
+import org.osgi.service.packageadmin.ExportedPackage;
+import org.osgi.service.packageadmin.PackageAdmin;
+
+import com.sun.org.apache.xerces.internal.impl.Version;
 
 /**
  * Integration tests for the {@link PackageState} implementation {@link PackageStateMBean}
@@ -20,12 +45,78 @@
  */
 public final class PackageStateTest extends AbstractOSGiMBeanTest {
 	
+	private CompositeData packageInfo;
+	private Object key;
+	private Object[] keysArray;
+	private Long[] exportingBundles;
+	private Long[] importingBundles;
+	private String name;
+	private Boolean removalPending;
+	private String version;
+	
 	public PackageStateTest() {
 		super.mBeanObjectName = PackageStateMBean.OBJECTNAME;
 	}
 	
+	@Before
+	public void before(){
+		this.packageInfo = null;
+		this.key = null;
+		this.keysArray = null;
+		this.exportingBundles = null;
+		this.importingBundles = null;
+		this.name = null;
+		this.removalPending = null;
+		this.version = null;
+	}
+	
 	@Test
-	public void somethingTest(){
+	public void listTest() throws Exception {
+		TabularData table = jmxFetchData("listPackages", new Object[]{}, new String[]{}, TabularData.class);
+		Set<?> keys = table.keySet();
+		Iterator<?> iter = keys.iterator();
+		BundleContext bundleContext = FrameworkUtil.getBundle(ServiceState.class).getBundleContext();
+
+		PackageAdmin admin = (PackageAdmin) bundleContext.getService(bundleContext.getServiceReference(PackageAdmin.class));
+		ExportedPackage[] exportedPackages = admin.getExportedPackages((Bundle) null);
+		Map<String, ExportedPackage> packages = new HashMap<String, ExportedPackage>();
+		for (ExportedPackage exportedPackage : exportedPackages) {
+			packages.put(getPackageIdentifier(exportedPackage.getExportingBundle().getBundleId(), exportedPackage.getName(), exportedPackage.getVersion().toString()), exportedPackage);
+		}
 		
+		while (iter.hasNext()) {
+			key = iter.next();
+			keysArray = ((Collection<?>) key).toArray();
+			packageInfo = table.get(keysArray);
+			
+			
+			this.exportingBundles = (Long[]) packageInfo.get(PackageStateMBean.EXPORTING_BUNDLES);
+			this.importingBundles = (Long[]) packageInfo.get(PackageStateMBean.IMPORTING_BUNDLES);
+			this.name = (String) packageInfo.get(PackageStateMBean.NAME);
+			this.removalPending = (Boolean) packageInfo.get(PackageStateMBean.REMOVAL_PENDING);
+			this.version = (String) packageInfo.get(PackageStateMBean.VERSION);
+			
+			ExportedPackage exportedPackage = packages.get(getPackageIdentifier(this.exportingBundles[0], this.name, this.version));
+			assertEquals(exportedPackage.getExportingBundle().getBundleId(), this.exportingBundles[0].longValue());
+			
+			Bundle[] bundles = exportedPackage.getImportingBundles();
+			Long[] ids = new Long[bundles.length];
+			for (int i = 0; i < bundles.length; i++) {
+				ids[i] = bundles[i].getBundleId();
+			}
+			Arrays.sort(this.importingBundles);
+			Arrays.sort(ids);
+			
+			assertArrayEquals(ids, this.importingBundles);
+			assertEquals(exportedPackage.getName(), this.name);
+			assertEquals(exportedPackage.isRemovalPending(), this.removalPending.booleanValue());
+			assertEquals(exportedPackage.getVersion().toString(), this.version);
+
+
+		}
+	}
+	
+	private String getPackageIdentifier(Long bundleId, String name, String version){
+		return bundleId + ";" + name + ";" + version;
 	}
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTest.java
index 228eddb..3c820c5 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTest.java
@@ -59,7 +59,7 @@
 	
 	@Test
 	public void listTest() throws Exception {
-		TabularData table = jmxInvokeBundleState("listServices", new Object[]{}, new String[]{});
+		TabularData table = jmxFetchData("listServices", new Object[]{}, new String[]{}, TabularData.class);
 		Set<?> keys = table.keySet();
 		Iterator<?> iter = keys.iterator();
 		BundleContext bc = FrameworkUtil.getBundle(ServiceState.class).getBundleContext();
diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/Activator.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/Activator.java
index 226d4bf..1180397 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/Activator.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/Activator.java
@@ -63,6 +63,7 @@
  * the MBeanServer. When the MBeanServer is found, the MBeans representing the OSGi services will be installed.

  * 

  */

+@SuppressWarnings("deprecation")

 public class Activator implements BundleActivator {

 

 	private static final Logger LOGGER = Logger.getLogger(Activator.class.getCanonicalName());

diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/PackageState.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/PackageState.java
index d6e5032..cf7f765 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/PackageState.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/PackageState.java
@@ -35,11 +35,9 @@
 /** 

  * 

  */

-@SuppressWarnings("deprecation")

+@Deprecated

 public final class PackageState implements PackageStateMBean {

 	

-	//private BundleContext bundleContext;

-	

 	private PackageAdmin admin;

 	

 	/**

@@ -47,7 +45,6 @@
 	 * @param bundleContext

 	 */

 	public PackageState(BundleContext bundleContext) {

-		//this.bundleContext = bundleContext;

 		this.admin = (PackageAdmin) bundleContext.getService(bundleContext.getServiceReference(PackageAdmin.class));

 	}

 

@@ -121,14 +118,6 @@
 	 */

 	public TabularData listPackages() {

 		Set<OSGiPackage> packages = new HashSet<OSGiPackage>();

-//		for (Bundle bundle : bundleContext.getBundles()) {

-//			ExportedPackage[] pkgs = admin.getExportedPackages(bundle);

-//			if (pkgs != null) {

-//				for (ExportedPackage pkg : pkgs) {

-//					packages.add(new OSGiPackage(pkg.getName(), pkg.getVersion().toString(), pkg.isRemovalPending(), new Bundle[] { pkg.getExportingBundle() }, pkg.getImportingBundles()));

-//				}

-//			}

-//		}

 		for(ExportedPackage pkg : admin.getExportedPackages((Bundle) null)){

 			packages.add(new OSGiPackage(pkg.getName(), pkg.getVersion().toString(), pkg.isRemovalPending(), new Bundle[] { pkg.getExportingBundle() }, pkg.getImportingBundles()));

 		}