From 328d6df64373cf340628a09e52dd77ea338bc838 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 31 Jan 2022 16:48:58 -0600 Subject: Don't uninstall package during rollback if there are dependents. --- .../burn/WixToolsetTest.BurnE2E/DependencyTests.cs | 150 ++++++++++++++++++++- 1 file changed, 148 insertions(+), 2 deletions(-) (limited to 'src/test') diff --git a/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs index 7c74f348..7e3e28c1 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs @@ -540,7 +540,7 @@ namespace WixToolsetTest.BurnE2E } [Fact(Skip = "https://github.com/wixtoolset/issues/issues/3421")] - public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsi() + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsiFifo() { var packageAv1 = this.CreatePackageInstaller("PackageAv1"); var packageC = this.CreatePackageInstaller("PackageC"); @@ -611,8 +611,80 @@ namespace WixToolsetTest.BurnE2E packageGv2.VerifyInstalled(false); } + [Fact(Skip = "https://github.com/wixtoolset/issues/issues/3421")] + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsiLifo() + { + var packageAv1 = this.CreatePackageInstaller("PackageAv1"); + var packageC = this.CreatePackageInstaller("PackageC"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); + var packageFv2 = this.CreatePackageInstaller("PackageFv2"); + var packageGv1 = this.CreatePackageInstaller("PackageGv1"); + var packageGv2 = this.CreatePackageInstaller("PackageGv2"); + var bundleM = this.CreateBundleInstaller("BundleM"); + var bundleNv1 = this.CreateBundleInstaller("BundleNv1"); + var bundleNv2 = this.CreateBundleInstaller("BundleNv2"); + var testBAController = this.CreateTestBAController(); + + packageAv1.VerifyInstalled(false); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleM.Install(); + bundleM.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleNv1.Install(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + // Make PackageC fail. + testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); + + bundleNv2.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + bundleNv2.VerifyUnregisteredAndRemovedFromPackageCache(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + bundleNv1.Uninstall(); + bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleM.Uninstall(); + bundleM.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + } + [Fact] - public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsi() + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsiFifo() { var packageAv1 = this.CreatePackageInstaller("PackageAv1"); var packageC = this.CreatePackageInstaller("PackageC"); @@ -685,6 +757,80 @@ namespace WixToolsetTest.BurnE2E packageGv101.VerifyInstalledWithVersion(false); } + [Fact] + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsiLifo() + { + var packageAv1 = this.CreatePackageInstaller("PackageAv1"); + var packageC = this.CreatePackageInstaller("PackageC"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); + var packageFv101 = this.CreatePackageInstaller("PackageFv1_0_1"); + var packageGv1 = this.CreatePackageInstaller("PackageGv1"); + var packageGv101 = this.CreatePackageInstaller("PackageGv1_0_1"); + var bundleM = this.CreateBundleInstaller("BundleM"); + var bundleNv1 = this.CreateBundleInstaller("BundleNv1"); + var bundleNv101 = this.CreateBundleInstaller("BundleNv1_0_1"); + var testBAController = this.CreateTestBAController(); + + packageAv1.VerifyInstalled(false); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + + bundleM.Install(); + bundleM.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalledWithVersion(true); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + + bundleNv1.Install(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalledWithVersion(true); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(true); + packageGv101.VerifyInstalledWithVersion(false); + + // Make PackageC fail. + testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); + + // Verify https://github.com/wixtoolset/issues/issues/6510 - Dependency provider removed on rollback even though package is not rolled back + bundleNv101.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + bundleNv101.VerifyUnregisteredAndRemovedFromPackageCache(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + // The expected values will change after implementing https://github.com/wixtoolset/issues/issues/6535 and https://github.com/wixtoolset/issues/issues/3421 + packageAv1.VerifyInstalled(true); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(true); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(true); + + bundleNv1.Uninstall(); + bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(true); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + + bundleM.Uninstall(); + bundleM.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + } + [Fact] public void DoesntRegisterDependencyOnPackageNotSelectedForInstall() { -- cgit v1.2.3-55-g6feb