From 9e2cda60e3852660f235beb5e0af1c746d0045e6 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Wed, 15 Dec 2021 10:48:06 -0600 Subject: FilesInUse messages are too different to unify in the Burn engine. Fixes #6348 --- src/test/burn/TestBA/TestBA.cs | 2 +- .../FilesInUseTests/BundleA/BundleA.wixproj | 18 ++++++++++ .../TestData/FilesInUseTests/BundleA/BundleA.wxs | 10 ++++++ .../FilesInUseTests/PackageA/PackageA.wixproj | 13 ++++++++ .../TestData/FilesInUseTests/PackageA/PackageA.wxs | 10 ++++++ .../TestData/FilesInUseTests/PackageA/license.txt | 1 + .../burn/WixToolsetTest.BurnE2E/FilesInUseTests.cs | 38 ++++++++++++++++++++++ .../WixToolsetTest.BurnE2E/TestBAController.cs | 10 ++++++ 8 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wixproj create mode 100644 src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wxs create mode 100644 src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wixproj create mode 100644 src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wxs create mode 100644 src/test/burn/TestData/FilesInUseTests/PackageA/license.txt create mode 100644 src/test/burn/WixToolsetTest.BurnE2E/FilesInUseTests.cs (limited to 'src/test') diff --git a/src/test/burn/TestBA/TestBA.cs b/src/test/burn/TestBA/TestBA.cs index 5c70253d..5ef26253 100644 --- a/src/test/burn/TestBA/TestBA.cs +++ b/src/test/burn/TestBA/TestBA.cs @@ -399,7 +399,7 @@ namespace WixToolset.Test.BA protected override void OnExecuteFilesInUse(ExecuteFilesInUseEventArgs args) { - this.Log("OnExecuteFilesInUse() - package: {0}, retries remaining: {1}, data: {2}", args.PackageId, this.retryExecuteFilesInUse, String.Join(", ", args.Files.ToArray())); + this.Log("OnExecuteFilesInUse() - package: {0}, source: {1}, retries remaining: {2}, data: {3}", args.PackageId, args.Source, this.retryExecuteFilesInUse, String.Join(", ", args.Files.ToArray())); if (this.retryExecuteFilesInUse > 0) { diff --git a/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wixproj b/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wixproj new file mode 100644 index 00000000..c71410c2 --- /dev/null +++ b/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wixproj @@ -0,0 +1,18 @@ + + + + Bundle + {6A348108-8ACE-4D13-A352-D8F76785BFE4} + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wxs b/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wxs new file mode 100644 index 00000000..bd164a29 --- /dev/null +++ b/src/test/burn/TestData/FilesInUseTests/BundleA/BundleA.wxs @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wixproj b/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wixproj new file mode 100644 index 00000000..57825f7b --- /dev/null +++ b/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wixproj @@ -0,0 +1,13 @@ + + + + true + {C94C8FC9-1347-44CE-B1FB-0A6196928921} + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wxs b/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wxs new file mode 100644 index 00000000..a96c2a11 --- /dev/null +++ b/src/test/burn/TestData/FilesInUseTests/PackageA/PackageA.wxs @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/test/burn/TestData/FilesInUseTests/PackageA/license.txt b/src/test/burn/TestData/FilesInUseTests/PackageA/license.txt new file mode 100644 index 00000000..2e65efe2 --- /dev/null +++ b/src/test/burn/TestData/FilesInUseTests/PackageA/license.txt @@ -0,0 +1 @@ +a \ No newline at end of file diff --git a/src/test/burn/WixToolsetTest.BurnE2E/FilesInUseTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/FilesInUseTests.cs new file mode 100644 index 00000000..6ad68d22 --- /dev/null +++ b/src/test/burn/WixToolsetTest.BurnE2E/FilesInUseTests.cs @@ -0,0 +1,38 @@ +// Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. + +namespace WixToolsetTest.BurnE2E +{ + using System.IO; + using WixTestTools; + using Xunit; + using Xunit.Abstractions; + + public class FilesInUseTests : BurnE2ETests + { + public FilesInUseTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } + + [Fact] + public void CanCancelInstallAfterRetryingLockedFile() + { + var packageA = this.CreatePackageInstaller("PackageA"); + var bundleA = this.CreateBundleInstaller("BundleA"); + var testBAController = this.CreateTestBAController(); + + testBAController.SetPackageRetryExecuteFilesInUse("PackageA", 1); + + packageA.VerifyInstalled(false); + + // Lock the file that will be installed. + string targetInstallFile = packageA.GetInstalledFilePath("Package.wxs"); + Directory.CreateDirectory(Path.GetDirectoryName(targetInstallFile)); + using (FileStream lockTargetFile = new FileStream(targetInstallFile, FileMode.CreateNew, FileAccess.ReadWrite, FileShare.None, 4096, FileOptions.DeleteOnClose)) + { + bundleA.Install(expectedExitCode: (int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + } + + bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageA.VerifyInstalled(false); + } + } +} diff --git a/src/test/burn/WixToolsetTest.BurnE2E/TestBAController.cs b/src/test/burn/WixToolsetTest.BurnE2E/TestBAController.cs index 6e4fe6c6..d2e8a1ca 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/TestBAController.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/TestBAController.cs @@ -117,6 +117,16 @@ namespace WixToolsetTest.BurnE2E this.SetPackageState(packageId, "CancelOnProgressAtProgress", cancelPoint.HasValue ? cancelPoint.ToString() : null); } + /// + /// Retries the files in use one or more times before canceling. + /// + /// Package identity. + /// Sets or removes the retry count on a package's file in use message. + public void SetPackageRetryExecuteFilesInUse(string packageId, int? retryCount) + { + this.SetPackageState(packageId, "RetryExecuteFilesInUse", retryCount.HasValue ? retryCount.ToString() : null); + } + /// /// Sets the requested state for a package that the TestBA will return to the engine during plan. /// -- cgit v1.2.3-55-g6feb