blob: 5136a70b05d102db38c5fbc3ed74d0d43582e609 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 EclipseSource
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* EclipseSource - initial contribution
*******************************************************************************/
package org.eclipse.virgo.kernel.deployer.test;
import static org.eclipse.virgo.kernel.deployer.test.PlanDeploymentTests.assertBundlesInstalled;
import static org.eclipse.virgo.kernel.deployer.test.PlanDeploymentTests.assertBundlesNotInstalled;
import static org.eclipse.virgo.kernel.deployer.test.PlanDeploymentTests.getInstalledBsns;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.equinox.region.Region;
import org.eclipse.virgo.nano.deployer.api.core.DeploymentException;
import org.eclipse.virgo.nano.deployer.api.core.DeploymentIdentity;
import org.eclipse.virgo.kernel.deployer.test.util.ArtifactLifecycleEvent;
import org.eclipse.virgo.kernel.deployer.test.util.ArtifactListener;
import org.eclipse.virgo.kernel.deployer.test.util.TestLifecycleEvent;
import org.eclipse.virgo.kernel.install.artifact.InstallArtifactLifecycleListener;
import org.eclipse.virgo.kernel.model.Artifact;
import org.eclipse.virgo.kernel.model.RuntimeArtifactRepository;
import org.eclipse.virgo.util.math.Sets;
import org.junit.After;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
import org.osgi.framework.Version;
// TODO 1c. (transitive dependencies) (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
@Ignore("TODO check 92 of 98 failures")
public class PlanDeploymentWithDAGTests extends AbstractDeployerIntegrationTest {
private static final String BUNDLE_ONE_SYMBOLIC_NAME = "simple.bundle.one";
private static final DeploymentIdentity BUNDLE_ONE_IDENTITY = new DeploymentIdentity() {
private static final long serialVersionUID = 1L;
@Override
public String getType() {
return "bundle";
}
@Override
public String getSymbolicName() {
return BUNDLE_ONE_SYMBOLIC_NAME;
}
@Override
public String getVersion() {
return TEST_APPS_VERSION;
}
};
private static final DeploymentIdentity SHARED_PLAN_IDENTITY = new DeploymentIdentity() {
private static final long serialVersionUID = 1L;
@Override
public String getType() {
return "plan";
}
@Override
public String getSymbolicName() {
return "testAshared";
}
@Override
public String getVersion() {
return "1.0.0";
}
};
private static final String BUNDLE_THREE_SYMBOLIC_NAME = "simple.bundle.three";
private final ArtifactListener artifactListener = new ArtifactListener();
private ServiceRegistration<InstallArtifactLifecycleListener> testInstallArtifactLifecycleListenerServiceRegistration = null;
private RuntimeArtifactRepository ram;
private Region globalRegion;
private Region userRegion;
private Set<ArtifactLifecycleEvent> expectedEventSet;
private DeploymentIdentity bundleId;
private Artifact bundleArtifact;
private DeploymentIdentity planAId;
private Artifact planAArtifact;
private DeploymentIdentity planBId;
private Artifact planBArtifact;
private DeploymentIdentity sharedPlanId;
@Before
public void setUp() throws Exception {
this.testInstallArtifactLifecycleListenerServiceRegistration = this.context.registerService(InstallArtifactLifecycleListener.class,
this.artifactListener, null);
ServiceReference<RuntimeArtifactRepository> runtimeArtifactRepositoryServiceReference = this.context.getServiceReference(RuntimeArtifactRepository.class);
if (runtimeArtifactRepositoryServiceReference != null) {
this.ram = this.context.getService(runtimeArtifactRepositoryServiceReference);
}
Collection<ServiceReference<Region>> globalRegionServiceReferences = this.context.getServiceReferences(Region.class,
"(org.eclipse.virgo.kernel.region.name=global)");
if (globalRegionServiceReferences != null && globalRegionServiceReferences.size() == 1) {
this.globalRegion = this.context.getService(globalRegionServiceReferences.iterator().next());
}
Collection<ServiceReference<Region>> userRegionServiceReferences = this.context.getServiceReferences(Region.class,
"(org.eclipse.virgo.kernel.region.name=org.eclipse.virgo.region.user)");
if (userRegionServiceReferences != null && userRegionServiceReferences.size() == 1) {
this.userRegion = this.context.getService(userRegionServiceReferences.iterator().next());
}
this.expectedEventSet = new HashSet<>();
this.bundleId = null;
this.bundleArtifact = null;
this.planAId = null;
this.planAArtifact = null;
this.planBId = null;
this.planBArtifact = null;
clearEvents();
}
@After
public void tearDown() throws Exception {
if (this.testInstallArtifactLifecycleListenerServiceRegistration != null) {
this.testInstallArtifactLifecycleListenerServiceRegistration.unregister();
this.testInstallArtifactLifecycleListenerServiceRegistration = null;
}
if (this.planAArtifact != null) {
this.deployer.undeploy(this.planAId);
}
if (this.planBArtifact != null) {
this.deployer.undeploy(this.planBId);
}
if (this.bundleArtifact != null) {
this.deployer.undeploy(this.bundleId);
}
}
@Test
// 1a. (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
public void planReferencingAnAlreadyInstalledBundle() throws Exception {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
}
@Test
// 1a. (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
public void planReferencingAnAlreadyInstalledBundleUndeployBundleFirst() throws Exception {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity bundleDeploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity planDeploymentId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertNoDuplicatesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(bundleDeploymentId.getType(), bundleDeploymentId.getSymbolicName(), bundleDeploymentId.getVersion());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(planDeploymentId);
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
}
@Test
// 1a. (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
public void planReferencingAnAlreadyInstalledBundleUndeployPlanFirst() throws Exception {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertNoDuplicatesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
}
private void assertNoDuplicatesInstalled(Bundle[] bundles, String bundleOneSymbolicName) {
List<String> installedBsns = getInstalledBsns(bundles);
int found = 0;
for (String installedBsn : installedBsns) {
if (installedBsn.contains(bundleOneSymbolicName)) {
found++;
}
}
assertTrue("Too many bundles '" + bundleOneSymbolicName + "' found. Should be shared.", found <= 1);
}
@Test
// 1b. (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
public void twoPlansReferencingASharedBundle() throws Exception {
DeploymentIdentity deploymentIdentityPlanA = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentityPlanB = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicB.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentityPlanB);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentityPlanA);
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
}
@Test
// 2. (1a. / 1b) (@see https://bugs.eclipse.org/bugs/show_bug.cgi?id=365034)
public void bundleAlreadyInstalledAsPartOfAPlan() throws Exception {
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
}
@Test
public void testLifecycleWithTwoPlansReferencingASharedBundle() throws Exception {
DeploymentIdentity deploymentIdentityPlanA = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentityPlanB = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicB.plan").toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentityPlanB);
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentityPlanA);
}
@Test
public void testLifecycleWithPlanReferencingAnAlreadyInstalledBundleUndeployBundleFirst() throws Exception {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
assertBundlesInState(Bundle.RESOLVED, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
}
@Test
public void testLifecycleWithPlanReferencingAnAlreadyInstalledBundleUndeployPlanFirst() throws Exception {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
assertBundlesInState(Bundle.ACTIVE, this.context.getBundles(), BUNDLE_ONE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
}
@Test
public void planReferencingAnAlreadyInstalledBundleNotInRepository() throws Exception {
File file = new File("src/test/resources/plan-deployment-dag/simple.bundle.three.jar");
DeploymentIdentity bundleDeploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
DeploymentIdentity planDeploymentId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicC.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(planDeploymentId);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(bundleDeploymentId.getType(), bundleDeploymentId.getSymbolicName(), bundleDeploymentId.getVersion());
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
}
@Test
public void planReferencingAnAlreadyInstalledBundleNotInRepositoryUndeployBundleFirst() throws Exception {
File file = new File("src/test/resources/plan-deployment-dag/simple.bundle.three.jar");
DeploymentIdentity deploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
DeploymentIdentity deploymentIdentity = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicC.plan").toURI());
assertNoDuplicatesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentId.getType(), deploymentId.getSymbolicName(), deploymentId.getVersion());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(deploymentIdentity);
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
}
@Test
public void twoPlansReferencingAnAlreadyInstalledBundleNotInRepository() throws Exception {
File file = new File("src/test/resources/plan-deployment-dag/simple.bundle.three.jar");
DeploymentIdentity bundleDeploymentId = this.deployer.deploy(file.toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
DeploymentIdentity planCDeploymentId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicC.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
DeploymentIdentity planDDeploymentId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicD.plan").toURI());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(planCDeploymentId);
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(bundleDeploymentId.getType(), bundleDeploymentId.getSymbolicName(), bundleDeploymentId.getVersion());
assertBundlesInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
this.deployer.undeploy(planDDeploymentId);
assertBundlesNotInstalled(this.context.getBundles(), BUNDLE_THREE_SYMBOLIC_NAME);
}
// sharedTopLevelBundleActiveActive
@Test
public void sharedTopLevelBundleActiveActiveStartPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
startPlanA();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveActiveStopPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
stopPlanA();
expectPlanAStop();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveActiveUninstallPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
uninstallPlanA();
expectPlanAStop();
expectPlanAUninstall();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveActiveStartBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
startBundle();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveActiveStopBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
stopBundle();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveActiveUninstallBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleActive();
uninstallBundle();
expectBundleStop();
checkEvents();
}
// sharedTopLevelBundleActiveResolved
@Test
public void sharedTopLevelBundleActiveResolvedStartPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
startPlanA();
// no bundle events expected as ACTIVE plan no-ops when started
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveResolvedStopPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
stopPlanA();
expectPlanAStop();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveResolvedUninstallPlan() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
uninstallPlanA();
expectPlanAStop();
expectPlanAUninstall();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveResolvedStartBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
startBundle();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveResolvedStopBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
stopBundle();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveResolvedUninstallBundle() throws Exception {
sharedTopLevelBundlePlanActiveBundleResolved();
uninstallBundle();
checkEvents();
}
// sharedTopLevelBundleResolvedActive
@Test
public void sharedTopLevelBundleResolvedActiveStartPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
startPlanA();
expectPlanAStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedActiveStopPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
stopPlanA();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedActiveUninstallPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
uninstallPlanA();
expectPlanAUninstall();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedActiveStartBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
startBundle();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedActiveStopBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
stopBundle();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedActiveUninstallBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleActive();
uninstallBundle();
expectBundleStop();
checkEvents();
}
// sharedTopLevelBundleResolvedResolved
@Test
public void sharedTopLevelBundleResolvedResolvedStartPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
startPlanA();
expectPlanAStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedStopPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
stopPlanA();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedUninstallPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
uninstallPlanA();
expectPlanAUninstall();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedStartBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
startBundle();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedStopBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
stopBundle();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedUninstallBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
uninstallBundle();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedUninstallBundleUninstallPlan() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
uninstallBundle();
uninstallPlanA();
expectBundleUninstall();
expectPlanAUninstall();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedResolvedUninstallPlanUninstallBundle() throws Exception {
sharedTopLevelBundlePlanResolvedBundleResolved();
uninstallPlanA();
uninstallBundle();
expectPlanAUninstall();
expectBundleUninstall();
checkEvents();
}
// twoPlansReferencingASharedBundleActiveActive
@Test
public void twoPlansReferencingASharedBundleActiveActiveStartPlanB() throws Exception {
sharedBundlePlanAActivePlanBActive();
startPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveActiveStopPlanB() throws Exception {
sharedBundlePlanAActivePlanBActive();
stopPlanB();
expectPlanBStop();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveActiveUninstallPlanB() throws Exception {
sharedBundlePlanAActivePlanBActive();
uninstallPlanB();
expectPlanBStop();
expectPlanBUninstall();
checkEvents();
}
// twoPlansReferencingASharedBundleActiveResolved
@Test
public void twoPlansReferencingASharedBundleActiveResolvedStartPlanB() throws Exception {
sharedBundlePlanAActivePlanBResolved();
startPlanB();
expectPlanBStart();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveResolvedStopPlanB() throws Exception {
sharedBundlePlanAActivePlanBResolved();
stopPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveResolvedUninstallPlanB() throws Exception {
sharedBundlePlanAActivePlanBResolved();
uninstallPlanB();
expectPlanBUninstall();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveResolvedStartPlanA() throws Exception {
sharedBundlePlanAActivePlanBResolved();
startPlanA();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveResolvedStopPlanA() throws Exception {
sharedBundlePlanAActivePlanBResolved();
stopPlanA();
expectPlanAStop();
expectBundleStop();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleActiveResolvedUninstallPlanA() throws Exception {
sharedBundlePlanAActivePlanBResolved();
uninstallPlanA();
expectPlanAStop();
expectPlanAUninstall();
expectBundleStop();
checkEvents();
}
// twoPlansReferencingASharedBundleResolvedResolved
@Test
public void twoPlansReferencingASharedBundleResolvedResolvedStartPlanB() throws Exception {
sharedBundlePlanAResolvedPlanBResolved();
startPlanB();
expectPlanBStart();
expectBundleStart();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleResolvedResolvedStopPlanB() throws Exception {
sharedBundlePlanAResolvedPlanBResolved();
stopPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleResolvedResolvedUninstallPlanB() throws Exception {
sharedBundlePlanAResolvedPlanBResolved();
uninstallPlanB();
expectPlanBUninstall();
checkEvents();
}
@Test
public void twoPlansReferencingASharedBundleResolvedResolvedUninstallPlanAUninstallPlanB() throws Exception {
sharedBundlePlanAResolvedPlanBResolved();
uninstallPlanA();
uninstallPlanB();
expectPlanAUninstall();
expectPlanBUninstall();
expectBundleUninstall();
checkEvents();
}
// sharedTopLevelPlanActiveActive
@Test
public void sharedTopLevelPlanActiveActiveStartChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
startChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveActiveStopChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
stopChildPlan();
expectChildPlanStop();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveActiveUninstallChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
uninstallChildPlan();
expectChildPlanStop();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveActiveStartParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
startParentPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveActiveStopParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
stopParentPlan();
expectParentPlanStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveActiveUninstallParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentActive();
uninstallParentPlan();
expectParentPlanStop();
expectParentPlanUninstall();
checkEvents();
}
// sharedTopLevelPlanActiveResolved
@Test
public void sharedTopLevelPlanActiveResolvedStartChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
startChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveResolvedStopChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
stopChildPlan();
expectChildPlanStop();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveResolvedUninstallChildPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
uninstallChildPlan();
expectChildPlanStop();
expectBundleStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveResolvedStartParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
startParentPlan();
expectParentPlanStart();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveResolvedStopParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
stopParentPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanActiveResolvedUninstallParentPlan() throws Exception {
sharedTopLevelPlanChildActiveParentResolved();
uninstallParentPlan();
expectParentPlanUninstall();
checkEvents();
}
// sharedTopLevelPlanResolvedActive
@Test
public void sharedTopLevelPlanResolvedActiveStartChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
startChildPlan();
expectChildPlanStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedActiveStopChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
stopChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedActiveUninstallChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
uninstallChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedActiveStartParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
startParentPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedActiveStopParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
stopParentPlan();
expectParentPlanStop();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedActiveUninstallParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentActive();
uninstallParentPlan();
expectParentPlanStop();
expectParentPlanUninstall();
checkEvents();
}
// sharedTopLevelPlanResolvedResolved
@Test
public void sharedTopLevelPlanResolvedResolvedStartChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
startChildPlan();
expectChildPlanStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedStopChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
stopChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedUninstallChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
uninstallChildPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedStartParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
startParentPlan();
expectParentPlanStart();
expectChildPlanStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedStopParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
stopParentPlan();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedUninstallParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
uninstallParentPlan();
expectParentPlanUninstall();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedUninstallParentPlanUninstallChildPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
uninstallParentPlan();
uninstallChildPlan();
expectParentPlanUninstall();
expectChildPlanUninstall();
expectBundleUninstall();
checkEvents();
}
@Test
public void sharedTopLevelPlanResolvedResolvedUninstallChildPlanUninstallParentPlan() throws Exception {
sharedTopLevelPlanChildResolvedParentResolved();
uninstallChildPlan();
uninstallParentPlan();
expectChildPlanUninstall();
expectParentPlanUninstall();
expectBundleUninstall();
checkEvents();
}
// twoPlansReferencingASharedPlanActiveActive
@Test
public void twoPlansReferencingASharedPlanActiveActiveStartPlanB() throws Exception {
sharedPlanPlanAActivePlanBActive();
startPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveActiveStopPlanB() throws Exception {
sharedPlanPlanAActivePlanBActive();
stopPlanB();
expectPlanBStop();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveActiveUninstallPlanB() throws Exception {
sharedPlanPlanAActivePlanBActive();
uninstallPlanB();
expectPlanBStop();
expectPlanBUninstall();
checkEvents();
}
// twoPlansReferencingASharedPlanActiveResolved
@Test
public void twoPlansReferencingASharedPlanActiveResolvedStartPlanB() throws Exception {
sharedPlanPlanAActivePlanBResolved();
startPlanB();
expectPlanBStart();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveResolvedStopPlanB() throws Exception {
sharedPlanPlanAActivePlanBResolved();
stopPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveResolvedUninstallPlanB() throws Exception {
sharedPlanPlanAActivePlanBResolved();
uninstallPlanB();
expectPlanBUninstall();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveResolvedStartPlanA() throws Exception {
sharedPlanPlanAActivePlanBResolved();
startPlanA();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveResolvedStopPlanA() throws Exception {
sharedPlanPlanAActivePlanBResolved();
stopPlanA();
expectPlanAStop();
expectSharedPlanStop();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanActiveResolvedUninstallPlanA() throws Exception {
sharedPlanPlanAActivePlanBResolved();
uninstallPlanA();
expectPlanAStop();
expectPlanAUninstall();
expectSharedPlanStop();
checkEvents();
}
// twoPlansReferencingASharedPlanResolvedResolved
@Test
public void twoPlansReferencingASharedPlanResolvedResolvedStartPlanB() throws Exception {
sharedPlanPlanAResolvedPlanBResolved();
startPlanB();
expectPlanBStart();
expectSharedPlanStart();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanResolvedResolvedStopPlanB() throws Exception {
sharedPlanPlanAResolvedPlanBResolved();
stopPlanB();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanResolvedResolvedUninstallPlanB() throws Exception {
sharedPlanPlanAResolvedPlanBResolved();
uninstallPlanB();
expectPlanBUninstall();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanResolvedResolvedUninstallPlanAUninstallPlanB() throws Exception {
sharedPlanPlanAResolvedPlanBResolved();
uninstallPlanA();
uninstallPlanB();
expectPlanAUninstall();
expectPlanBUninstall();
expectSharedPlanUninstall();
checkEvents();
}
// Some atomic plan variants
@Test
public void sharedTopLevelBundleResolvedAtomicPlanResolvedStartBundle() throws Exception {
deploySimpleBundleOne();
deployUnscopedAtomicPlanA();
stopBundle();
stopPlanA();
clearEvents();
startBundle();
expectPlanAStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleActiveAtomicPlanActiveStopBundle() throws Exception {
deploySimpleBundleOne();
deployUnscopedAtomicPlanA();
clearEvents();
stopBundle();
expectBundleStop();
expectPlanAStop();
checkEvents();
}
@Test
public void twoPlansAtomicNonAtomicReferencingASharedPlanActiveActiveStopPlanB() throws Exception {
deployUnscopedAtomicPlanAParent();
deployUnscopedNonatomicPlanBParent();
this.sharedPlanId = SHARED_PLAN_IDENTITY;
this.bundleId = BUNDLE_ONE_IDENTITY;
clearEvents();
stopPlanB();
expectPlanBStop();
checkEvents();
}
@Test
public void twoPlansAtomicNonAtomicReferencingASharedPlanResolvedResolvedStartPlanB() throws Exception {
deployUnscopedAtomicPlanAParent();
deployUnscopedNonatomicPlanBParent();
this.sharedPlanId = SHARED_PLAN_IDENTITY;
this.bundleId = BUNDLE_ONE_IDENTITY;
stopPlanA();
stopPlanB();
clearEvents();
startPlanB();
expectPlanAStart();
expectPlanBStart();
expectSharedPlanStart();
checkEvents();
}
// Deployment-time lifecycle
@Test
public void sharedTopLevelBundleResolvedDeployPlan() throws Exception {
deploySimpleBundleOne();
stopBundle();
clearEvents();
deployUnscopedNonatomicPlanA();
expectPlanAInstall();
expectPlanAStart();
expectBundleStart();
checkEvents();
}
@Test
public void sharedTopLevelBundleResolvedDeployPlanStopBundle() throws Exception {
deploySimpleBundleOne();
stopBundle();
deployUnscopedNonatomicPlanA();
clearEvents();
stopBundle();
expectBundleStop();
checkEvents();
}
@Test
public void twoPlansReferencingASharedPlanResolvedDeployPlanA() throws Exception {
deployUnscopedNonatomicPlanBParent();
this.sharedPlanId = SHARED_PLAN_IDENTITY;
this.bundleId = BUNDLE_ONE_IDENTITY;
stopPlanB();
clearEvents();
deployUnscopedNonatomicPlanAParent();
expectPlanAInstall();
expectPlanAStart();
expectSharedPlanStart();
checkEvents();
}
// Raw bundle access
@Test
public void rawBundleStop() throws Exception {
deployUnscopedNonatomicPlanA();
deploySimpleBundleOne();
stopPlanA();
Bundle b = getUnderlyingBundle();
b.stop();
clearEvents();
startPlanA();
stopPlanA();
expectPlanAStart();
expectBundleStart();
expectPlanAStop();
// Do not expect bundle stop, since bundle was not stopped via the deployer.
checkEvents();
}
@Test
public void rawBundleStart() throws Exception {
deployUnscopedNonatomicPlanA();
deploySimpleBundleOne();
stopBundle();
Bundle b = getUnderlyingBundle();
b.start();
Thread.sleep(50);
clearEvents();
stopPlanA();
expectPlanAStop();
expectBundleStop(); // since bundle was not started via the deployer
checkEvents();
}
// helper methods
private Bundle getUnderlyingBundle() {
for (Bundle bundle : this.context.getBundles()) {
if (BUNDLE_ONE_SYMBOLIC_NAME.equals(bundle.getSymbolicName()) && (new Version(TEST_APPS_VERSION)).equals(bundle.getVersion())) {
return bundle;
}
}
return null;
}
private void checkEvents() {
waitForAndCheckEventsReceived(this.expectedEventSet, 50L);
}
private void startChildPlan() {
startPlanA();
}
private void stopChildPlan() {
stopPlanA();
}
private void uninstallChildPlan() {
uninstallPlanA();
}
private void startParentPlan() {
startPlanB();
}
private void stopParentPlan() {
stopPlanB();
}
private void uninstallParentPlan() {
uninstallPlanB();
}
private void startPlanA() {
this.planAArtifact.start();
}
private void stopPlanA() {
this.planAArtifact.stop();
}
private void uninstallPlanA() {
this.planAArtifact.uninstall();
this.planAArtifact = null;
}
private void startPlanB() {
this.planBArtifact.start();
}
private void stopPlanB() {
this.planBArtifact.stop();
}
private void uninstallPlanB() {
this.planBArtifact.uninstall();
this.planBArtifact = null;
}
private void startBundle() {
this.bundleArtifact.start();
}
private void stopBundle() {
this.bundleArtifact.stop();
}
private void uninstallBundle() {
this.bundleArtifact.uninstall();
this.bundleArtifact = null;
}
private void expectChildPlanStart() {
expectPlanAStart();
}
private void expectChildPlanStop() {
expectPlanAStop();
}
private void expectChildPlanUninstall() {
expectPlanAUninstall();
}
private void expectParentPlanStart() {
expectPlanBStart();
}
private void expectParentPlanStop() {
expectPlanBStop();
}
private void expectParentPlanUninstall() {
expectPlanBUninstall();
}
private void expectPlanAInstall() {
expectEvent(this.planAId, TestLifecycleEvent.RESOLVING, TestLifecycleEvent.RESOLVED, TestLifecycleEvent.INSTALLING,
TestLifecycleEvent.INSTALLED);
}
private void expectPlanAStart() {
expectEvent(this.planAId, TestLifecycleEvent.STARTING, TestLifecycleEvent.STARTED);
}
private void expectPlanAStop() {
expectEvent(this.planAId, TestLifecycleEvent.STOPPING, TestLifecycleEvent.STOPPED);
}
private void expectPlanAUninstall() {
expectEvent(this.planAId, TestLifecycleEvent.UNINSTALLING, TestLifecycleEvent.UNINSTALLED);
}
private void expectPlanBStart() {
expectEvent(this.planBId, TestLifecycleEvent.STARTING, TestLifecycleEvent.STARTED);
}
private void expectPlanBStop() {
expectEvent(this.planBId, TestLifecycleEvent.STOPPING, TestLifecycleEvent.STOPPED);
}
private void expectPlanBUninstall() {
expectEvent(this.planBId, TestLifecycleEvent.UNINSTALLING, TestLifecycleEvent.UNINSTALLED);
}
private void expectBundleStart() {
expectEvent(this.bundleId, TestLifecycleEvent.STARTING, TestLifecycleEvent.STARTED);
}
private void expectBundleStop() {
expectEvent(this.bundleId, TestLifecycleEvent.STOPPING, TestLifecycleEvent.STOPPED);
}
private void expectBundleUninstall() {
expectEvent(this.bundleId, TestLifecycleEvent.UNRESOLVED, TestLifecycleEvent.UNINSTALLING, TestLifecycleEvent.UNINSTALLED);
}
private void expectSharedPlanStart() {
expectEvent(this.sharedPlanId, TestLifecycleEvent.STARTING, TestLifecycleEvent.STARTED);
expectBundleStart();
}
private void expectSharedPlanStop() {
expectEvent(this.sharedPlanId, TestLifecycleEvent.STOPPING, TestLifecycleEvent.STOPPED);
expectBundleStop();
}
private void expectSharedPlanUninstall() {
expectEvent(this.sharedPlanId, TestLifecycleEvent.UNINSTALLING, TestLifecycleEvent.UNINSTALLED);
expectBundleUninstall();
}
private void deploySharedTopLevelBundle() throws DeploymentException {
deploySimpleBundleOne();
deployUnscopedNonatomicPlanA();
}
private void deployTwoPlansReferencingASharedBundle() throws DeploymentException {
deployUnscopedNonatomicPlanA();
deployUnscopedNonatomicPlanB();
this.bundleId = BUNDLE_ONE_IDENTITY;
}
private void deployTwoPlansReferencingASharedPlan() throws DeploymentException {
deployUnscopedNonatomicPlanAParent();
deployUnscopedNonatomicPlanBParent();
this.sharedPlanId = SHARED_PLAN_IDENTITY;
this.bundleId = BUNDLE_ONE_IDENTITY;
}
private void sharedBundlePlanAActivePlanBActive() throws DeploymentException {
deployTwoPlansReferencingASharedBundle();
clearEvents();
}
private void sharedBundlePlanAActivePlanBResolved() throws DeploymentException {
deployTwoPlansReferencingASharedBundle();
stopPlanB();
clearEvents();
}
private void sharedBundlePlanAResolvedPlanBResolved() throws DeploymentException {
deployTwoPlansReferencingASharedBundle();
stopPlanA();
stopPlanB();
clearEvents();
}
private void sharedPlanPlanAActivePlanBActive() throws DeploymentException {
deployTwoPlansReferencingASharedPlan();
clearEvents();
}
private void sharedPlanPlanAActivePlanBResolved() throws DeploymentException {
deployTwoPlansReferencingASharedPlan();
stopPlanB();
clearEvents();
}
private void sharedPlanPlanAResolvedPlanBResolved() throws DeploymentException {
deployTwoPlansReferencingASharedPlan();
stopPlanA();
stopPlanB();
clearEvents();
}
private void sharedTopLevelBundlePlanActiveBundleActive() throws DeploymentException {
deploySharedTopLevelBundle();
clearEvents();
}
private void sharedTopLevelBundlePlanActiveBundleResolved() throws DeploymentException {
deploySharedTopLevelBundle();
stopBundle();
clearEvents();
}
private void sharedTopLevelBundlePlanResolvedBundleActive() throws DeploymentException {
deploySharedTopLevelBundle();
stopPlanA();
startBundle();
clearEvents();
}
private void sharedTopLevelBundlePlanResolvedBundleResolved() throws DeploymentException {
deploySharedTopLevelBundle();
stopPlanA();
stopBundle();
clearEvents();
}
private void sharedTopLevelPlanChildActiveParentActive() throws DeploymentException {
deploySharedTopLevelPlan();
clearEvents();
}
private void deploySharedTopLevelPlan() throws DeploymentException {
deployUnscopedNonatomicPlanA();
deployUnscopedNonatomicParentPlanB();
this.bundleId = BUNDLE_ONE_IDENTITY;
}
private void deployUnscopedNonatomicParentPlanB() throws DeploymentException {
this.planBId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicBparent.plan").toURI());
this.planBArtifact = getPlanArtifact(this.planBId);
}
private void sharedTopLevelPlanChildActiveParentResolved() throws DeploymentException {
deploySharedTopLevelPlan();
stopParentPlan();
clearEvents();
}
private void sharedTopLevelPlanChildResolvedParentActive() throws DeploymentException {
deploySharedTopLevelPlan();
stopChildPlan();
clearEvents();
}
private void sharedTopLevelPlanChildResolvedParentResolved() throws DeploymentException {
deploySharedTopLevelPlan();
stopParentPlan();
stopChildPlan();
clearEvents();
}
private void clearEvents() {
this.artifactListener.clear();
}
private void deployUnscopedNonatomicPlanA() throws DeploymentException {
this.planAId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicA.plan").toURI());
this.planAArtifact = getPlanArtifact(this.planAId);
}
private void deployUnscopedNonatomicPlanB() throws DeploymentException {
this.planBId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicB.plan").toURI());
this.planBArtifact = getPlanArtifact(this.planBId);
}
private void deployUnscopedNonatomicPlanAParent() throws DeploymentException {
this.planAId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicAparentofsharedplan.plan").toURI());
this.planAArtifact = getPlanArtifact(this.planAId);
}
private void deployUnscopedNonatomicPlanBParent() throws DeploymentException {
this.planBId = this.deployer.deploy(new File("src/test/resources/testunscopednonatomicBparentofsharedplan.plan").toURI());
this.planBArtifact = getPlanArtifact(this.planBId);
}
private void deploySimpleBundleOne() throws DeploymentException {
File file = new File("src/test/resources/plan-deployment/simple.bundle.one.jar");
this.bundleId = this.deployer.deploy(file.toURI());
this.bundleArtifact = getBundleArtifact(this.bundleId);
}
private void deployUnscopedAtomicPlanA() throws DeploymentException {
this.planAId = this.deployer.deploy(new File("src/test/resources/testunscopedatomicA.plan").toURI());
this.planAArtifact = getPlanArtifact(this.planAId);
}
private void deployUnscopedAtomicPlanAParent() throws DeploymentException {
this.planAId = this.deployer.deploy(new File("src/test/resources/testunscopedatomicAparentofsharedplan.plan").toURI());
this.planAArtifact = getPlanArtifact(this.planAId);
}
private void expectEvent(DeploymentIdentity deploymentIdentity, TestLifecycleEvent... events) {
for (TestLifecycleEvent event : events) {
this.expectedEventSet.add(new ArtifactLifecycleEvent(event, deploymentIdentity.getType(), deploymentIdentity.getSymbolicName(),
new Version(deploymentIdentity.getVersion())));
}
}
private Artifact getBundleArtifact(DeploymentIdentity bundleId) {
return this.ram.getArtifact(bundleId.getType(), bundleId.getSymbolicName(), new Version(bundleId.getVersion()), this.userRegion);
}
private Artifact getPlanArtifact(DeploymentIdentity planId) {
return this.ram.getArtifact(planId.getType(), planId.getSymbolicName(), new Version(planId.getVersion()), this.globalRegion);
}
private static void assertBundlesInState(int state, Bundle[] bundles, String... bsns) {
for (String bsn : bsns) {
boolean found = false;
for (Bundle bundle : bundles) {
if (bsn.equals(bundle.getSymbolicName())) {
found = true;
assertEquals(state, bundle.getState());
}
}
assertTrue(found);
}
}
private void waitForAndCheckEventsReceived(Set<ArtifactLifecycleEvent> expectedEventSet, long timeout) {
this.artifactListener.waitForEvents(expectedEventSet, timeout);
Set<ArtifactLifecycleEvent> actualEventSet = new HashSet<>(this.artifactListener.extract());
Set<ArtifactLifecycleEvent> extraEvents = Sets.difference(actualEventSet, expectedEventSet);
Set<ArtifactLifecycleEvent> missingEvents = Sets.difference(expectedEventSet, actualEventSet);
assertTrue(extraEvents.size() + " more events were received than expected: " + extraEvents, extraEvents.isEmpty());
assertTrue(missingEvents.size() + " more events were expected than received: " + missingEvents, missingEvents.isEmpty());
}
}