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 14:48:39 UTC

svn commit: r1360152 - in /aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests: SubsystemDependency_4BTest.java SubsystemDependency_4ETest.java

Author: mnuttall
Date: Wed Jul 11 12:48:38 2012
New Revision: 1360152

URL: http://svn.apache.org/viewvc?rev=1360152&view=rev
Log:
Aries-865: Work on test for OSGi Subsystem CTT section 4E. Fix to 4B. 

Modified:
    aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4BTest.java
    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/SubsystemDependency_4BTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4BTest.java?rev=1360152&r1=1360151&r2=1360152&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4BTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/ctt/itests/SubsystemDependency_4BTest.java Wed Jul 11 12:48:38 2012
@@ -99,7 +99,7 @@ public class SubsystemDependency_4BTest 
 		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;filter:=\"(bug=true)\"");
+		attributes.put(Constants.REQUIRE_CAPABILITY, "y");
 		createManifest(APPLICATION_B + ".mf", attributes);
 		createSubsystem(APPLICATION_B);
 	}

Modified: 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_4ETest.java?rev=1360152&r1=1360151&r2=1360152&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_4ETest.java Wed Jul 11 12:48:38 2012
@@ -1,8 +1,16 @@
 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_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 org.junit.Before;
 import org.junit.Test;
 import org.osgi.framework.Constants;
@@ -75,10 +83,11 @@ public class SubsystemDependency_4ETest 
        - 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 = "sdt_composite4e_s1.esa";
-	private static final String SUBSYSTEM_4E_S2 = "sdt_application4e_s1.esa";
+	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";
+	private static final String SUBSYSTEM_4E_S2_FEATURE = "sdt_feature4e_s2.esa";
 	private static boolean _testSubsystemsCreated = false;
-	private Subsystem subsystem_s1;
 	
 	@Before
 	public void setUp() throws Exception
@@ -87,6 +96,8 @@ public class SubsystemDependency_4ETest 
 		if (!_testSubsystemsCreated) { 
 			createComposite4E_S1();
 			createApplication4E_S2();
+			createComposite4E_S2();
+			createFeature4E_S2();
 		}
 		registerRepositoryR2();
 	}
@@ -99,21 +110,175 @@ public class SubsystemDependency_4ETest 
 	@Test
 	public void verifyBundlesAandBInstalledIntoRootSubsystem() throws Exception
 	{
-		Subsystem s1 = installSubsystemFromFile(SUBSYSTEM_4E_S1);
+		Subsystem s1 = installSubsystemFromFile(SUBSYSTEM_4E_S1_COMP);
 		startSubsystem(s1);
-		
-		Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2);
+		Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2_APP);
 		startSubsystem(s2);
 		
 		verifyBundlesInstalled (bundleContext, "Root", BUNDLE_A, BUNDLE_B);
 		
+		stop(s1, s2);
+	}
+	
+	
+	@Test
+	public void verifyExpectedWiringsForS2_App() throws Exception
+	{
+		Subsystem s1 = installSubsystemFromFile(SUBSYSTEM_4E_S1_COMP);
+		startSubsystem(s1);
+		Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2_APP);
+		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);
+
+		stop(s1, s2);
+	}
+	
+	// - Repeat test with S2 as a composite that 
+	//     imports package x, requires bundle A and required capability y
+	@Test
+	public void verifyExpectedWiringsForS2_Composite() throws Exception
+	{
+		Subsystem s1 = installSubsystemFromFile(SUBSYSTEM_4E_S1_COMP);
+		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);
+		
+		stop(s1, s2);
+	}
+	
+	// - Repeat test with S2 as a feature
+	@Test
+	public void verifyExpectedWiringsForS2_Feature() throws Exception
+	{
+		Subsystem s1 = installSubsystemFromFile(SUBSYSTEM_4E_S1_COMP);
+		startSubsystem(s1);
+		Subsystem s2 = installSubsystemFromFile(s1, SUBSYSTEM_4E_S2_FEATURE);
+		startSubsystem(s2);
+		runChecks (s2);
+		stop(s1, s2);
+	}
+	
+	// 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
+
+	@Test
+	public void FourE1b_App_App() throws Exception
+	{
+		combinationTest ("4eS1_App_App.esa", SUBSYSTEM_TYPE_APPLICATION, SUBSYSTEM_4E_S2_APP, SUBSYSTEM_TYPE_APPLICATION);
+	}
+	
+	@Test
+	public void FourE1b_App_Comp() throws Exception
+	{
+		combinationTest ("4eS1_App_Comp.esa", SUBSYSTEM_TYPE_APPLICATION, SUBSYSTEM_4E_S2_COMP, SUBSYSTEM_TYPE_COMPOSITE);
+	}
+	
+	@Test
+	public void FourE1b_App_Feature() throws Exception
+	{
+		combinationTest ("4eS1_App_Feature.esa", SUBSYSTEM_TYPE_APPLICATION, SUBSYSTEM_4E_S2_FEATURE, SUBSYSTEM_TYPE_FEATURE);
+	}
+	
+	@Test
+	public void FourE1b_Comp_App() throws Exception
+	{
+		combinationTest ("4eS1_Comp_App.esa", SUBSYSTEM_TYPE_COMPOSITE, SUBSYSTEM_4E_S2_APP, SUBSYSTEM_TYPE_APPLICATION);
+	}
+	
+	@Test
+	public void FourE1b_Comp_Comp() throws Exception
+	{
+		combinationTest ("4eS1_Comp_Comp.esa", SUBSYSTEM_TYPE_COMPOSITE, SUBSYSTEM_4E_S2_COMP, SUBSYSTEM_TYPE_COMPOSITE);
+	}
+	
+	@Test
+	public void FourE1b_Comp_Feature() throws Exception
+	{
+		combinationTest ("4eS1_Comp_Feature.esa", SUBSYSTEM_TYPE_COMPOSITE, SUBSYSTEM_4E_S2_FEATURE, SUBSYSTEM_TYPE_FEATURE);
+	}
+	
+	/*
+	 * Build a subsystem called combinedSubsystemName with a parent of parentType and a child of childType
+	 * Start the subsystem
+	 * runChecks on the comination
+	 * Stop and uninstall the combination
+	 */
+	private void combinationTest (String combinedSubsystemName, String parentType, String childName, String childType) throws Exception
+	{
+		createCombinedSubsystem (combinedSubsystemName, parentType, childName, childType);
+		Subsystem s = installSubsystemFromFile(combinedSubsystemName);
+		startSubsystem(s);
+		
+		Collection<Subsystem> children = s.getChildren();  
+		// we only expect one child
+		Subsystem child = children.iterator().next();
+		runChecks (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");
+		}
+		
+		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
+	{
 		stopSubsystem(s2);
 		stopSubsystem(s1);
 		uninstallSubsystem(s2);
 		uninstallSubsystem(s1);
-		
 	}
 	
+	
 	/*
 	 * a composite subsystem S1 with 
          - no content bundles 
@@ -122,13 +287,14 @@ public class SubsystemDependency_4ETest 
 	private static void createComposite4E_S1() throws Exception
 	{
 		Map<String, String> attributes = new HashMap<String, String>();
-		attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_S1);
-		attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE);
+		attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_S1_COMP);
+		attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+		attributes.put(SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_COMPOSITE);
 		attributes.put(Constants.IMPORT_PACKAGE, "x");
 		attributes.put(Constants.REQUIRE_BUNDLE, BUNDLE_A);
 		attributes.put(Constants.REQUIRE_CAPABILITY, "y"); 
-		createManifest(SUBSYSTEM_4E_S1 + ".mf", attributes);
-		createSubsystem(SUBSYSTEM_4E_S1);
+		createManifest(SUBSYSTEM_4E_S1_COMP + ".mf", attributes);
+		createSubsystem(SUBSYSTEM_4E_S1_COMP);
 	}
 
 	/* an application S2 with
@@ -136,12 +302,46 @@ public class SubsystemDependency_4ETest 
 	private static void createApplication4E_S2() throws Exception
 	{
 		Map<String, String> attributes = new HashMap<String, String>();
-		attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_S2);
-		attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION);
+		attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_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_4E_S2 + ".mf", attributes);
-		createSubsystem(SUBSYSTEM_4E_S2);
+		createManifest(SUBSYSTEM_4E_S2_APP + ".mf", attributes);
+		createSubsystem(SUBSYSTEM_4E_S2_APP);
+	}
+	
+	/* a feature S2 with
+    - content bundles C, D and E */
+	private static void createFeature4E_S2() throws Exception
+	{
+		Map<String, String> attributes = new HashMap<String, String>();
+		attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_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_4E_S2_FEATURE + ".mf", attributes);
+		createSubsystem(SUBSYSTEM_4E_S2_FEATURE);
+	}
+	
+	/* a composite S2 that 
+	//     imports package x, requires bundle A and required capability y */
+	private static void createComposite4E_S2() throws Exception
+	{
+		Map<String, String> attributes = new HashMap<String, String>();
+		attributes.put(SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4E_S2_COMP);
+		attributes.put(SubsystemConstants.SUBSYSTEM_VERSION, "1.0.0");
+		attributes.put(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_4E_S2_COMP + ".mf", attributes);
+		createSubsystem(SUBSYSTEM_4E_S2_COMP);
 	}