blob: 24f4ffa97f303c335238023d302a1deec0868f5b [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.felix.deploymentadmin.itest;
import static org.apache.felix.deploymentadmin.itest.util.CertificateUtil.createSelfSignedCert;
import java.io.File;
import java.net.URL;
import org.apache.felix.deploymentadmin.itest.util.CertificateUtil.KeyType;
import org.apache.felix.deploymentadmin.itest.util.CertificateUtil.SignerInfo;
import org.apache.felix.deploymentadmin.itest.util.DeploymentPackageBuilder;
import org.apache.felix.deploymentadmin.itest.util.DeploymentPackageBuilder.JarManifestManipulatingFilter;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.junit.PaxExam;
import org.osgi.framework.Bundle;
import org.osgi.service.deploymentadmin.BundleInfo;
import org.osgi.service.deploymentadmin.DeploymentException;
import org.osgi.service.deploymentadmin.DeploymentPackage;
/**
* Provides test cases regarding the use of "normal" deployment packages in DeploymentAdmin.
*/
@RunWith(PaxExam.class)
public class InstallDeploymentPackageTest extends BaseIntegrationTest {
/**
* FELIX-518 - Test that DP with localization and signature files are properly deployed.
*/
@Test
public void testInstallDeploymentPackageWithLocalizationAndSignatureFilesOk() throws Exception {
URL dpProps = getClass().getResource("/dp.properties");
assertNotNull(dpProps);
SignerInfo signer = createSelfSignedCert("CN=dpTest", KeyType.EC);
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder.signOutput(signer.getPrivate(), signer.getCert())
.add(dpBuilder.createLocalizationResource().setUrl(dpProps).setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setFilename("dp.properties"))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
installDeploymentPackage(dpBuilder); // should succeed.
assertBundleExists("testbundles.bundle1", "1.0.0");
assertBundleExists("testbundles.bundle2", "1.0.0");
assertBundleExists("testbundles.rp1", "1.0.0");
}
/**
* FELIX-4409/4410/4463 - test the installation of an invalid deployment package.
*/
@Test
public void testInstallInvalidDeploymentPackageFail() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
// incluse two different versions of the same bundle (with the same BSN), this is *not* allowed per the DA
// spec...
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundleapi1", "bundleapi1", "1.0.0")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundleapi2", "bundleapi2", "2.0.0")));
try {
installDeploymentPackage(dpBuilder);
fail("DeploymentException expected!");
}
catch (DeploymentException e) {
// Ok; expected...
}
// Verify that none of the bundles are installed...
assertBundleNotExists("testbundles.bundleapi", "1.0.0");
assertBundleNotExists("testbundles.bundleapi", "2.0.0");
}
/**
* FELIX-1835 - test whether we can install bundles with a non-root path inside the DP.
*/
@Test
public void testInstallBundlesWithPathsOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
// incluse two different versions of the same bundle (with the same BSN), this is *not* allowed per the DA
// spec...
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundleapi1", "bundleapi1", "1.0.0")).setFilename("bundles/bundleapi1.jar"))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundleimpl1", "bundleimpl1", "1.0.0")).setFilename("bundles/bundleimpl1.jar"));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull(dp);
BundleInfo[] bundleInfos = dp.getBundleInfos();
assertEquals(2, bundleInfos.length);
// Verify that none of the bundles are installed...
assertBundleExists("testbundles.bundleapi", "1.0.0");
assertBundleExists("testbundles.bundleimpl", "1.0.0");
}
/**
* Tests that adding the dependency for a bundle in an update package causes the depending bundle to be resolved and
* started.
*/
@Test
public void testInstallBundleWithDependencyInPackageUpdateOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
// missing bundle1 as dependency...
dpBuilder.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
DeploymentPackage dp1 = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp1);
awaitRefreshPackagesEvent();
Bundle bundle = dp1.getBundle(getSymbolicName("bundle2"));
assertNotNull("Failed to obtain bundle from deployment package?!", bundle);
assertTrue(isBundleInstalled(dp1.getBundle(getSymbolicName("bundle2"))));
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")));
DeploymentPackage dp2 = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp2);
awaitRefreshPackagesEvent();
assertTrue(isBundleActive(dp2.getBundle(getSymbolicName("bundle1"))));
assertTrue(isBundleActive(dp2.getBundle(getSymbolicName("bundle2"))));
}
/**
* Tests that installing a bundle with a dependency installed by another deployment package is not started, but is
* resolved.
*/
@Test
public void testInstallBundleWithDependencyInSeparatePackageOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
DeploymentPackage dp1 = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp1);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
// We shouldn't be able to resolve the deps for bundle2...
assertFalse(resolveBundles(dp1.getBundle(getSymbolicName("bundle2"))));
assertTrue(isBundleInstalled(dp1.getBundle(getSymbolicName("bundle2"))));
dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
// as missing bundle1...
dpBuilder.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")));
DeploymentPackage dp2 = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp2);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
// Now we should be able to resolve the dependencies for bundle2...
assertTrue(resolveBundles(dp1.getBundle(getSymbolicName("bundle2"))));
assertTrue(isBundleActive(dp2.getBundle(getSymbolicName("bundle1"))));
assertTrue(isBundleResolved(dp1.getBundle(getSymbolicName("bundle2"))));
}
/**
* Tests that if an exception is thrown in the start method of a bundle, the installation is not rolled back.
*/
@Test
public void testInstallBundleWithExceptionThrownInStartCausesNoRollbackOk() throws Exception {
System.setProperty("bundle3", "start");
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle3")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle3"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
// the bundle threw an exception during start, so it is not active...
assertFalse(isBundleActive(dp.getBundle(getSymbolicName("bundle3"))));
assertEquals("Expected a single deployment package?!", 1, countDeploymentPackages());
}
/**
* Tests that installing a bundle along with a fragment bundle succeeds (DA should not try to start the fragment,
* see FELIX-4167).
*/
@Test
public void testInstallBundleWithFragmentOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("fragment1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("fragment1"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
assertFalse(isBundleActive(dp.getBundle(getSymbolicName("fragment1"))));
assertEquals("Expected a single deployment package?!", 1, countDeploymentPackages());
}
/**
* Tests that installing a bundle whose dependencies cannot be met, is installed, but not started.
*/
@Test
public void testInstallBundleWithMissingDependencyOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
Bundle bundle = dp.getBundle(getSymbolicName("bundle2"));
assertNotNull("Failed to obtain bundle from deployment package?!", bundle);
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
assertTrue(isBundleInstalled(dp.getBundle(getSymbolicName("bundle2"))));
}
/**
* Tests that installing a bundle along with other (non-bundle) artifacts succeeds.
*/
@Test
public void testInstallBundleWithOtherArtifactsOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createResource().setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setUrl(getTestResource("test-config1.xml")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle3")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
// Though the commit failed; the package should be installed...
assertBundleExists(getSymbolicName("rp1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle3"), "1.0.0");
assertEquals("Expected a single deployment package?!", 1, countDeploymentPackages());
}
/**
* Tests that installing a new bundle works as expected.
*/
@Test
public void testInstallSingleValidBundleOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertNotNull("Failed to obtain test service?!", awaitService(TEST_SERVICE_NAME));
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
}
/**
* Tests that installing two bundles works as expected.
*/
@Test
public void testInstallTwoValidBundlesOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertNotNull("Failed to obtain test service?!", awaitService(TEST_SERVICE_NAME));
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle2"))));
}
/**
* Tests that if an exception is thrown during the uninstall of a bundle, the installation/update continues and
* succeeds.
*/
@Test
public void testUninstallBundleWithExceptionThrownInStopCauseNoRollbackOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle3")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle3"), "1.0.0");
System.setProperty("bundle3", "stop");
dpBuilder = dpBuilder.create("1.0.1");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")));
dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
assertBundleNotExists(getSymbolicName("bundle3"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle2"))));
assertEquals("Expected a single deployment package?!", 1, countDeploymentPackages());
}
/**
* Tests that if an exception is thrown during the stop of a bundle, the installation/update continues and succeeds.
*/
@Test
public void testUpdateBundleWithExceptionThrownInStopCauseNoRollbackOk() throws Exception {
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle3")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
assertBundleExists(getSymbolicName("bundle3"), "1.0.0");
System.setProperty("bundle3", "stop");
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle2")))
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle3")));
dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
assertBundleExists(getSymbolicName("bundle1"), "1.0.0");
assertBundleExists(getSymbolicName("bundle2"), "1.0.0");
assertBundleExists(getSymbolicName("bundle3"), "1.0.0");
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle1"))));
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle2"))));
assertTrue(isBundleActive(dp.getBundle(getSymbolicName("bundle3"))));
assertEquals("Expected a single deployment package?!", 1, countDeploymentPackages());
}
/**
* Tests that we can correctly rollback the installation of a deployment package for bundles that have their data
* area populated.
*/
@Test
public void testRollbackWithPopulatedDataAreaOk() throws Exception {
// Install a first version, in which we're going to change the data area of a bundle...
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
Bundle bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
File dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Populate the data area...
assertTrue("No file created?!", new File(dataArea, "file1").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file2").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file3").createNewFile());
// This will cause the new bundle to fail in its stop method...
System.setProperty("rp1", "process");
// Simulate an upgrade for our bundle, which should cause its data area to be retained...
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createBundleResource().setVersion("1.1.0").setUrl(getTestBundleURL("bundle1")).setFilter(new JarManifestManipulatingFilter("Bundle-Version", "1.1.0")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createResource().setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setUrl(getTestResource("test-config1.xml")));
try {
dp = installDeploymentPackage(dpBuilder); // should fail!
fail("Deployment of upgrade package should have failed?!");
}
catch (DeploymentException e) {
// Ok; expected...
}
// We should still have this bundle..
bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Data area should be restored exactly as-is...
assertTrue("File not restored?!", new File(dataArea, "file1").exists());
assertTrue("File not restored?!", new File(dataArea, "file2").exists());
assertTrue("File not restored?!", new File(dataArea, "file3").exists());
}
/**
* Tests that we can correctly install a deployment package with bundles that have their data area populated.
*/
@Test
public void testUpgradeWithPopulatedDataAreaOk() throws Exception {
// Install a first version, in which we're going to change the data area of a bundle...
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setVersion("1.0.0").setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
Bundle bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
File dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Populate the data area...
assertTrue("No file created?!", new File(dataArea, "file1").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file2").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file3").createNewFile());
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createBundleResource().setVersion("1.1.0").setUrl(getTestBundleURL("bundle1")).setFilter(new JarManifestManipulatingFilter("Bundle-Version", "1.1.0")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createResource().setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setUrl(getTestResource("test-config1.xml")));
dp = installDeploymentPackage(dpBuilder); // should succeed!
// We should still have this bundle..
bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Data area should be restored exactly as-is...
assertTrue("File not restored?!", new File(dataArea, "file1").exists());
assertTrue("File not restored?!", new File(dataArea, "file2").exists());
assertTrue("File not restored?!", new File(dataArea, "file3").exists());
}
/**
* Tests that we can correctly install a deployment package with bundles that have their data area populated.
*/
@Test
public void testUninstallBundleWithPopulatedDataAreaOk() throws Exception {
// Install a first version, in which we're going to change the data area of a bundle...
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setVersion("1.0.0").setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
Bundle bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
File dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Populate the data area...
assertTrue("No file created?!", new File(dataArea, "file1").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file2").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file3").createNewFile());
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createResource().setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setUrl(getTestResource("test-config1.xml")));
dp = installDeploymentPackage(dpBuilder); // should succeed!
// We should no longer have this bundle..
bundle1 = getBundle("testbundles.bundle1");
assertNull("Unable to get installed test bundle?!", bundle1);
// Data area should be restored exactly as-is...
assertFalse("Data area not purged?!", dataArea.exists());
}
/**
* Tests that we can correctly install a deployment package with bundles that have their data area populated.
*/
@Test
public void testRollbackUninstallBundleWithPopulatedDataAreaOk() throws Exception {
// Install a first version, in which we're going to change the data area of a bundle...
DeploymentPackageBuilder dpBuilder = createNewDeploymentPackageBuilder("1.0.0");
dpBuilder
.add(dpBuilder.createBundleResource().setVersion("1.0.0").setUrl(getTestBundleURL("bundle1")))
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")));
DeploymentPackage dp = installDeploymentPackage(dpBuilder);
assertNotNull("No deployment package returned?!", dp);
awaitRefreshPackagesEvent();
Bundle bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
File dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Populate the data area...
assertTrue("No file created?!", new File(dataArea, "file1").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file2").createNewFile());
assertTrue("No file created?!", new File(dataArea, "file3").createNewFile());
// This will cause the new bundle to fail in its stop method...
System.setProperty("rp1", "process");
dpBuilder = createDeploymentPackageBuilder(dpBuilder.getSymbolicName(), "1.0.1");
dpBuilder
.add(dpBuilder.createResourceProcessorResource().setUrl(getTestBundleURL("rp1")))
.add(dpBuilder.createResource().setResourceProcessorPID(TEST_FAILING_BUNDLE_RP1).setUrl(getTestResource("test-config1.xml")));
try {
dp = installDeploymentPackage(dpBuilder); // should fail!
fail("Deployment of upgrade package should have failed?!");
}
catch (DeploymentException e) {
// Ok; expected...
}
// We should still have this bundle..
bundle1 = getBundle("testbundles.bundle1");
assertNotNull("Unable to get installed test bundle?!", bundle1);
dataArea = bundle1.getDataFile("");
assertNotNull("No data area obtained for test bundle?!", dataArea);
// Data area should be restored exactly as-is...
assertTrue("File not restored?!", new File(dataArea, "file1").exists());
assertTrue("File not restored?!", new File(dataArea, "file2").exists());
assertTrue("File not restored?!", new File(dataArea, "file3").exists());
}
}