diff --git a/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java b/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java index c92ba20489..c0b22531af 100644 --- a/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java +++ b/sandbox/jmx-next/jmx-core/src/main/java/org/apache/aries/jmx/codec/BundleWiringData.java @@ -31,28 +31,55 @@ import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleRequirement; import org.osgi.framework.wiring.BundleWire; +import org.osgi.framework.wiring.BundleWiring; import org.osgi.jmx.framework.BundleRevisionsStateMBean; public class BundleWiringData { private final long bundleId; private final List capabilities; private final List requirements; + private List requiredWires; public BundleWiringData(long bundleId, List capabilities, List requirements, List requiredWires) { this.bundleId = bundleId; this.capabilities = capabilities; this.requirements = requirements; + this.requiredWires = requiredWires; } public CompositeData toCompositeData() { try { Map items = new HashMap(); items.put(BundleRevisionsStateMBean.BUNDLE_ID, bundleId); - items.put(BundleRevisionsStateMBean.BUNDLE_REVISION_ID, null); + items.put(BundleRevisionsStateMBean.BUNDLE_REVISION_ID, null); // TODO items.put(BundleRevisionsStateMBean.REQUIREMENTS, getRequirements()); items.put(BundleRevisionsStateMBean.CAPABILITIES, getCapabilities()); - items.put(BundleRevisionsStateMBean.BUNDLE_WIRES_TYPE, null); + + CompositeData[] reqWiresData = new CompositeData[requiredWires.size()]; + for (int i=0; i < requiredWires.size(); i++) { + BundleWire requiredWire = requiredWires.get(i); + Map wireItems = new HashMap(); + BundleWiring providerWiring = requiredWire.getProviderWiring(); + wireItems.put(BundleRevisionsStateMBean.PROVIDER_BUNDLE_ID, providerWiring.getBundle().getBundleId()); + wireItems.put(BundleRevisionsStateMBean.PROVIDER_BUNDLE_REVISION_ID, null); // TODO + BundleWiring requirerWiring = requiredWire.getRequirerWiring(); + wireItems.put(BundleRevisionsStateMBean.REQUIRER_BUNDLE_ID, requirerWiring.getBundle().getBundleId()); + wireItems.put(BundleRevisionsStateMBean.REQUIRER_BUNDLE_REVISION_ID, null); // TODO + BundleCapability capability = requiredWire.getCapability(); + wireItems.put(BundleRevisionsStateMBean.BUNDLE_CAPABILITY, + getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_CAPABILITY_TYPE, + capability.getNamespace(), capability.getAttributes().entrySet(), capability.getDirectives().entrySet())); + BundleRequirement requirement = requiredWire.getRequirement(); + wireItems.put(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT, + getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT_TYPE, + requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet())); + + CompositeData wireData = new CompositeDataSupport(BundleRevisionsStateMBean.BUNDLE_WIRE_TYPE, wireItems); + reqWiresData[i] = wireData; + } + + items.put(BundleRevisionsStateMBean.BUNDLE_WIRES_TYPE, reqWiresData); return new CompositeDataSupport(BundleRevisionsStateMBean.BUNDLE_WIRING_TYPE, items); } catch (OpenDataException e) { @@ -75,7 +102,7 @@ private CompositeData[] getRequirements() throws OpenDataException { for (int i=0; i < requirements.size(); i++) { BundleRequirement requirement = requirements.get(i); reqData[i] = getCapReqCompositeData(BundleRevisionsStateMBean.BUNDLE_REQUIREMENT_TYPE, - requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet()); + requirement.getNamespace(), requirement.getAttributes().entrySet(), requirement.getDirectives().entrySet()); } return reqData; } diff --git a/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleRevisionsStateMBeanTest.java b/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleRevisionsStateMBeanTest.java index f267dad35d..792b58052a 100644 --- a/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleRevisionsStateMBeanTest.java +++ b/sandbox/jmx-next/jmx-itests/src/test/java/org/apache/aries/jmx/framework/BundleRevisionsStateMBeanTest.java @@ -24,6 +24,9 @@ import static org.ops4j.pax.swissbox.tinybundles.core.TinyBundles.withBnd; import java.io.IOException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import javax.management.ObjectName; import javax.management.openmbean.CompositeData; @@ -34,9 +37,15 @@ import org.ops4j.pax.exam.CoreOptions; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.container.def.PaxRunnerOptions; +import org.ops4j.pax.exam.container.def.options.VMOption; import org.ops4j.pax.exam.junit.Configuration; +import org.ops4j.pax.exam.options.TimeoutOption; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; +import org.osgi.framework.wiring.BundleCapability; +import org.osgi.framework.wiring.BundleRequirement; +import org.osgi.framework.wiring.BundleRevision; +import org.osgi.framework.wiring.BundleWire; import org.osgi.framework.wiring.BundleWiring; import org.osgi.jmx.framework.BundleRevisionsStateMBean; import org.osgi.jmx.framework.PackageStateMBean; @@ -51,8 +60,8 @@ public class BundleRevisionsStateMBeanTest extends AbstractIntegrationTest { @Configuration public static Option[] configuration() { return testOptions( - // new VMOption( "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" ), - // new TimeoutOption( 0 ), + new VMOption( "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000" ), + new TimeoutOption( 0 ), PaxRunnerOptions.rawPaxRunnerOption("config", "classpath:ss-runner.properties"), CoreOptions.equinox().version("3.7.0.v20110613"), @@ -112,7 +121,6 @@ public void doSetUp() throws Exception { @Test public void testMBeanInterface() throws IOException { - // BundleStateMBean bsMBean = getMBean(BundleStateMBean.OBJECTNAME, BundleStateMBean.class); BundleRevisionsStateMBean brsMBean = getMBean(BundleRevisionsStateMBean.OBJECTNAME, BundleRevisionsStateMBean.class); Bundle a = context().getBundleByName("org.apache.aries.jmx.test.bundlea"); @@ -123,34 +131,23 @@ public void testMBeanInterface() throws IOException { Assert.assertEquals(a.getBundleId(), wiring.get(BundleRevisionsStateMBean.BUNDLE_ID)); BundleWiring bw = a.adapt(BundleWiring.class); - CompositeData[] capabilities = (CompositeData[]) wiring.get(BundleRevisionsStateMBean.CAPABILITIES); - Assert.assertEquals(bw.getCapabilities(BundleRevisionsStateMBean.PACKAGE_NAMESPACE).size(), capabilities.length); - - /* - PackageStateMBean packagaState = getMBean(PackageStateMBean.OBJECTNAME, PackageStateMBean.class); - assertNotNull(packagaState); - - long[] exportingBundles = packagaState.getExportingBundles("org.osgi.jmx.framework", "1.5.0"); - assertNotNull(exportingBundles); - assertTrue("Should find a bundle exporting org.osgi.jmx.framework", exportingBundles.length > 0); - - long[] exportingBundles2 = packagaState.getExportingBundles("test", "1.0.0"); - assertNull("Shouldn't find a bundle exporting test package", exportingBundles2); - - long[] importingBundlesId = packagaState - .getImportingBundles("org.osgi.jmx.framework", "1.5.0", exportingBundles[0]); - assertTrue("Should find bundles importing org.osgi.jmx.framework", importingBundlesId.length > 0); - - TabularData table = packagaState.listPackages(); - assertNotNull("TabularData containing CompositeData with packages info shouldn't be null", table); - assertEquals("TabularData should be a type PACKAGES", PackageStateMBean.PACKAGES_TYPE, table.getTabularType()); - Collection colData = table.values(); - assertNotNull("Collection of CompositeData shouldn't be null", colData); - assertFalse("Collection of CompositeData should contain elements", colData.isEmpty()); - - boolean isRemovalPending = packagaState.isRemovalPending("org.osgi.jmx.framework", "1.5.0", exportingBundles[0]); - assertFalse("Should removal pending on org.osgi.jmx.framework be false", isRemovalPending); - */ - } + CompositeData[] jmxCapabilities = (CompositeData[]) wiring.get(BundleRevisionsStateMBean.CAPABILITIES); + List capabilities = bw.getCapabilities(BundleRevision.PACKAGE_NAMESPACE); + Assert.assertEquals(capabilities.size(), jmxCapabilities.length); + + Map, Map> m = new HashMap, Map>(); + for (BundleCapability cap : capabilities) { + m.put(cap.getAttributes(), cap.getDirectives()); + } + + CompositeData[] jmxRequirements = (CompositeData[]) wiring.get(BundleRevisionsStateMBean.REQUIREMENTS); + List requirements = bw.getRequirements(BundleRevision.PACKAGE_NAMESPACE); + Assert.assertEquals(requirements.size(), jmxRequirements.length); + List requiredWires = bw.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE); + CompositeData[] jmxRequiredWires = (CompositeData[]) wiring.get(BundleRevisionsStateMBean.BUNDLE_WIRES_TYPE); + // currently the wires only contains the required wires. + Assert.assertEquals(requiredWires.size(), jmxRequiredWires.length); + + } }