Merge branch 'master' of ssh://git.eclipse.org/gitroot/gemini.management/org.eclipse.gemini.managment

Conflicts:
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTest.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTest.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/BundleWiringStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTest.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/FrameworkTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTest.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/framework/PackageStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTests.java
	org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTests.java
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/AbstractOSGiMBeanTest.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
similarity index 95%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/AbstractOSGiMBeanTest.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
index 917280f..9add76b 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/AbstractOSGiMBeanTest.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/AbstractOSGiMBeanTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   VMware Inc. - initial contribution
  *******************************************************************************/
-package org.eclipse.gemini.mgmt;
+package org.eclipse.gemini.mgmt.integration.tests;
 
 import java.lang.management.ManagementFactory;
 
@@ -20,6 +20,7 @@
 import javax.management.remote.JMXConnectorFactory;
 import javax.management.remote.JMXServiceURL;
 
+import org.eclipse.gemini.mgmt.Activator;
 import org.junit.BeforeClass;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.FrameworkUtil;
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
similarity index 98%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
index d7b1bdf..12c199e 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleStateTest.java
@@ -28,7 +28,6 @@
 import javax.management.openmbean.CompositeData;

 import javax.management.openmbean.TabularData;

 

-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;

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

 import org.eclipse.gemini.mgmt.framework.CustomBundleStateMBean;

 import org.eclipse.gemini.mgmt.framework.internal.OSGiBundle;

@@ -50,9 +49,7 @@
  * Integration tests for the {@link BundleState} implementation of {@link CustomBundleStateMBean} and {@link BundleStateMBean}

  *

  */

-public final class BundleStateTests extends AbstractOSGiMBeanTest{

-	

-	protected String mBeanObjectName = BundleStateMBean.OBJECTNAME;

+public final class BundleStateTest extends AbstractOSGiMBeanTest{

 	

 	private CompositeData bundleInfo;

 	private String location;

@@ -79,6 +76,10 @@
 	private Object[] keysArray;

 	private Bundle bundle;

 	

+	public BundleStateTest() {

+		super.mBeanObjectName = BundleStateMBean.OBJECTNAME;

+	}

+	

 	@Before

 	public void before(){

 		this.bundleInfo = null;

@@ -120,7 +121,7 @@
 		while (iter.hasNext()) {

 			key = iter.next();

 			keysArray = ((Collection<?>) key).toArray();

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

+			bundleInfo = table.get(keysArray);

 			symbolicName = (String) bundleInfo.get(BundleStateMBean.SYMBOLIC_NAME);

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

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

diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
similarity index 76%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
index a291046..c950754 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/BundleWiringStateTest.java
@@ -10,16 +10,23 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
 import org.eclipse.gemini.mgmt.framework.BundleWiringState;
 import org.eclipse.gemini.mgmt.framework.CustomBundleWiringStateMBean;
+import org.junit.Test;
 
 /**
  * Integration tests for the {@link BundleWiringState} implementation of {@link CustomBundleWiringStateMBean}
  *
  */
-public final class BundleWiringStateTests extends AbstractOSGiMBeanTest {
+public final class BundleWiringStateTest extends AbstractOSGiMBeanTest {
 
-	protected String mBeanObjectName = CustomBundleWiringStateMBean.OBJECTNAME;
+	public BundleWiringStateTest() {
+		super.mBeanObjectName = CustomBundleWiringStateMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
similarity index 77%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
index c31337e..1f8c72b 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/FrameworkTest.java
@@ -10,16 +10,23 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
 import org.eclipse.gemini.mgmt.framework.Framework;
+import org.junit.Test;
 import org.osgi.jmx.framework.FrameworkMBean;
 
 /**
  * Integration tests for the {@link Framework} implementation of {@link FrameworkMBean}
  *
  */
-public final class FrameworkTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = FrameworkMBean.OBJECTNAME;
+public final class FrameworkTest extends AbstractOSGiMBeanTest {
+	
+	public FrameworkTest() {
+		super.mBeanObjectName = FrameworkMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 	
 }
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
similarity index 77%
rename from org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTests.java
rename to org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
index 01aa3f1..5a5e87c 100644
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTests.java
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/PackageStateTest.java
@@ -10,16 +10,22 @@
  *******************************************************************************/
 package org.eclipse.gemini.mgmt.integration.tests;
 
-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
 import org.eclipse.gemini.mgmt.framework.PackageState;
+import org.junit.Test;
 import org.osgi.jmx.framework.PackageStateMBean;
 
 /**
  * Integration tests for the {@link PackageState} implementation {@link PackageStateMBean}
  *
  */
-public final class PackageStateTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = PackageStateMBean.OBJECTNAME;
+public final class PackageStateTest extends AbstractOSGiMBeanTest {
 	
+	public PackageStateTest() {
+		super.mBeanObjectName = PackageStateMBean.OBJECTNAME;
+	}
+	
+	@Test
+	public void somethingTest(){
+		
+	}
 }
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
new file mode 100644
index 0000000..228eddb
--- /dev/null
+++ b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTest.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2011 VMware Inc.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *   VMware Inc. - initial contribution
+ *******************************************************************************/
+package org.eclipse.gemini.mgmt.integration.tests;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertArrayEquals;
+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.CustomServiceStateMBean;
+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.ServiceStateMBean;
+
+/**
+ * Integration tests for the {@link ServiceState} implementation of {@link CustomServiceStateMBean} and {@link ServiceStateMBean}
+ *
+ */
+public final class ServiceStateTest extends AbstractOSGiMBeanTest {
+
+	private CompositeData serviceInfo;
+	private Object key;
+	private Object[] keysArray;
+	private long providingBundle;
+	private long serviceId;
+	private Long[] usingBundles;
+	
+	public ServiceStateTest() {
+		super.mBeanObjectName = ServiceStateMBean.OBJECTNAME;
+	}
+	
+	@Before
+	public void before(){
+		this.serviceInfo = null;
+		this.key = null;
+		this.keysArray = null;
+		this.providingBundle = -1;
+		this.serviceId = -1;
+		this.usingBundles = null;
+	}
+	
+	@Test
+	public void listTest() throws Exception {
+		TabularData table = jmxInvokeBundleState("listServices", new Object[]{}, new String[]{});
+		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();
+			serviceInfo = table.get(keysArray);
+
+			this.providingBundle = (Long) serviceInfo.get(ServiceStateMBean.BUNDLE_IDENTIFIER);
+			this.serviceId = (Long) serviceInfo.get(ServiceStateMBean.IDENTIFIER);
+			this.usingBundles = (Long[]) serviceInfo.get(ServiceStateMBean.USING_BUNDLES);
+
+			ServiceReference<?> serviceReference = bc.getAllServiceReferences(null, "(" + Constants.SERVICE_ID + "=" + this.serviceId + ")")[0];
+			
+			assertEquals(providingBundle, serviceReference.getBundle().getBundleId());
+			assertEquals(serviceId, ((Long) serviceReference.getProperty(Constants.SERVICE_ID)).longValue());
+			Bundle[] usingBundles2 = serviceReference.getUsingBundles();
+			if(usingBundles2 == null){
+				assertEquals(0, this.usingBundles.length);
+			} else {
+				Long[] usingBundlesIds = new Long[usingBundles2.length];
+				for (int i = 0; i < usingBundles2.length; i++) {
+					usingBundlesIds[i] = usingBundles2[i].getBundleId();
+				}
+				assertArrayEquals(this.usingBundles, usingBundlesIds);
+			}
+		}
+	}
+	
+}
diff --git a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTests.java b/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTests.java
deleted file mode 100644
index 7caaa99..0000000
--- a/org.eclipse.gemini.mgmt.tests/src/org/eclipse/gemini/mgmt/integration/tests/ServiceStateTests.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 VMware Inc.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *   VMware Inc. - initial contribution
- *******************************************************************************/
-package org.eclipse.gemini.mgmt.integration.tests;
-
-import org.eclipse.gemini.mgmt.AbstractOSGiMBeanTest;
-import org.eclipse.gemini.mgmt.framework.CustomServiceStateMBean;
-import org.eclipse.gemini.mgmt.framework.ServiceState;
-import org.osgi.jmx.framework.ServiceStateMBean;
-
-/**
- * Integration tests for the {@link ServiceState} implementation of {@link CustomServiceStateMBean} and {@link ServiceStateMBean}
- *
- */
-public final class ServiceStateTests extends AbstractOSGiMBeanTest {
-
-	protected String mBeanObjectName = ServiceStateMBean.OBJECTNAME;
-	
-}
diff --git a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
index 9afe179..f57ba98 100644
--- a/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
+++ b/org.eclipse.gemini.mgmt/src/main/java/org/eclipse/gemini/mgmt/framework/internal/OSGiService.java
@@ -109,6 +109,9 @@
 	 */

 	public static long[] getBundlesUsing(ServiceReference<?> serviceRef) {

 		Bundle[] bundles = serviceRef.getUsingBundles();

+		if(bundles == null){

+			return new long[0];

+		}

 		long[] ids = new long[bundles.length];

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

 			ids[i] = bundles[i].getBundleId();