You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by da...@apache.org on 2014/12/02 16:38:39 UTC

svn commit: r1642910 [3/3] - in /aries/trunk/subsystem: subsystem-api/ subsystem-api/src/main/java/org/apache/aries/subsystem/ subsystem-bundle/ subsystem-core/ subsystem-core/src/main/java/org/apache/aries/subsystem/core/content/ subsystem-core/src/ma...

Modified: aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java?rev=1642910&r1=1642909&r2=1642910&view=diff
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java (original)
+++ aries/trunk/subsystem/subsystem-itests/src/test/java/org/apache/aries/subsystem/itests/SubsystemTest.java Tue Dec  2 15:38:38 2014
@@ -102,14 +102,15 @@ public abstract class SubsystemTest exte
 	private static final String SUBSYSTEM_CORE_NAME = "org.apache.aries.subsystem.core";
     protected static boolean createdApplications = false;
 	boolean installModeler = true;
-	
+    boolean installConfigAdmin = false;
+
 	public SubsystemTest() {
 	}
-	
+
 	public SubsystemTest(boolean installModeller) {
 		this.installModeler = installModeller;
 	}
-	
+
 	public Option baseOptions() {
         String localRepo = getLocalRepo();
         return composite(
@@ -120,7 +121,7 @@ public abstract class SubsystemTest exte
                 when(localRepo != null).useOptions(vmOption("-Dorg.ops4j.pax.url.mvn.localRepository=" + localRepo))
          );
     }
-	
+
 	@Configuration
 	public Option[] configuration() throws Exception {
 	    new File("target").mkdirs();
@@ -133,6 +134,8 @@ public abstract class SubsystemTest exte
 				mavenBundle("org.apache.aries.application", "org.apache.aries.application.utils").versionAsInProject(),
 				mavenBundle("org.apache.aries.application", "org.apache.aries.application.api").versionAsInProject(),
 				when(installModeler).useOptions(modelerBundles()),
+                when(installConfigAdmin).useOptions(
+                        mavenBundle("org.apache.felix",     "org.apache.felix.configadmin").versionAsInProject()),
 				mavenBundle("org.apache.aries.subsystem",   "org.apache.aries.subsystem.api").versionAsInProject(),
 				mavenBundle("org.apache.aries.subsystem",   SUBSYSTEM_CORE_NAME).versionAsInProject(),
 				streamBundle(createCoreFragment()).noStart(),
@@ -151,7 +154,7 @@ public abstract class SubsystemTest exte
 	}
 
     protected void init() throws Exception {
-       
+
     }
 
     private Option modelerBundles() {
@@ -164,7 +167,7 @@ public abstract class SubsystemTest exte
     /**
      * The itests need private packages from the core subsystems bundle.
      * So this fragment exports them.
-     * @return stream containing the fragment 
+     * @return stream containing the fragment
      */
     private InputStream createCoreFragment() {
 	return TinyBundles.bundle()
@@ -173,12 +176,12 @@ public abstract class SubsystemTest exte
 	    .set("Fragment-Host", SUBSYSTEM_CORE_NAME)
 	    .build();
     }
-	
+
 	protected final SubsystemEventHandler subsystemEvents = new SubsystemEventHandler();
-	
+
 	@SuppressWarnings("rawtypes")
     protected Collection<ServiceRegistration> serviceRegistrations = new ArrayList<ServiceRegistration>();
-	
+
 	@Before
 	public void setUp() throws Exception {
 		if (!createdApplications) {
@@ -187,68 +190,68 @@ public abstract class SubsystemTest exte
 		}
 		bundleContext.getBundle(0).getBundleContext().addServiceListener(subsystemEvents, '(' + Constants.OBJECTCLASS + '=' + Subsystem.class.getName() + ')');
 	}
-	
+
 	protected void createApplications() throws Exception {
 	}
 
 	@SuppressWarnings("rawtypes")
     @After
-	public void tearDown() throws Exception 
+	public void tearDown() throws Exception
 	{
 		bundleContext.removeServiceListener(subsystemEvents);
 		for (ServiceRegistration registration : serviceRegistrations)
 			Utils.unregisterQuietly(registration);
 		serviceRegistrations.clear();
 	}
-	
+
 	protected RichBundleContext context(Subsystem subsystem) {
 		return new RichBundleContext(subsystem.getBundleContext());
 	}
-	
+
 	protected void assertEmptySubsystem(Subsystem subsystem) {
     	assertSymbolicName("org.apache.aries.subsystem.itests.subsystem.empty", subsystem);
     	assertVersion("0", subsystem);
     	assertType(SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION, subsystem);
     }
-	
+
 	protected void assertBundleState(int state, String symbolicName, Subsystem subsystem) {
     	Bundle bundle = context(subsystem).getBundleByName(symbolicName);
     	assertNotNull("Bundle not found: " + symbolicName, bundle);
     	assertBundleState(bundle, state);
     }
-	
+
 	protected void assertBundleState(Bundle bundle, int state) {
 		assertTrue("Wrong state: " + bundle + " [expected " + state + " but was " + bundle.getState() + "]", (bundle.getState() & state) != 0);
 	}
-	
+
 	protected Subsystem assertChild(Subsystem parent, String symbolicName) {
 		return assertChild(parent, symbolicName, null, null);
 	}
-	
+
 	protected Subsystem assertChild(Subsystem parent, String symbolicName, Version version) {
 		return assertChild(parent, symbolicName, version, null);
 	}
-	
+
 	protected Subsystem assertChild(Subsystem parent, String symbolicName, Version version, String type) {
 		Subsystem result = getChild(parent, symbolicName, version, type);
 		assertNotNull("Child does not exist: " + symbolicName, result);
 		return result;
 	}
-	
+
 	protected void assertChild(Subsystem parent, Subsystem child) {
 		Collection<Subsystem> children = new ArrayList<Subsystem>(1);
 		children.add(child);
 		assertChildren(parent, children);
 	}
-	
+
 	protected void assertChildren(int size, Subsystem subsystem) {
 		assertEquals("Wrong number of children", size, subsystem.getChildren().size());
 	}
-	
+
 	protected void assertChildren(Subsystem parent, Collection<Subsystem> children) {
 		assertTrue("Parent did not contain all children", parent.getChildren().containsAll(children));
 	}
-	
+
 	protected void assertClassLoadable(String clazz, Bundle bundle) {
 		try {
 			bundle.loadClass(clazz);
@@ -258,33 +261,33 @@ public abstract class SubsystemTest exte
 			fail("Class " + clazz + " from bundle " + bundle + " should be loadable");
 		}
 	}
-	
+
 	protected void assertConstituent(Subsystem subsystem, String symbolicName) {
 		assertConstituent(subsystem, symbolicName, Version.emptyVersion);
 	}
-	
+
 	protected void assertConstituent(Subsystem subsystem, String symbolicName, Version version) {
 		assertConstituent(subsystem, symbolicName, version, IdentityNamespace.TYPE_BUNDLE);
 	}
-	
+
 	protected void assertContituent(Subsystem subsystem, String symbolicName, String type) {
 		assertConstituent(subsystem, symbolicName, Version.emptyVersion, type);
 	}
-	
+
 	protected Resource assertConstituent(Subsystem subsystem, String symbolicName, Version version, String type) {
 		Resource constituent = getConstituent(subsystem, symbolicName, version, type);
 		assertNotNull("Constituent not found: " + symbolicName + ';' + version + ';' + type, constituent);
 		return constituent;
 	}
-	
+
 	protected void assertConstituents(int size, Subsystem subsystem) {
 		assertEquals("Wrong number of constituents", size, subsystem.getConstituents().size());
 	}
-	
+
  	protected void assertEvent(Subsystem subsystem, Subsystem.State state) throws InterruptedException {
  		assertEvent(subsystem, state, 0);
  	}
- 	
+
  	protected void assertEvent(Subsystem subsystem, Subsystem.State state, long timeout) throws InterruptedException {
  		assertEvent(subsystem, state, subsystemEvents.poll(subsystem.getSubsystemId(), timeout));
  	}
@@ -294,7 +297,7 @@ public abstract class SubsystemTest exte
  		else
  			assertEvent(subsystem, state, event, ServiceEvent.MODIFIED);
  	}
-	
+
 	protected void assertEvent(Subsystem subsystem, Subsystem.State state, SubsystemEventHandler.ServiceEventInfo event, int type) {
 		// TODO Could accept a ServiceRegistration as an argument and verify it against the one in the event.
 		assertNotNull("No event", event);
@@ -305,64 +308,64 @@ public abstract class SubsystemTest exte
 		assertEquals("Wrong state", state, event.getState());
 		assertEquals("Wrong event type", type, event.getEventType());
 	}
-	
+
 	protected String assertHeaderExists(Subsystem subsystem, String name) {
 		String header = subsystem.getSubsystemHeaders(null).get(name);
 		assertNotNull("Missing header: " + name, header);
 		return header;
 	}
-	
+
 	protected void assertId(Subsystem subsystem) {
 		assertId(subsystem.getSubsystemId());
 	}
-	
+
 	protected void assertId(Long id) {
 		assertTrue("Subsystem ID was not a positive integer: " + id, id > 0);
 	}
-	
+
 	protected void assertLastId(long id) throws Exception {
 		Subsystem root = getRootSubsystem();
 		Field lastId = SubsystemIdentifier.class.getDeclaredField("lastId");
 		lastId.setAccessible(true);
 		assertEquals("Wrong lastId", id, lastId.getLong(root));
 	}
-	
+
 	protected void resetLastId() throws Exception {
 		Field lastId = SubsystemIdentifier.class.getDeclaredField("lastId");
 		lastId.setAccessible(true);
 		lastId.setInt(SubsystemIdentifier.class, 0);
 	}
-	
+
 	protected void assertLocation(String expected, String actual) {
 		assertTrue("Wrong location: " + actual, actual.indexOf(expected) != -1);
 	}
-	
+
 	protected void assertLocation(String expected, Subsystem subsystem) {
 		assertLocation(expected, subsystem.getLocation());
 	}
-	
+
 	protected void assertNotChild(Subsystem parent, Subsystem child) {
 		assertFalse("Parent contained child", parent.getChildren().contains(child));
 	}
-	
+
 	protected void assertNotConstituent(Subsystem subsystem, String symbolicName) {
 		assertNotConstituent(subsystem, symbolicName, Version.emptyVersion, IdentityNamespace.TYPE_BUNDLE);
 	}
-	
+
 	protected void assertNotConstituent(Subsystem subsystem, String symbolicName, Version version, String type) {
 		Resource constituent = getConstituent(subsystem, symbolicName, version, type);
 		assertNull("Constituent found: " + symbolicName + ';' + version + ';' + type, constituent);
 	}
-	
+
 	protected void assertParent(Subsystem expected, Subsystem subsystem) {
 		for (Subsystem parent : subsystem.getParents()) {
 			if (parent.equals(expected))
 				return;
-			
+
 		}
 		fail("Parent did not exist: " + expected.getSymbolicName());
 	}
-	
+
 	protected void assertProvisionPolicy(Subsystem subsystem, boolean acceptsDependencies) {
 		String headerStr = subsystem.getSubsystemHeaders(null).get(SubsystemConstants.SUBSYSTEM_TYPE);
 		assertNotNull("Missing subsystem type header", headerStr);
@@ -373,7 +376,7 @@ public abstract class SubsystemTest exte
 		else
 			assertTrue("Subsystem accepts dependencies", directive.isRejectDependencies());
 	}
-	
+
 	protected void assertRefresh(Collection<Bundle> bundles) throws InterruptedException {
 		FrameworkWiring wiring = getSystemBundleAsFrameworkWiring();
 		final AtomicBoolean refreshed = new AtomicBoolean(false);
@@ -393,12 +396,12 @@ public abstract class SubsystemTest exte
 		}
 		assertTrue("Bundles not refreshed", refreshed.get());
 	}
-	
+
 	protected void assertRefreshAndResolve(Collection<Bundle> bundles) throws InterruptedException {
 		assertRefresh(bundles);
 		assertResolve(bundles);
 	}
-	
+
 	protected void assertRegionContextBundle(Subsystem s) {
 		Bundle b = getRegionContextBundle(s);
 		assertEquals("Not active", Bundle.ACTIVE, b.getState());
@@ -407,59 +410,59 @@ public abstract class SubsystemTest exte
 		assertEquals("Wrong version", Version.parseVersion("1.0.0"), b.getVersion());
 		assertConstituent(s, "org.osgi.service.subsystem.region.context." + s.getSubsystemId(), Version.parseVersion("1.0.0"), IdentityNamespace.TYPE_BUNDLE);
 	}
-	
+
 	protected void assertResolve(Collection<Bundle> bundles) {
 		FrameworkWiring wiring = getSystemBundleAsFrameworkWiring();
 		assertTrue("Bundles not resolved", wiring.resolveBundles(bundles));
 	}
-	
+
 	protected void assertServiceEventsInstall(Subsystem subsystem) throws InterruptedException {
 		assertEvent(subsystem, Subsystem.State.INSTALLING, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 		assertEvent(subsystem, Subsystem.State.INSTALLED, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 	}
-	
+
 	protected void assertServiceEventsResolve(Subsystem subsystem) throws InterruptedException {
 		assertEvent(subsystem, Subsystem.State.RESOLVING, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 		assertServiceEventResolved(subsystem, ServiceEvent.MODIFIED);
 	}
-	
+
 	protected void assertServiceEventsStart(Subsystem subsystem) throws InterruptedException {
 		assertEvent(subsystem, Subsystem.State.STARTING, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 		assertEvent(subsystem, Subsystem.State.ACTIVE, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 	}
-	
+
 	protected void assertServiceEventsStop(Subsystem subsystem) throws InterruptedException {
 		assertEvent(subsystem, Subsystem.State.STOPPING, subsystemEvents.poll(subsystem.getSubsystemId(), 5000));
 		assertServiceEventResolved(subsystem, ServiceEvent.MODIFIED);
 		// Don't forget about the unregistering event, which will have the same state as before.
 		assertServiceEventResolved(subsystem, ServiceEvent.UNREGISTERING);
 	}
-	
+
 	protected void assertServiceEventResolved(Subsystem subsystem, int type) throws InterruptedException {
 		assertEvent(subsystem, Subsystem.State.RESOLVED, subsystemEvents.poll(subsystem.getSubsystemId(), 5000), type);
 	}
-	
+
 	protected void assertStartLevel(Bundle bundle, int expected) {
 		assertNotNull("Bundle is null", bundle);
-		assertEquals("Wrong start level", expected, ((BundleStartLevel) bundle.adapt(BundleStartLevel.class)).getStartLevel());
+		assertEquals("Wrong start level", expected, bundle.adapt(BundleStartLevel.class).getStartLevel());
 	}
-	
+
 	protected void assertState(State expected, State actual) {
 		assertState(EnumSet.of(expected), actual);
 	}
-	
+
 	protected void assertState(EnumSet<State> expected, State actual) {
 		assertTrue("Wrong state: expected=" + expected + ", actual=" + actual, expected.contains(actual));
 	}
-	
+
 	protected void assertState(State expected, Subsystem subsystem) {
 		assertState(expected, subsystem.getState());
 	}
-	
+
 	protected void assertState(EnumSet<State> expected, Subsystem subsystem) {
 		assertState(expected, subsystem.getState());
 	}
-	
+
 	protected Subsystem assertSubsystemLifeCycle(File file) throws Exception {
 		Subsystem rootSubsystem = context().getService(Subsystem.class);
         assertNotNull("Root subsystem was null", rootSubsystem);
@@ -486,47 +489,47 @@ public abstract class SubsystemTest exte
 		assertNotChild(rootSubsystem, subsystem);
 		return subsystem;
 	}
-	
+
 	protected void assertSubsystemNotNull(Subsystem subsystem) {
 		assertNotNull("Subsystem was null", subsystem);
 	}
-	
+
 	protected void assertSymbolicName(String expected, Subsystem subsystem) {
 		assertSymbolicName(expected, subsystem.getSymbolicName());
 	}
-	
+
 	protected void assertSymbolicName(String expected, String actual) {
 		assertEquals("Wrong symbolic name", expected, actual);
 	}
-	
+
 	protected void assertType(String expected, Subsystem subsystem) {
 		assertEquals("Wrong type", expected, subsystem.getType());
 	}
-	
+
 	protected void assertVersion(String expected, Subsystem subsystem) {
 		assertVersion(Version.parseVersion(expected), subsystem);
 	}
-	
+
 	protected void assertVersion(Version expected, Subsystem subsystem) {
 		assertVersion(expected, subsystem.getVersion());
 	}
-	
+
 	protected void assertVersion(Version expected, Version actual) {
 		assertEquals("Wrong version", expected, actual);
 	}
-	
+
 	protected Header version(String version) {
 		return new Header(Constants.BUNDLE_VERSION, version);
 	}
-	
+
 	protected Header name(String name) {
 		return new Header(Constants.BUNDLE_SYMBOLICNAME, name);
 	}
-	
+
 	protected Header exportPackage(String exportPackage) {
 		return new Header(Constants.EXPORT_PACKAGE, exportPackage);
 	}
-	
+
 	protected Header importPackage(String importPackage) {
 		return new Header(Constants.IMPORT_PACKAGE, importPackage);
 	}
@@ -534,7 +537,7 @@ public abstract class SubsystemTest exte
 	protected Header requireBundle(String bundleName) {
 		return new Header(Constants.REQUIRE_BUNDLE, bundleName);
 	}
-	
+
 	protected Header requireCapability(String capability) {
 		return new Header(Constants.REQUIRE_CAPABILITY, capability);
 	}
@@ -553,8 +556,8 @@ public abstract class SubsystemTest exte
 		}
 		createBundle(emptyFiles, headerMap);
 	}
-	
-	private static void createBundle(List<String> emptyFiles, Map<String, String> headers) throws IOException 
+
+	private static void createBundle(List<String> emptyFiles, Map<String, String> headers) throws IOException
 	{
 		String symbolicName = headers.get(Constants.BUNDLE_SYMBOLICNAME);
 		JarFixture bundle = ArchiveFixture.newJar();
@@ -567,22 +570,22 @@ public abstract class SubsystemTest exte
 		}
 		write(symbolicName, bundle);
 	}
-	
+
 	protected static void createBlueprintBundle(String symbolicName, String blueprintXml)
 			throws IOException {
 		write(symbolicName,
 				ArchiveFixture.newJar().manifest().symbolicName(symbolicName)
 						.end().file("OSGI-INF/blueprint/blueprint.xml", blueprintXml));
 	}
-	
+
 	private RepositoryContent createBundleRepositoryContent(String file) throws Exception {
 		return createBundleRepositoryContent(new File(file));
 	}
-	
+
 	private RepositoryContent createBundleRepositoryContent(File file) throws Exception {
 		return new BundleResource(FileSystem.getFSRoot(file));
 	}
-	
+
 	protected static void createManifest(String name, Map<String, String> headers) throws IOException {
 		ManifestFixture manifest = ArchiveFixture.newJar().manifest();
 		for (Entry<String, String> header : headers.entrySet()) {
@@ -590,7 +593,7 @@ public abstract class SubsystemTest exte
 		}
 		write(name, manifest);
 	}
-	
+
 	protected static void createSubsystem(String name, String...contents) throws IOException {
 		File manifest = new File(name + ".mf");
 		ZipFixture fixture = ArchiveFixture.newZip();
@@ -605,20 +608,20 @@ public abstract class SubsystemTest exte
 		}
 		write(name, fixture);
 	}
-	
+
 	protected Subsystem findSubsystemService(long id) throws InvalidSyntaxException {
 		String filter = "(" + SubsystemConstants.SUBSYSTEM_ID_PROPERTY + "=" + id + ")";
 		return context().getService(Subsystem.class, filter, 5000);
 	}
-	
+
 	protected Subsystem getChild(Subsystem parent, String symbolicName) {
 		return getChild(parent, symbolicName, null, null);
 	}
-	
+
 	protected Subsystem getChild(Subsystem parent, String symbolicName, Version version) {
 		return getChild(parent, symbolicName, version, null);
 	}
-	
+
 	protected Subsystem getChild(Subsystem parent, String symbolicName, Version version, String type) {
 		for (Subsystem child : parent.getChildren()) {
 			if (symbolicName.equals(child.getSymbolicName())) {
@@ -635,31 +638,31 @@ public abstract class SubsystemTest exte
 		}
 		return null;
 	}
-	
+
 	public static Object getIdentityAttribute(Resource resource, String name) {
 	    List<Capability> capabilities = resource.getCapabilities(IdentityNamespace.IDENTITY_NAMESPACE);
         Capability capability = capabilities.get(0);
         return capability.getAttributes().get(name);
     }
-	
+
 	public static String getSymbolicNameAttribute(Resource resource) {
         return (String)getIdentityAttribute(resource, IdentityNamespace.IDENTITY_NAMESPACE);
     }
-	
+
    public static Version getVersionAttribute(Resource resource) {
         Version result = (Version)getIdentityAttribute(resource, IdentityNamespace.CAPABILITY_VERSION_ATTRIBUTE);
         if (result == null)
             result = Version.emptyVersion;
         return result;
     }
-   
+
    public static String getTypeAttribute(Resource resource) {
        String result = (String)getIdentityAttribute(resource, IdentityNamespace.CAPABILITY_TYPE_ATTRIBUTE);
        if (result == null)
            result = TypeAttribute.DEFAULT_VALUE;
        return result;
    }
-	
+
    protected Resource getConstituent(Subsystem subsystem, String symbolicName, Version version, String type) {
 		for (Resource resource : subsystem.getConstituents()) {
 			if (symbolicName.equals(getSymbolicNameAttribute(resource))) {
@@ -676,26 +679,26 @@ public abstract class SubsystemTest exte
 		}
 		return null;
 	}
-	
+
 	protected AriesSubsystem getConstituentAsAriesSubsystem(Subsystem subsystem, String symbolicName, Version version, String type) {
 		Resource resource = getConstituent(subsystem, symbolicName, version, type);
 		return (AriesSubsystem)resource;
 	}
-	
+
 	protected Bundle getConstituentAsBundle(Subsystem subsystem, String symbolicName, Version version, String type) {
 		return getConstituentAsBundleRevision(subsystem, symbolicName, version, type).getBundle();
 	}
-	
+
 	protected BundleRevision getConstituentAsBundleRevision(Subsystem subsystem, String symbolicName, Version version, String type) {
 		Resource resource = getConstituent(subsystem, symbolicName, version, type);
 		return (BundleRevision)resource;
 	}
-	
+
 	protected Subsystem getConstituentAsSubsystem(Subsystem subsystem, String symbolicName, Version version, String type) {
 		Resource resource = getConstituent(subsystem, symbolicName, version, type);
 		return (Subsystem)resource;
 	}
-	
+
 	protected Region getRegion(Subsystem subsystem) {
 		RegionDigraph digraph = context().getService(RegionDigraph.class);
 		String name = getRegionName(subsystem);
@@ -703,27 +706,27 @@ public abstract class SubsystemTest exte
 		assertNotNull("Region not found: " + name, region);
 		return region;
 	}
-	
+
 	protected Bundle getRegionContextBundle(Subsystem subsystem) {
 		BundleContext bc = subsystem.getBundleContext();
 		assertNotNull("No region context bundle", bc);
 		return bc.getBundle();
 	}
-	
+
 	protected String getRegionName(Subsystem subsystem) {
 		if (subsystem.getSubsystemId() == 0)
 			return "org.eclipse.equinox.region.kernel";
 		return subsystem.getSymbolicName() + ';' + subsystem.getVersion() + ';' + subsystem.getType() + ';' + subsystem.getSubsystemId();
 	}
-	
+
 	protected AriesSubsystem getRootAriesSubsystem() {
 		return context().getService(AriesSubsystem.class);
 	}
-	
+
 	protected Subsystem getRootSubsystem() {
 		return context().getService(Subsystem.class, "(subsystem.id=0)");
 	}
-	
+
 	protected Subsystem getRootSubsystemInState(Subsystem.State state, long timeout) throws InterruptedException {
 		Subsystem root = getRootSubsystem();
 		long now = System.currentTimeMillis();
@@ -734,71 +737,71 @@ public abstract class SubsystemTest exte
 			fail("Root subsystem never achieved state: " + state);
 		return root;
 	}
-	
+
 	protected Bundle getSystemBundle() {
 		return bundleContext.getBundle(Constants.SYSTEM_BUNDLE_LOCATION);
 	}
-	
+
 	protected FrameworkStartLevel getSystemBundleAsFrameworkStartLevel() {
-		return (FrameworkStartLevel) getSystemBundle().adapt(FrameworkStartLevel.class);
+		return getSystemBundle().adapt(FrameworkStartLevel.class);
 	}
-	
+
 	protected FrameworkWiring getSystemBundleAsFrameworkWiring() {
-		return (FrameworkWiring) getSystemBundle().adapt(FrameworkWiring.class);
+		return getSystemBundle().adapt(FrameworkWiring.class);
 	}
-	
+
 	protected Bundle getSubsystemCoreBundle() {
 		return context().getBundleByName(SUBSYSTEM_CORE_NAME);
 	}
-	
+
 	protected Bundle installBundleFromFile(String fileName) throws FileNotFoundException, BundleException {
 		return installBundleFromFile(new File(fileName), getRootSubsystem());
 	}
-	
+
 	protected Bundle installBundleFromFile(String fileName, Subsystem subsystem) throws FileNotFoundException, BundleException {
 		return installBundleFromFile(new File(fileName), subsystem);
 	}
-	
+
 	private Bundle installBundleFromFile(File file, Subsystem subsystem) throws FileNotFoundException, BundleException {
 		Bundle bundle = installBundleFromFile(file, subsystem.getBundleContext());
 		assertBundleState(Bundle.INSTALLED|Bundle.RESOLVED, bundle.getSymbolicName(), subsystem);
 		return bundle;
 	}
-	
+
 	private Bundle installBundleFromFile(File file, BundleContext bundleContext) throws FileNotFoundException, BundleException {
 		// The following input stream is closed by the bundle context.
 		return bundleContext.installBundle(file.toURI().toString(), new FileInputStream(file));
 	}
-	
+
 	protected Subsystem installSubsystemFromFile(Subsystem parent, String fileName) throws Exception {
 		return installSubsystemFromFile(parent, new File(fileName));
 	}
-	
+
 	protected Subsystem installSubsystemFromFile(String fileName) throws Exception {
 		return installSubsystemFromFile(new File(fileName));
 	}
-	
+
 	protected Subsystem installSubsystemFromFile(Subsystem parent, File file) throws Exception {
 		return installSubsystem(parent, file.toURI().toURL().toExternalForm());
 	}
-	
+
 	private Subsystem installSubsystemFromFile(File file) throws Exception {
 		return installSubsystem(getRootSubsystem(), file.toURI().toURL().toExternalForm());
 	}
-	
+
 	protected Subsystem installSubsystem(String location) throws Exception {
 		return installSubsystem(getRootSubsystem(), location);
 	}
-	
+
 	protected Subsystem installSubsystem(String location, InputStream content) throws Exception {
 		return installSubsystem(getRootSubsystem(), location, content);
 	}
-	
+
 	protected Subsystem installSubsystem(Subsystem parent, String location) throws Exception {
 		// The following input stream is closed by Subsystem.install.
 		return installSubsystem(parent, location, new URL(location).openStream());
 	}
-	
+
 	protected Subsystem installSubsystem(Subsystem parent, String location, InputStream content) throws Exception {
 		subsystemEvents.clear();
 		Subsystem subsystem = parent.install(location, content);
@@ -815,12 +818,12 @@ public abstract class SubsystemTest exte
 //		assertDirectory(subsystem);
 		return subsystem;
 	}
-	
+
 	protected void registerRepositoryService(Repository repository) {
 		serviceRegistrations.add(bundleContext.registerService(
 				Repository.class, repository, null));
 	}
-	
+
 	protected void registerRepositoryService(Resource...resources) {
 		TestRepository.Builder builder = new TestRepository.Builder();
 		for (Resource resource : resources) {
@@ -828,7 +831,7 @@ public abstract class SubsystemTest exte
 		}
 		registerRepositoryService(builder.build());
 	}
-	
+
 	protected void registerRepositoryService(String...files) throws Exception {
 		Resource[] resources = new Resource[files.length];
 		int i = 0;
@@ -837,26 +840,26 @@ public abstract class SubsystemTest exte
 		}
 		registerRepositoryService(resources);
 	}
-	
+
 	protected void restartSubsystemsImplBundle() throws BundleException {
 		Bundle b = getSubsystemCoreBundle();
 		b.stop();
 		b.start();
 	}
-	
+
 	protected void startBundle(Bundle bundle) throws BundleException {
 		startBundle(bundle, getRootSubsystem());
 	}
-	
+
 	protected void startBundle(Bundle bundle, Subsystem subsystem) throws BundleException {
 		bundle.start();
 		assertBundleState(Bundle.ACTIVE, bundle.getSymbolicName(), subsystem);
 	}
-	
+
 	protected void startSubsystem(Subsystem subsystem) throws Exception {
 		startSubsystemFromInstalled(subsystem);
 	}
-	
+
 	protected void startSubsystemFromInstalled(Subsystem subsystem) throws InterruptedException {
 		assertState(State.INSTALLED, subsystem);
 		subsystemEvents.clear();
@@ -867,7 +870,7 @@ public abstract class SubsystemTest exte
 		assertEvent(subsystem, State.ACTIVE, 5000);
 		assertState(State.ACTIVE, subsystem);
 	}
-	
+
 	protected void startSubsystemFromResolved(Subsystem subsystem) throws InterruptedException {
 		assertState(State.RESOLVED, subsystem);
 		subsystemEvents.clear();
@@ -876,12 +879,12 @@ public abstract class SubsystemTest exte
 		assertEvent(subsystem, State.ACTIVE, 5000);
 		assertState(State.ACTIVE, subsystem);
 	}
-	
+
 	protected void stopAndUninstallSubsystemSilently(Subsystem subsystem) {
 		stopSubsystemSilently(subsystem);
 		uninstallSubsystemSilently(subsystem);
 	}
-	
+
 	protected void stopSubsystem(Subsystem subsystem) throws Exception {
 		assertState(State.ACTIVE, subsystem);
 		subsystemEvents.clear();
@@ -890,7 +893,7 @@ public abstract class SubsystemTest exte
 		assertEvent(subsystem, State.RESOLVED, 5000);
 		assertState(State.RESOLVED, subsystem);
 	}
-	
+
 	protected void stopSubsystemSilently(Subsystem subsystem) {
 		try {
 			stopSubsystem(subsystem);
@@ -899,7 +902,7 @@ public abstract class SubsystemTest exte
 			t.printStackTrace();
 		}
 	}
-	
+
 	protected void uninstallSilently(Bundle bundle) {
 		if (bundle == null)
 			return;
@@ -908,7 +911,7 @@ public abstract class SubsystemTest exte
 		}
 		catch (Exception e) {}
 	}
-	
+
 	protected void uninstallSubsystem(Subsystem subsystem) throws Exception {
 		assertState(EnumSet.of(State.INSTALLED, State.RESOLVED), subsystem);
 		subsystemEvents.clear();
@@ -937,7 +940,7 @@ public abstract class SubsystemTest exte
 			assertNull("Region not removed", digraph.getRegion(region.getName()));
 		}
 	}
-	
+
 	protected void uninstallSubsystemSilently(Subsystem subsystem) {
 		if (subsystem == null)
 			return;
@@ -948,7 +951,7 @@ public abstract class SubsystemTest exte
 			t.printStackTrace();
 		}
 	}
-	
+
 	protected void writeToFile(InputStream is, String name) {
         try {
             FileOutputStream dest = new FileOutputStream(name);
@@ -958,11 +961,11 @@ public abstract class SubsystemTest exte
         }
     }
 
-    protected static void write(String file, ArchiveFixture.AbstractFixture fixture) throws IOException 
+    protected static void write(String file, ArchiveFixture.AbstractFixture fixture) throws IOException
 	{
 		write(new File(file), fixture);
 	}
-	
+
 	private static void write(File file, ArchiveFixture.AbstractFixture fixture) throws IOException {
 		FileOutputStream fos = new FileOutputStream(file);
     	try {
@@ -972,8 +975,8 @@ public abstract class SubsystemTest exte
     		fos.close();
     	}
 	}
-	
-	static void createApplication(String name, String ... contents) throws Exception 
+
+	static void createApplication(String name, String ... contents) throws Exception
 	{
 		ClassLoader cl = SubsystemTest.class.getClassLoader();
         ZipFixture feature = ArchiveFixture
@@ -1000,13 +1003,13 @@ public abstract class SubsystemTest exte
 			Utils.closeQuietly(fos);
 		}
 	}
-	
+
 	protected static String normalizeBundleLocation(String location) {
 		if (location.startsWith("initial@"))
 			return location.substring(8);
 		return location;
 	}
-	
+
 	protected InputStream getResource(String path) {
 	    InputStream is = this.getClass().getClassLoader().getResourceAsStream(path);
 	    if (is == null) {

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/OSGI-INF/SUBSYSTEM.MF?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/OSGI-INF/SUBSYSTEM.MF Tue Dec  2 15:38:38 2014
@@ -0,0 +1,5 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.cmContent
+Subsystem-Type: osgi.subsystem.feature
+Subsystem-Content: com.blah.Blah;embedded-resource=com.blah.Blah.cfg;type=osgi.config.properties,
+ org.foo.Bar;embedded-resource=org.foo.Bar.cfg;type=felix.cm.config,
+ org.apache.aries.subsystem.itests.cmcontent.impl

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/com.blah.Blah.cfg
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/com.blah.Blah.cfg?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/com.blah.Blah.cfg (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/com.blah.Blah.cfg Tue Dec  2 15:38:38 2014
@@ -0,0 +1,2 @@
+configVal = test2
+configVal2 = test123

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/org.foo.Bar.cfg
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/org.foo.Bar.cfg?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/org.foo.Bar.cfg (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/cmContent/org.foo.Bar.cfg Tue Dec  2 15:38:38 2014
@@ -0,0 +1 @@
+configVal="test"

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/OSGI-INF/SUBSYSTEM.MF?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/OSGI-INF/SUBSYSTEM.MF Tue Dec  2 15:38:38 2014
@@ -0,0 +1,4 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.customContent
+Subsystem-Type: osgi.subsystem.feature
+Subsystem-Content: customContent1;embedded-resource=custom1.sausages;type=foo.sausages,
+ org.apache.aries.subsystem.itests.customcontent.bundleA

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/custom1.sausages
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/custom1.sausages?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/custom1.sausages (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent/custom1.sausages Tue Dec  2 15:38:38 2014
@@ -0,0 +1 @@
+sausages = 1

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/OSGI-INF/SUBSYSTEM.MF?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/OSGI-INF/SUBSYSTEM.MF Tue Dec  2 15:38:38 2014
@@ -0,0 +1,4 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.customContent
+Subsystem-Type: osgi.subsystem.feature
+Subsystem-Content: customContent2;embedded-resource=custom2.sausages;type=foo.sausages,
+ org.apache.aries.subsystem.itests.customcontent.bundleB

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/custom2.sausages
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/custom2.sausages?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/custom2.sausages (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent1/custom2.sausages Tue Dec  2 15:38:38 2014
@@ -0,0 +1 @@
+sausages = 2

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/OSGI-INF/SUBSYSTEM.MF?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/OSGI-INF/SUBSYSTEM.MF Tue Dec  2 15:38:38 2014
@@ -0,0 +1,4 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.customContent
+Subsystem-Type: osgi.subsystem.feature
+Subsystem-Content: customContent3;embedded-resource=custom3.sausages;type=foo.sausages,
+ org.apache.aries.subsystem.itests.customcontent.bundleC

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/custom3.sausages
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/custom3.sausages?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/custom3.sausages (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent2/custom3.sausages Tue Dec  2 15:38:38 2014
@@ -0,0 +1 @@
+sausages = 3

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/OSGI-INF/SUBSYSTEM.MF
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/OSGI-INF/SUBSYSTEM.MF?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/OSGI-INF/SUBSYSTEM.MF (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/OSGI-INF/SUBSYSTEM.MF Tue Dec  2 15:38:38 2014
@@ -0,0 +1,4 @@
+Subsystem-SymbolicName: org.apache.aries.subsystem.itests.customContent
+Subsystem-Type: osgi.subsystem.feature
+Subsystem-Content: customContent4;embedded-resource=custom4.sausages;type=foo.sausages,
+ org.apache.aries.subsystem.itests.customcontent.bundleD

Added: aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/custom4.sausages
URL: http://svn.apache.org/viewvc/aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/custom4.sausages?rev=1642910&view=auto
==============================================================================
--- aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/custom4.sausages (added)
+++ aries/trunk/subsystem/subsystem-itests/src/test/resources/customContent3/custom4.sausages Tue Dec  2 15:38:38 2014
@@ -0,0 +1 @@
+sausages = 4