package org.apache.aries.subsystem.ctt.itests;
import static org.junit.Assert.assertTrue;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.service.subsystem.Subsystem;
import org.osgi.service.subsystem.SubsystemConstants;
/*
* First block: section 4A
*
A) Test a transitively closed subsystem deploys no transitive resources
- Register repository R1
- Using the Root subsystem, install a scoped subsystem with the following content bundles and no local repository
- Bundle A
- Bundle B
- Bundle C
- Bundle D
- Bundle E
- 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 subsystem (particularly bundles F and G)
*/
public class SubsystemDependency_4ATest extends SubsystemDependencyTestBase
{
protected static String APPLICATION_A="sdt_application.a.esa";
@Override
public void createApplications() throws Exception {
super.createApplications();
createTestApplicationA();
registerRepositoryR1();
}
@Test
public void verifyBundleCWiredToPackageXFromBundleA() throws Exception
{
Subsystem s = installSubsystemFromFile(APPLICATION_A);
startSubsystem(s);
verifySinglePackageWiring (s, BUNDLE_C, "x", BUNDLE_A);
stopSubsystem(s);
uninstallSubsystem(s);
}
@Test
public void verifyBundleDWiredToBundleA() throws Exception
{
Subsystem s = installSubsystemFromFile(APPLICATION_A);
startSubsystem(s);
verifyRequireBundleWiring (s, BUNDLE_D, BUNDLE_A);
stopSubsystem(s);
uninstallSubsystem(s);
}
@Test
public void verifyBundleEWiredToCapability_yFromBundleB() throws Exception
{
Subsystem s = installSubsystemFromFile (APPLICATION_A);
startSubsystem(s);
verifyCapabilityWiring (s, BUNDLE_E, "y", BUNDLE_B);
stopSubsystem(s);
uninstallSubsystem(s);
}
/*
* Verify no new bundles are installed into the Root subsystem
* (particularly bundles F and G)
*
*/
@Test
public void verifyNoUnexpectedBundlesProvisioned() throws Exception
{
Bundle[] rootBundlesBefore = bundleContext.getBundles();
Subsystem s = installSubsystemFromFile(APPLICATION_A);
startSubsystem(s);
Bundle[] rootBundlesAfter = bundleContext.getBundles();
for (Bundle b: rootBundlesAfter) {
assertTrue ("Bundle F should not have been provisioned!", !b.getSymbolicName().equals(BUNDLE_F));
assertTrue ("Bundle G should not have been provisioned!", !b.getSymbolicName().equals(BUNDLE_G));
}
checkNoNewBundles("SubsystemDependency_4ATest", rootBundlesBefore, rootBundlesAfter);
stopSubsystem(s);
uninstallSubsystem(s);
}
private static void createTestApplicationA() throws Exception
{
Map<String, String> attributes = new HashMap<String, String>();
attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, APPLICATION_A);
attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION);
String appContent = BUNDLE_A +","+ BUNDLE_B + "," + BUNDLE_C
+ "," + BUNDLE_D + "," + BUNDLE_E;
attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent);
createManifest(APPLICATION_A + ".mf", attributes);
createSubsystem(APPLICATION_A);
}
}