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;
/*
* D) Test that Local Repository takes priority over registered repositories
- Register repository R2
- Using the Root subsystem, install a scoped subsystem with the following content bundles
- Bundle C
- Bundle E
and the following resources in the Local Repository
- Bundle F
- Bundle G
- Verify that bundles F and G got installed into the Root Subsystem
- Verify the wiring of C and E wire to F->x and G->y respectively
- Verify that bundles A and B did not get installed into the Root Subsystem
*/
public class SubsystemDependency_4DTest extends SubsystemDependencyTestBase
{
private static final String SUBSYSTEM_4D = "sdt_application4d.esa";
private Subsystem subsystem;
@Override
public void createApplications() throws Exception {
super.createApplications();
createApplication4d();
registerRepositoryR2();
}
// - Verify that bundles F and G got installed into the Root Subsystem
@Test
public void verifyBundesFandGinstalledIntoRootSubsystem() throws Exception
{
startSubsystem();
verifyBundlesInstalled (bundleContext, "Root", BUNDLE_F, BUNDLE_G);
stopSubsystem();
}
// - Verify the wiring of C and E wire to F->x and G->y respectively
@Test
public void verifyBundleCWiredToPackageXFromBundleF() throws Exception
{
startSubsystem();
verifySinglePackageWiring (subsystem, BUNDLE_C, "x", BUNDLE_F);
stopSubsystem();
}
@Test
public void verifyBundleEWiredToCapability_yFromBundleG() throws Exception
{
startSubsystem();
verifyCapabilityWiring (subsystem, BUNDLE_E, "y", BUNDLE_G);
stopSubsystem();
}
// - Verify that bundles A and B did not get installed into the Root Subsystem
@Test
public void verifyBundlesAandBNotInstalledInRootSubsystem() throws Exception
{
startSubsystem();
Bundle[] bundles = bundleContext.getBundles();
for (Bundle b: bundles) {
assertTrue ("Bundle A should not have been provisioned!", !b.getSymbolicName().equals(BUNDLE_A));
assertTrue ("Bundle B should not have been provisioned!", !b.getSymbolicName().equals(BUNDLE_B));
}
stopSubsystem();
}
// doing this within @Before doesn't work :(
private void startSubsystem() throws Exception
{
subsystem = installSubsystemFromFile(SUBSYSTEM_4D);
startSubsystem(subsystem);
}
private void stopSubsystem() throws Exception
{
stopSubsystem(subsystem);
uninstallSubsystem(subsystem);
}
private static void createApplication4d() throws Exception
{
Map<String, String> attributes = new HashMap<String, String>();
attributes.put(SubsystemConstants.SUBSYSTEM_SYMBOLICNAME, SUBSYSTEM_4D);
attributes.put(SubsystemConstants.SUBSYSTEM_TYPE, SubsystemConstants.SUBSYSTEM_TYPE_APPLICATION);
String appContent = BUNDLE_C + "," + BUNDLE_E;
attributes.put(SubsystemConstants.SUBSYSTEM_CONTENT, appContent);
createManifest(SUBSYSTEM_4D + ".mf", attributes);
createSubsystem(SUBSYSTEM_4D, BUNDLE_F, BUNDLE_G);
}
}