package org.apache.aries.subsystem.ctt.itests; import java.util.HashMap; import java.util.Map; import org.junit.Test; import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; import org.ops4j.pax.exam.spi.reactors.PerMethod; import org.osgi.framework.Bundle; import org.osgi.framework.Constants; import org.osgi.service.subsystem.Subsystem; import org.osgi.service.subsystem.SubsystemConstants; /* C) Test with pre-installed transitive resources - Register repository R1 - Using the Root subsystem, install a composite subsystem S1 with the following content bundles (with no import/export policy) - Bundle A - Bundle B - Using the subsystem S1, install a composite S2 that imports package x, requires bundle A and required capability y - Verify the wiring of C, D and E wire to A->x, A, B->y respectively - Verify no new bundles are installed into the Root or S1 subsystems */ @ExamReactorStrategy(PerMethod.class) public class SubsystemDependency_4CTest extends SubsystemDependencyTestBase { private static final String SUBSYSTEM_S1 = "sdt_composite.s1.esa"; private static final String SUBSYSTEM_S2 = "sdt_composite.s2.esa"; private Subsystem s1; private Subsystem s2; @Override protected void createApplications() throws Exception { super.createApplications(); createSubsystemS1(); createSubsystemS2(); registerRepositoryR1(); } // doing this within @Before doesn't work :( private void startSubsystems() throws Exception { s1 = installSubsystemFromFile(SUBSYSTEM_S1); startSubsystem(s1); s2 = installSubsystemFromFile(s1, SUBSYSTEM_S2); startSubsystem(s2); } private void stopSubsystems() throws Exception { stopSubsystem(s2); stopSubsystem(s1); //uninstallSubsystem(s2); //uninstallSubsystem(s1); } // Using the subsystem S1, install a composite S2 that // imports package x, // requires bundle A // and required capability y // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively @Test public void verify() throws Exception { startSubsystems(); verifySinglePackageWiring (s2, BUNDLE_C, "x", BUNDLE_A); verifyRequireBundleWiring (s2, BUNDLE_D, BUNDLE_A); verifyCapabilityWiring (s2, BUNDLE_E, "y", BUNDLE_B); stopSubsystems(); } @Test public void verifyNoUnexpectedBundlesProvisioned() throws Exception { Bundle[] rootBundlesBefore = bundleContext.getBundles(); s1 = installSubsystemFromFile(SUBSYSTEM_S1); startSubsystem(s1); Bundle[] s1BundlesBefore = bundleContext.getBundles(); s2 = installSubsystemFromFile(s1, SUBSYSTEM_S2); startSubsystem(s2); Bundle[] rootBundlesAfter = bundleContext.getBundles(); Bundle[] s1BundlesAfter = bundleContext.getBundles(); checkNoNewBundles ("rootBundles", rootBundlesBefore, rootBundlesAfter); checkNoNewBundles ("s1Bundles", s1BundlesBefore, s1BundlesAfter); stopSubsystems(); } /* * a composite subsystem S1 with the following content bundles (with no import/export policy) - Bundle A - Bundle B */ private static void createSubsystemS1() throws Exception { Map<String, String> attributes = new HashMap<String, String>(); attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_S1); attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE); String appContent = BUNDLE_A + ";" + Constants.VERSION_ATTRIBUTE + "=\"[1.0.0,1.0.0]\"" + ", " + BUNDLE_B + ";" + Constants.VERSION_ATTRIBUTE + "=\"[1.0.0,1.0.0]\""; attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent); createManifest(SUBSYSTEM_S1 + ".mf", attributes); createSubsystem(SUBSYSTEM_S1); } /* * a composite S2 that * imports package x, * requires bundle A * and required capability y * * Although the test plan is silent as to the content of S2, I think we have to assume * that it contains bundles C, D and E */ private static void createSubsystemS2() throws Exception { Map<String, String> attributes = new HashMap<String, String>(); attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_S2); attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE); String appContent = BUNDLE_C + ";" + Constants.VERSION_ATTRIBUTE + "=\"[1.0.0,1.0.0]\"" + ", " + BUNDLE_D + ";" + Constants.VERSION_ATTRIBUTE + "=\"[1.0.0,1.0.0]\"" + ", " + BUNDLE_E + ";" + Constants.VERSION_ATTRIBUTE + "=\"[1.0.0,1.0.0]\""; attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent); attributes.put(Constants.IMPORT_PACKAGE, "x"); attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A); attributes.put(Constants.REQUIRE_CAPABILITY, "y"); createManifest(SUBSYSTEM_S2 + ".mf", attributes); createSubsystem(SUBSYSTEM_S2); } }