diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2022-03-18 20:16:07 -0500 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2022-03-19 12:07:32 -0500 |
| commit | fbc1a73743368211d5d8c7fc0625adf6eb9ca50c (patch) | |
| tree | c314d72b4b25afab7a27be664a1bffa5bdd80b3a /src/test | |
| parent | fb54576f1d05e82ba47cd718c4c4f8b3bad624c9 (diff) | |
| download | wix-fbc1a73743368211d5d8c7fc0625adf6eb9ca50c.tar.gz wix-fbc1a73743368211d5d8c7fc0625adf6eb9ca50c.tar.bz2 wix-fbc1a73743368211d5d8c7fc0625adf6eb9ca50c.zip | |
Add checkpoint so Exe and Msu packages rollback after being cancelled.
Fixes 5950
Diffstat (limited to 'src/test')
| -rw-r--r-- | src/test/burn/TestBA/TestBA.cs | 25 | ||||
| -rw-r--r-- | src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs | 14 |
2 files changed, 28 insertions, 11 deletions
diff --git a/src/test/burn/TestBA/TestBA.cs b/src/test/burn/TestBA/TestBA.cs index c219ce9c..fdbcc6d4 100644 --- a/src/test/burn/TestBA/TestBA.cs +++ b/src/test/burn/TestBA/TestBA.cs | |||
| @@ -4,6 +4,7 @@ namespace WixToolset.Test.BA | |||
| 4 | { | 4 | { |
| 5 | using System; | 5 | using System; |
| 6 | using System.Collections.Generic; | 6 | using System.Collections.Generic; |
| 7 | using System.Diagnostics; | ||
| 7 | using System.IO; | 8 | using System.IO; |
| 8 | using System.Linq; | 9 | using System.Linq; |
| 9 | using System.Threading; | 10 | using System.Threading; |
| @@ -37,6 +38,7 @@ namespace WixToolset.Test.BA | |||
| 37 | private string cancelExecuteActionName; | 38 | private string cancelExecuteActionName; |
| 38 | private int cancelOnProgressAtProgress; | 39 | private int cancelOnProgressAtProgress; |
| 39 | private int retryExecuteFilesInUse; | 40 | private int retryExecuteFilesInUse; |
| 41 | private bool rollingBack; | ||
| 40 | 42 | ||
| 41 | private IBootstrapperCommand Command { get; } | 43 | private IBootstrapperCommand Command { get; } |
| 42 | 44 | ||
| @@ -350,6 +352,8 @@ namespace WixToolset.Test.BA | |||
| 350 | { | 352 | { |
| 351 | this.Log("OnExecutePackageBegin() - package: {0}, rollback: {1}", args.PackageId, !args.ShouldExecute); | 353 | this.Log("OnExecutePackageBegin() - package: {0}, rollback: {1}", args.PackageId, !args.ShouldExecute); |
| 352 | 354 | ||
| 355 | this.rollingBack = !args.ShouldExecute; | ||
| 356 | |||
| 353 | string slowProgress = this.ReadPackageAction(args.PackageId, "SlowExecute"); | 357 | string slowProgress = this.ReadPackageAction(args.PackageId, "SlowExecute"); |
| 354 | if (String.IsNullOrEmpty(slowProgress) || !Int32.TryParse(slowProgress, out this.sleepDuringExecute)) | 358 | if (String.IsNullOrEmpty(slowProgress) || !Int32.TryParse(slowProgress, out this.sleepDuringExecute)) |
| 355 | { | 359 | { |
| @@ -404,7 +408,7 @@ namespace WixToolset.Test.BA | |||
| 404 | if (!String.IsNullOrEmpty(recordTestRegistryValue) && Boolean.TryParse(recordTestRegistryValue, out logTestRegistryValue) && logTestRegistryValue) | 408 | if (!String.IsNullOrEmpty(recordTestRegistryValue) && Boolean.TryParse(recordTestRegistryValue, out logTestRegistryValue) && logTestRegistryValue) |
| 405 | { | 409 | { |
| 406 | var value = this.ReadTestRegistryValue(args.PackageId); | 410 | var value = this.ReadTestRegistryValue(args.PackageId); |
| 407 | this.Log("TestRegistryValue: {0}, Version, '{1}'", args.PackageId, value); | 411 | this.Log("TestRegistryValue: {0}, {1}, Version, '{2}'", this.rollingBack ? "Rollback" : "Execute", args.PackageId, value); |
| 408 | } | 412 | } |
| 409 | } | 413 | } |
| 410 | 414 | ||
| @@ -419,8 +423,22 @@ namespace WixToolset.Test.BA | |||
| 419 | 423 | ||
| 420 | if (args.Action == BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION.Abandon) | 424 | if (args.Action == BOOTSTRAPPER_EXECUTEPROCESSCANCEL_ACTION.Abandon) |
| 421 | { | 425 | { |
| 422 | // Give time to the process to start before its files are deleted. | 426 | // Kill process to make sure it doesn't affect other tests. |
| 423 | Thread.Sleep(2000); | 427 | try |
| 428 | { | ||
| 429 | using (Process process = Process.GetProcessById(args.ProcessId)) | ||
| 430 | { | ||
| 431 | if (process != null) | ||
| 432 | { | ||
| 433 | process.Kill(); | ||
| 434 | } | ||
| 435 | } | ||
| 436 | } | ||
| 437 | catch (Exception e) | ||
| 438 | { | ||
| 439 | this.Log("Failed to kill process {0}: {1}", args.ProcessId, e); | ||
| 440 | Thread.Sleep(5000); | ||
| 441 | } | ||
| 424 | } | 442 | } |
| 425 | 443 | ||
| 426 | this.Log("OnExecuteProcessCancel({0})", args.Action); | 444 | this.Log("OnExecuteProcessCancel({0})", args.Action); |
| @@ -494,6 +512,7 @@ namespace WixToolset.Test.BA | |||
| 494 | this.cancelOnProgressAtProgress = -1; | 512 | this.cancelOnProgressAtProgress = -1; |
| 495 | this.cancelExecuteAtProgress = -1; | 513 | this.cancelExecuteAtProgress = -1; |
| 496 | this.cancelCacheAtProgress = -1; | 514 | this.cancelCacheAtProgress = -1; |
| 515 | this.rollingBack = false; | ||
| 497 | } | 516 | } |
| 498 | 517 | ||
| 499 | protected override void OnApplyComplete(ApplyCompleteEventArgs args) | 518 | protected override void OnApplyComplete(ApplyCompleteEventArgs args) |
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs index bbc0b387..b50be49a 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs | |||
| @@ -25,12 +25,8 @@ namespace WixToolsetTest.BurnE2E | |||
| 25 | var logPath = bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); | 25 | var logPath = bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); |
| 26 | bundleD.VerifyUnregisteredAndRemovedFromPackageCache(); | 26 | bundleD.VerifyUnregisteredAndRemovedFromPackageCache(); |
| 27 | 27 | ||
| 28 | Assert.True(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: ExeA, Version, ''")); | 28 | Assert.True(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: Execute, ExeA, Version, ''")); |
| 29 | 29 | Assert.False(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: Rollback, ExeA, Version")); | |
| 30 | // Make sure ExeA finishes running. | ||
| 31 | Thread.Sleep(3000); | ||
| 32 | |||
| 33 | bundleD.VerifyExeTestRegistryValue("ExeA", "1.0.0.0"); | ||
| 34 | } | 30 | } |
| 35 | 31 | ||
| 36 | [Fact] | 32 | [Fact] |
| @@ -47,9 +43,11 @@ namespace WixToolsetTest.BurnE2E | |||
| 47 | var logPath = bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); | 43 | var logPath = bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); |
| 48 | bundleD.VerifyUnregisteredAndRemovedFromPackageCache(); | 44 | bundleD.VerifyUnregisteredAndRemovedFromPackageCache(); |
| 49 | 45 | ||
| 50 | Assert.True(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: ExeA, Version, '1.0.0.0'")); | 46 | Assert.True(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: Execute, ExeA, Version, '1.0.0.0'")); |
| 47 | Assert.True(LogVerifier.MessageInLogFile(logPath, "TestRegistryValue: Rollback, ExeA, Version, ''")); | ||
| 51 | 48 | ||
| 52 | bundleD.VerifyExeTestRegistryValue("ExeA", "1.0.0.0"); | 49 | // The package should have rolled back. |
| 50 | bundleD.VerifyExeTestRegistryRootDeleted("ExeA"); | ||
| 53 | } | 51 | } |
| 54 | 52 | ||
| 55 | [Fact] | 53 | [Fact] |
