You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by mn...@apache.org on 2012/07/11 18:43:05 UTC
svn commit: r1360286 - in
/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests:
SubsystemDependencyTestBase.java SubsystemDependency_4E1Test.java
SubsystemDependency_4E2Test.java SubsystemDependency_4ETest.java
Author: mnuttall
Date: Wed Jul 11 16:43:04 2012
New Revision: 1360286
URL: http://svn.apache.org/viewvc?rev=1360286&view=rev
Log:
Aries-865: OSGi Subsystem CTT section 4E up and including subsection 2b
Added:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E1Test.java
- copied, changed from r1360152, aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ETest.java
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E2Test.java
Removed:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ETest.java
Modified:
aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependencyTestBase.java
Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependencyTestBase.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependencyTestBase.java?rev=1360286&r1=1360285&r2=1360286&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependencyTestBase.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependencyTestBase.java Wed Jul 11 16:43:04 2012
@@ -167,6 +167,15 @@ public abstract class SubsystemDependenc
BUNDLE_C, BUNDLE_D, BUNDLE_E);
}
+ /**
+ * - Verify that bundles C, D and E in subsystem s wire to A->x, A, B->y respectively
+ */
+ protected void checkBundlesCDandEWiredToAandB (Subsystem s)
+ {
+ verifySinglePackageWiring (s, BUNDLE_C, "x", BUNDLE_A);
+ verifyRequireBundleWiring (s, BUNDLE_D, BUNDLE_A);
+ verifyCapabilityWiring (s, BUNDLE_E, "y", BUNDLE_B);
+ }
/**
* Check that wiredBundleName in subsystem s is wired to a single package,
@@ -261,7 +270,7 @@ public abstract class SubsystemDependenc
break inner;
}
}
- assertTrue ("Bundle " + bundleName + " not found in " + subsystemName + "subsystem", bundleFound);
+ assertTrue ("Bundle " + bundleName + " not found in subsystem " + subsystemName, bundleFound);
}
}
}
Copied: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E1Test.java (from r1360152, aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ETest.java)
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E1Test.java?p2=aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E1Test.java&p1=aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ETest.java&r1=1360152&r2=1360286&rev=1360286&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4ETest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E1Test.java Wed Jul 11 16:43:04 2012
@@ -1,19 +1,20 @@
package org.apache.aries.subsystem.ctt.itests;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME;
import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE;
import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE;
import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_FEATURE;
-import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME;
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
import org.junit.Before;
import org.junit.Test;
import org.osgi.framework.Constants;
+import org.osgi.framework.namespace.IdentityNamespace;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.service.subsystem.SubsystemConstants;
@@ -33,56 +34,10 @@ import org.osgi.service.subsystem.Subsys
b. - same as 4E1a except S2 is a content resource of S1
- There are 6 combinations to test
- app_app, app_comp, app_feat, comp_app, comp_comp, comp_feat
- 2. A non-Root subsystem has acceptDependencies policy
- a. - Register repository R2
- - Using the Root subsystem, install a composite subsystem S1 with
- - no content bundles
- - acceptTransitive policy
- - no sharing policy
- - Using the subsystem S1, install an application S2 with
- - content bundles C, D and E
- - note sharing policy gets computed
- - Verify that bundles A and B got installed into the S1 Subsystem
- - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
- - Repeat test with S2 as a composite that imports package x, requires bundle A and required capability y
- - Repeat test with S2 as a feature
- b. - same as 4E2a except S2 is a content resource of S1
- - There are 6 combinations to test
- - app_app, app_comp, app_feat, comp_app, comp_comp, comp_feat
- 3. Invalid sharing policy prevents dependency installation
- a. - Register repository R2
- - Using the Root subsystem, install a composite subsystem S1 with
- - no content bundles
- - NO acceptDependency policy
- - no sharing policy
- - Using the subsystem S1, install an application S2 with
- - content bundles C, D and E
- - note the sharing policy gets computed
- - Verify the installation of S2 fails because there is no valid place to install the
- required transitive resources A and B that allow S2 constituents to have access.
- - Verify resources A and B are not installed in the Root subsystem.
- - Repeat test with S2 as a composite that imports package x, requires bundle A and requires capability y.
- - Repeat test with S2 as a feature
- c. - same as 4E3a except S1 is a composite that has S2 in its Subsystem-Content; S1 fails to install
+
*/
-public class SubsystemDependency_4ETest extends SubsystemDependencyTestBase
+public class SubsystemDependency_4E1Test extends SubsystemDependencyTestBase
{
- /*
- 1. Root is the only acceptDependencies policy
- a. - Register repository R2
- - Using the Root subsystem, install a composite subsystem S1 with
- - no content bundles
- - imports package x, requires bundle A and requires capability y
- - Using the subsystem S1, install an application S2 with
- - content bundles C, D and E
- - Verify that bundles A and B got installed into the Root Subsystem
- - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
- - Repeat test with S2 as a composite that imports package x, requires bundle A and required capability y
- - Repeat test with S2 as a feature
- b. - same as 4E1a except S2 is a content resource of S1
- - There are 6 combinations to test
- - app_app, app_comp, app_feat, comp_app, comp_comp, comp_feat
- */
private static final String SUBSYSTEM_4E_S1_COMP = "sdt_composite4e_s1.esa";
private static final String SUBSYSTEM_4E_S2_APP = "sdt_application4e_s2.esa";
private static final String SUBSYSTEM_4E_S2_COMP = "sdt_composite4e_s2.esa";
@@ -146,13 +101,7 @@ public class SubsystemDependency_4ETest
startSubsystem(s1);
Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2_COMP);
startSubsystem(s2);
-
- // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
- /*verifySinglePackageWiring (s2, BUNDLE_C, "x", BUNDLE_A);
- verifyRequireBundleWiring (s2, BUNDLE_D, BUNDLE_A);
- verifyCapabilityWiring (s2, BUNDLE_E, "y", BUNDLE_B);*/
- runChecks(s2);
-
+ checkBundlesCDandEWiredToAandB(s2);
stop(s1, s2);
}
@@ -164,7 +113,7 @@ public class SubsystemDependency_4ETest
startSubsystem(s1);
Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2_FEATURE);
startSubsystem(s2);
- runChecks (s2);
+ checkBundlesCDandEWiredToAandB (s2);
stop(s1, s2);
}
@@ -223,52 +172,40 @@ public class SubsystemDependency_4ETest
Collection<Subsystem> children = s.getChildren();
// we only expect one child
Subsystem child = children.iterator().next();
- runChecks (child);
+ checkBundlesCDandEWiredToAandB (child);
stopSubsystem(s);
uninstallSubsystem(s);
}
-
- private void runChecks (Subsystem child)
- {
- // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
- verifySinglePackageWiring (child, BUNDLE_C, "x", BUNDLE_A);
- verifyRequireBundleWiring (child, BUNDLE_D, BUNDLE_A);
- verifyCapabilityWiring (child, BUNDLE_E, "y", BUNDLE_B);
- }
-
-
/*
* Create a nested parent/child subsystem with symbolicName, where parent is of type and child is the
* previously-created childSubsystem
*/
private void createCombinedSubsystem (String symbolicName, String parentType, String childSubsystem, String childSubsystemType) throws Exception
{
- Map<String, String> attributes = new HashMap<String, String>();
- attributes.put(SUBSYSTEM_SYMBOLICNAME, symbolicName);
- attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
- attributes.put(SUBSYSTEM_TYPE, parentType);
-
- if (parentType == SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE) {
- attributes.put(Constants.IMPORT_PACKAGE, "x");
- attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A);
- attributes.put(Constants.REQUIRE_CAPABILITY, "y");
+ File f = new File (symbolicName);
+ if (!f.exists()) {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, symbolicName);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, parentType);
+ if (parentType == SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE) {
+ attributes.put(Constants.IMPORT_PACKAGE, "x");
+ attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A);
+ attributes.put(Constants.REQUIRE_CAPABILITY, "y");
+ }
+ StringBuffer subsystemContent = new StringBuffer();
+ subsystemContent.append (childSubsystem + ";" + Constants.VERSION_ATTRIBUTE
+ + "=\"[1.0.0,1.0.0]\";");
+ // I'm not sure that this is the best "type" attribute to use, but it will do.
+ subsystemContent.append(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE + "=");
+ subsystemContent.append(childSubsystemType);
+ attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, subsystemContent.toString());
+ createManifest(symbolicName + ".mf", attributes);
+ createSubsystem(symbolicName, childSubsystem);
}
-
- StringBuffer subsystemContent = new StringBuffer();
- subsystemContent.append (childSubsystem + ";" + Constants.VERSION_ATTRIBUTE
- + "=\"[1.0.0,1.0.0]\";");
- // TODO: possible spec bug - subsystem-content needs a ;type= attribute
- // but there's no constant for TYPE_ATTRIBUTE ...?
- subsystemContent.append("type=");
- subsystemContent.append(childSubsystemType);
- attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, subsystemContent.toString());
-
- createManifest(symbolicName + ".mf", attributes);
- createSubsystem(symbolicName, childSubsystem);
}
-
private void stop(Subsystem s1, Subsystem s2) throws Exception
{
@@ -343,7 +280,4 @@ public class SubsystemDependency_4ETest
createManifest(SUBSYSTEM_4E_S2_COMP + ".mf", attributes);
createSubsystem(SUBSYSTEM_4E_S2_COMP);
}
-
-
-
}
Added: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E2Test.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E2Test.java?rev=1360286&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E2Test.java (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4E2Test.java Wed Jul 11 16:43:04 2012
@@ -0,0 +1,316 @@
+package org.apache.aries.subsystem.ctt.itests;
+
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_SYMBOLICNAME;
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE;
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION;
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE;
+import static org.osgi.service.subsystem.SubsystemConstants.SUBSYSTEM_TYPE_FEATURE;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.osgi.framework.Constants;
+import org.osgi.framework.namespace.IdentityNamespace;
+import org.osgi.service.subsystem.Subsystem;
+import org.osgi.service.subsystem.SubsystemConstants;
+
+/*
+ * 2. A non-Root subsystem has acceptDependencies policy
+ a. - Register repository R2
+ - Using the Root subsystem, install a composite subsystem S1 with
+ - no content bundles
+ - acceptTransitive policy
+ - no sharing policy
+ - Using the subsystem S1, install an application S2 with
+ - content bundles C, D and E
+ - note sharing policy gets computed
+ - Verify that bundles A and B got installed into the S1 Subsystem
+ - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
+ - Repeat test with S2 as a composite that imports package x, requires bundle A and required capability y
+ - Repeat test with S2 as a feature
+ b. - same as 4E2a except S2 is a content resource of S1
+ - There are 6 combinations to test
+ - app_app, app_comp, app_feat, comp_app, comp_comp, comp_feat
+ 3. Invalid sharing policy prevents dependency installation
+ a. - Register repository R2
+ - Using the Root subsystem, install a composite subsystem S1 with
+ - no content bundles
+ - NO acceptDependency policy
+ - no sharing policy
+ - Using the subsystem S1, install an application S2 with
+ - content bundles C, D and E
+ - note the sharing policy gets computed
+ - Verify the installation of S2 fails because there is no valid place to install the
+ required transitive resources A and B that allow S2 constituents to have access.
+ - Verify resources A and B are not installed in the Root subsystem.
+ - Repeat test with S2 as a composite that imports package x, requires bundle A and requires capability y.
+ - Repeat test with S2 as a feature
+ c. - same as 4E3a except S1 is a composite that has S2 in its Subsystem-Content; S1 fails to install
+ */
+public class SubsystemDependency_4E2Test extends SubsystemDependencyTestBase
+{
+ private static final boolean _testSubsystemsCreated = false;
+ private static final String SUBSYSTEM_4E2_S1_COMP = "sdt_composite4e2_s1.esa";
+ private static final String SUBSYSTEM_4E2_S2_APP = "sdt_application4e2_s2.esa";
+ private static final String SUBSYSTEM_4E2_S2_COMP = "sdt_composite4e2_s2.esa";
+ private static final String SUBSYSTEM_4E2_S2_FEATURE = "sdt_feature4e2_s2.esa";
+
+ @Before
+ public void setUp() throws Exception
+ {
+ super.setUp();
+ if (!_testSubsystemsCreated) {
+ createComposite4E2_S1();
+ createApplication4E2_S2();
+ createComposite4E2_S2();
+ createFeature4E2_S2();
+ }
+ registerRepositoryR2();
+ }
+
+ /*
+ * - Using the Root subsystem, install a composite subsystem S1 with
+ - no content bundles
+ - acceptTransitive policy
+ - no sharing policy
+ - Using the subsystem S1, install an application S2 with
+ - content bundles C, D and E
+ - note sharing policy gets computed
+ - Verify that bundles A and B got installed into the S1 Subsystem
+ */
+ @Test
+ public void test4E2A_where_S2isAnApplication() throws Exception
+ {
+ Subsystem s1 = installSubsystemFromFile (SUBSYSTEM_4E2_S1_COMP);
+ startSubsystem(s1);
+
+ Subsystem s2 = installSubsystemFromFile (s1, SUBSYSTEM_4E2_S2_APP);
+ startSubsystem(s2);
+
+ verifyBundlesInstalled (s1.getBundleContext(), "s1", BUNDLE_A, BUNDLE_B);
+
+ // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
+ checkBundlesCDandEWiredToAandB(s2);
+
+ stop(s1, s2);
+ }
+
+ /* Repeat test [4e2a.app] with S2 as a composite
+ * that imports package x, requires bundle A and required capability y
+ */
+ @Test
+ public void test4E2A_where_S2isAComposite() throws Exception
+ {
+ Subsystem s1 = installSubsystemFromFile (SUBSYSTEM_4E2_S1_COMP);
+ startSubsystem(s1);
+ Subsystem s2 = installSubsystemFromFile (s1, SUBSYSTEM_4E2_S2_COMP);
+ startSubsystem(s2);
+ verifyBundlesInstalled (s1.getBundleContext(), "s1", BUNDLE_A, BUNDLE_B);
+ // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
+ checkBundlesCDandEWiredToAandB(s2);
+ stop(s1, s2);
+ }
+
+ /*
+ * - Repeat test [4e2a.app] with S2 as a feature
+ */
+ @Test
+ public void test4E2A_where_S2isAFeature() throws Exception
+ {
+ Subsystem s1 = installSubsystemFromFile (SUBSYSTEM_4E2_S1_COMP);
+ startSubsystem(s1);
+ Subsystem s2 = installSubsystemFromFile (s1, SUBSYSTEM_4E2_S2_FEATURE);
+ startSubsystem(s2);
+ verifyBundlesInstalled (s1.getBundleContext(), "s1", BUNDLE_A, BUNDLE_B);
+ // - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
+ checkBundlesCDandEWiredToAandB(s2);
+ stop(s1, s2);
+ }
+
+ /*
+ * 4e2b: - same as 4E2a except S2 is a content resource of S1
+ - There are 6 combinations to test
+ - app_app, app_comp, app_feat, comp_app, comp_comp, comp_feat
+ */
+ @Test
+ public void FourE2b_App_App() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_App_App.esa", SUBSYSTEM_TYPE_APPLICATION,
+ SUBSYSTEM_4E2_S2_APP, SUBSYSTEM_TYPE_APPLICATION);
+ }
+
+ @Test
+ public void FourE2b_App_Comp() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_App_Comp.esa", SUBSYSTEM_TYPE_APPLICATION,
+ SUBSYSTEM_4E2_S2_COMP, SUBSYSTEM_TYPE_COMPOSITE);
+ }
+
+ @Test
+ public void FourE2b_App_Feature() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_App_Feature.esa", SUBSYSTEM_TYPE_APPLICATION,
+ SUBSYSTEM_4E2_S2_FEATURE, SUBSYSTEM_TYPE_FEATURE);
+ }
+
+ @Test
+ public void FourE2b_Comp_App() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_App_App.esa", SUBSYSTEM_TYPE_APPLICATION,
+ SUBSYSTEM_4E2_S2_APP, SUBSYSTEM_TYPE_APPLICATION);
+ }
+
+ @Test
+ public void FourE2b_Comp_Comp() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_Comp_Comp.esa", SUBSYSTEM_TYPE_COMPOSITE,
+ SUBSYSTEM_4E2_S2_COMP, SUBSYSTEM_TYPE_COMPOSITE);
+ }
+ @Test
+ public void FourE2b_Comp_Feature() throws Exception
+ {
+ combinationTest_4e2b ("4e2b_Comp_Feature.esa", SUBSYSTEM_TYPE_COMPOSITE,
+ SUBSYSTEM_4E2_S2_FEATURE, SUBSYSTEM_TYPE_FEATURE);
+ }
+
+ /*
+ * Build a subsystem called combinedSubsystemName with a parent of parentType and a child of childType
+ * Start the subsystem
+ * - Verify that bundles A and B got installed into the S1 Subsystem
+ * - Verify the wiring of C, D and E wire to A->x, A, B->y respectively
+ * Stop and uninstall the combination
+ */
+ private void combinationTest_4e2b (String combinedSubsystemName, String parentType, String childName, String childType) throws Exception
+ {
+ createCombinedSubsystem (combinedSubsystemName, parentType, childName, childType);
+ Subsystem s = installSubsystemFromFile(combinedSubsystemName);
+ startSubsystem(s);
+
+ verifyBundlesInstalled (s.getBundleContext(), "s1", BUNDLE_A, BUNDLE_B);
+
+ Collection<Subsystem> children = s.getChildren();
+ // we only expect one child
+ Subsystem child = children.iterator().next();
+ checkBundlesCDandEWiredToAandB (child);
+
+ stopSubsystem(s);
+ uninstallSubsystem(s);
+ }
+
+ private void createCombinedSubsystem (String symbolicName, String parentType, String childSubsystem, String childSubsystemType) throws Exception
+ {
+ File f = new File (symbolicName);
+ if (!f.exists()) {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, symbolicName);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, parentType
+ + ";" + SubsystemConstants.PROVISION_POLICY_DIRECTIVE
+ + ":=" + SubsystemConstants.PROVISION_POLICY_ACCEPT_DEPENDENCIES);
+
+ StringBuffer subsystemContent = new StringBuffer();
+ subsystemContent.append (childSubsystem + ";" + Constants.VERSION_ATTRIBUTE
+ + "=\"[1.0.0,1.0.0]\";");
+ // I'm not sure that this is the best "type" attribute to use, but it will do.
+ subsystemContent.append(IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE + "=");
+ subsystemContent.append(childSubsystemType);
+ attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, subsystemContent.toString());
+
+ // This seems to be necessary to get Comp_Comp and Comp_Feature to work
+ if (parentType == SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE) {
+ attributes.put(Constants.IMPORT_PACKAGE, "x");
+ attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A);
+ attributes.put(Constants.REQUIRE_CAPABILITY, "y");
+ }
+
+ createManifest(symbolicName + ".mf", attributes);
+ createSubsystem(symbolicName, childSubsystem);
+ }
+ }
+
+
+ /*
+ * Stop s2, stop s1, uninstall s2, uninstall s1
+ */
+ private void stop(Subsystem s1, Subsystem s2) throws Exception
+ {
+ stopSubsystem(s2);
+ stopSubsystem(s1);
+ uninstallSubsystem(s2);
+ uninstallSubsystem(s1);
+ }
+
+ /* a feature S2 with
+ * - content bundles C, D and E
+ */
+ private static void createFeature4E2_S2() throws Exception
+ {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E2_S2_FEATURE);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_FEATURE);
+ String appContent = BUNDLE_C + ", " + BUNDLE_D + ", " + BUNDLE_E;
+ attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent);
+ createManifest(SUBSYSTEM_4E2_S2_FEATURE + ".mf", attributes);
+ createSubsystem(SUBSYSTEM_4E2_S2_FEATURE);
+ }
+
+ /* an application S2 with
+ * - content bundles C, D and E
+ */
+ private static void createApplication4E2_S2() throws Exception
+ {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E2_S2_APP);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, SUBSYSTEM_TYPE_APPLICATION);
+ String appContent = BUNDLE_C + ", " + BUNDLE_D + ", " + BUNDLE_E;
+ attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent);
+ createManifest(SUBSYSTEM_4E2_S2_APP + ".mf", attributes);
+ createSubsystem(SUBSYSTEM_4E2_S2_APP);
+ }
+
+ /*
+ * a composite [S2]
+ * that imports package x, requires bundle A and required capability y
+ */
+ private static void createComposite4E2_S2() throws Exception
+ {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E2_S2_COMP);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, SUBSYSTEM_TYPE_COMPOSITE);
+ attributes.put(Constants.IMPORT_PACKAGE, "x");
+ attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A);
+ attributes.put(Constants.REQUIRE_CAPABILITY, "y");
+ 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);
+ createManifest(SUBSYSTEM_4E2_S2_COMP + ".mf", attributes);
+ createSubsystem(SUBSYSTEM_4E2_S2_COMP);
+ }
+
+
+ /*
+ * a composite subsystem S1 with
+ * - no content bundles
+ * - acceptTransitive policy
+ * - no sharing policy
+ */
+ private static void createComposite4E2_S1() throws Exception
+ {
+ Map<String, String> attributes = new HashMap<String, String>();
+ attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E2_S1_COMP);
+ attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+ attributes.put(SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE
+ + ";" + SubsystemConstants.PROVISION_POLICY_DIRECTIVE
+ + ":=" + SubsystemConstants.PROVISION_POLICY_ACCEPT_DEPENDENCIES);
+ createManifest(SUBSYSTEM_4E2_S1_COMP + ".mf", attributes);
+ createSubsystem(SUBSYSTEM_4E2_S1_COMP);
+ }
+}