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()));
}