From 8e8f724d90c6835febb8b5865009746aea73a334 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Tue, 22 Feb 2022 20:23:43 -0600 Subject: Add UnsafeUninstall action. Fixes #6721 --- src/test/burn/WixTestTools/BundleInstaller.cs | 30 ++++++++++++++ src/test/burn/WixTestTools/MSIExec.cs | 5 +++ .../ForwardCompatibleBundleTests.cs | 46 ++++++++++++++++++---- 3 files changed, 74 insertions(+), 7 deletions(-) (limited to 'src/test') diff --git a/src/test/burn/WixTestTools/BundleInstaller.cs b/src/test/burn/WixTestTools/BundleInstaller.cs index a49c4024..2b449ebf 100644 --- a/src/test/burn/WixTestTools/BundleInstaller.cs +++ b/src/test/burn/WixTestTools/BundleInstaller.cs @@ -3,6 +3,7 @@ namespace WixTestTools { using System; + using System.Collections.Generic; using System.IO; using System.Text; @@ -130,6 +131,35 @@ namespace WixTestTools return this.RunBundleWithArguments(expectedExitCode, MSIExec.MSIExecMode.Uninstall, arguments, bundlePath: bundlePath); } + /// + /// Uninstalls the bundle unsafely with optional arguments. + /// + /// Expected exit code, defaults to success. + /// Optional arguments to pass to the tool. + /// Path to the generated log file. + public string UnsafeUninstall(int expectedExitCode = (int)MSIExec.MSIExecReturnCode.SUCCESS, params string[] arguments) + { + var newArgumentList = new List(); + newArgumentList.Add("-unsafeuninstall"); + newArgumentList.AddRange(arguments); + return this.RunBundleWithArguments(expectedExitCode, MSIExec.MSIExecMode.Custom, newArgumentList.ToArray()); + } + + /// + /// Uninstalls the bundle unsafely at the given path with optional arguments. + /// + /// This should be the bundle in the package cache. + /// Expected exit code, defaults to success. + /// Optional arguments to pass to the tool. + /// Path to the generated log file. + public string UnsafeUninstall(string bundlePath, int expectedExitCode = (int)MSIExec.MSIExecReturnCode.SUCCESS, params string[] arguments) + { + var newArgumentList = new List(); + newArgumentList.Add("-unsafeuninstall"); + newArgumentList.AddRange(arguments); + return this.RunBundleWithArguments(expectedExitCode, MSIExec.MSIExecMode.Custom, newArgumentList.ToArray(), bundlePath: bundlePath); + } + /// /// Executes the bundle with optional arguments. /// diff --git a/src/test/burn/WixTestTools/MSIExec.cs b/src/test/burn/WixTestTools/MSIExec.cs index 8dce96cf..a10a48d6 100644 --- a/src/test/burn/WixTestTools/MSIExec.cs +++ b/src/test/burn/WixTestTools/MSIExec.cs @@ -697,6 +697,11 @@ namespace WixTestTools /// Uninstalls the product as part of cleanup /// Cleanup, + + /// + /// No action automatically added to arguments + /// + Custom, } /// diff --git a/src/test/burn/WixToolsetTest.BurnE2E/ForwardCompatibleBundleTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/ForwardCompatibleBundleTests.cs index eb649c86..357cf515 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/ForwardCompatibleBundleTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/ForwardCompatibleBundleTests.cs @@ -17,6 +17,38 @@ namespace WixToolsetTest.BurnE2E private const string V100 = "1.0.0.0"; private const string V200 = "2.0.0.0"; + [Fact] + public void CanIgnoreBundleDependentForUnsafeUninstall() + { + string providerId = BundleAProviderId; + string parent = "~BundleAv1"; + string parentSwitch = String.Concat("-parent ", parent); + + var packageAv1 = this.CreatePackageInstaller("PackageAv1"); + var bundleAv1 = this.CreateBundleInstaller("BundleAv1"); + var testBAController = this.CreateTestBAController(); + + packageAv1.VerifyInstalled(false); + + // Install the v1 bundle with a parent. + bundleAv1.Install(arguments: parentSwitch); + bundleAv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + Assert.True(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out var actualProviderVersion)); + Assert.Equal(V100, actualProviderVersion); + Assert.True(BundleRegistration.DependencyDependentExists(providerId, parent)); + + // Cancel package B right away. + testBAController.SetPackageCancelExecuteAtProgress("PackageA", 1); + + bundleAv1.UnsafeUninstall((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(true); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); + } + [Fact] public void CanTrack1ForwardCompatibleDependentThroughMajorUpgrade() { @@ -70,7 +102,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -116,7 +148,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -198,7 +230,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -280,7 +312,7 @@ namespace WixToolsetTest.BurnE2E packageCv1.VerifyInstalled(false); packageCv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -366,7 +398,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -414,7 +446,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } [Fact] @@ -463,7 +495,7 @@ namespace WixToolsetTest.BurnE2E packageAv1.VerifyInstalled(false); packageAv2.VerifyInstalled(false); - Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out actualProviderVersion)); + Assert.False(BundleRegistration.TryGetDependencyProviderValue(providerId, "Version", out _)); } } } -- cgit v1.2.3-55-g6feb