aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-03-18 20:16:07 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-03-19 12:07:32 -0500
commitfbc1a73743368211d5d8c7fc0625adf6eb9ca50c (patch)
treec314d72b4b25afab7a27be664a1bffa5bdd80b3a /src/test
parentfb54576f1d05e82ba47cd718c4c4f8b3bad624c9 (diff)
downloadwix-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.cs25
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/FailureTests.cs14
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]