aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-02-06 17:31:12 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-02-06 17:45:55 -0600
commitbe8d724f4becb78743644d393ae626b3736dd5b3 (patch)
treea614505e194c29882cc4b5cd1283925a285a1d87 /src
parent787834ee4e3a4b5d084247b799e27a3e7968f50d (diff)
downloadwix-be8d724f4becb78743644d393ae626b3736dd5b3.tar.gz
wix-be8d724f4becb78743644d393ae626b3736dd5b3.tar.bz2
wix-be8d724f4becb78743644d393ae626b3736dd5b3.zip
Testing for #6297.
Diffstat (limited to 'src')
-rw-r--r--src/TestData/PrereqBaTests/BundleA/BundleA.wxs2
-rw-r--r--src/TestData/RegistrationTests/BundleA/BundleA.wixproj18
-rw-r--r--src/TestData/RegistrationTests/BundleA/BundleA.wxs10
-rw-r--r--src/TestData/RegistrationTests/PackageA/PackageA.wixproj9
-rw-r--r--src/Utilities/TestBA/TestBA.cs82
-rw-r--r--src/WixToolsetTest.BurnE2E/BundleVerifier.cs26
-rw-r--r--src/WixToolsetTest.BurnE2E/BurnE2ETests.cs10
-rw-r--r--src/WixToolsetTest.BurnE2E/PackageInstaller.cs4
-rw-r--r--src/WixToolsetTest.BurnE2E/PrereqBaTests.cs4
-rw-r--r--src/WixToolsetTest.BurnE2E/RegistrationTests.cs51
-rw-r--r--src/WixToolsetTest.BurnE2E/TestBAController.cs10
11 files changed, 192 insertions, 34 deletions
diff --git a/src/TestData/PrereqBaTests/BundleA/BundleA.wxs b/src/TestData/PrereqBaTests/BundleA/BundleA.wxs
index 0c9e8d21..c903988b 100644
--- a/src/TestData/PrereqBaTests/BundleA/BundleA.wxs
+++ b/src/TestData/PrereqBaTests/BundleA/BundleA.wxs
@@ -16,7 +16,7 @@
16 <Fragment> 16 <Fragment>
17 <PackageGroup Id="BundlePackages"> 17 <PackageGroup Id="BundlePackages">
18 <MsiPackage Id="PackageA" SourceFile="$(var.PackageA.TargetPath)" bal:PrereqPackage="yes" Permanent="yes" /> 18 <MsiPackage Id="PackageA" SourceFile="$(var.PackageA.TargetPath)" bal:PrereqPackage="yes" Permanent="yes" />
19 <MsiPackage Id="PackageF" SourceFile="$(var.PackageF.TargetPath)" /> 19 <MsiPackage Id="PackageF" SourceFile="$(var.PackageF.TargetPath)" Cache="always" />
20 </PackageGroup> 20 </PackageGroup>
21 </Fragment> 21 </Fragment>
22</Wix> 22</Wix>
diff --git a/src/TestData/RegistrationTests/BundleA/BundleA.wixproj b/src/TestData/RegistrationTests/BundleA/BundleA.wixproj
new file mode 100644
index 00000000..313ffec9
--- /dev/null
+++ b/src/TestData/RegistrationTests/BundleA/BundleA.wixproj
@@ -0,0 +1,18 @@
1<!-- 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. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <OutputType>Bundle</OutputType>
5 <UpgradeCode>{17041020-8A61-4A3B-8FDB-4591CB900049}</UpgradeCode>
6 </PropertyGroup>
7 <ItemGroup>
8 <Compile Include="..\..\Templates\Bundle.wxs" Link="Bundle.wxs" />
9 </ItemGroup>
10 <ItemGroup>
11 <ProjectReference Include="..\PackageA\PackageA.wixproj" />
12 <ProjectReference Include="..\..\TestBA\TestBAWixlib\testbawixlib.wixproj" />
13 </ItemGroup>
14 <ItemGroup>
15 <PackageReference Include="WixToolset.Bal.wixext" Version="4.0.82" />
16 <PackageReference Include="WixToolset.NetFx.wixext" Version="4.0.59" />
17 </ItemGroup>
18</Project> \ No newline at end of file
diff --git a/src/TestData/RegistrationTests/BundleA/BundleA.wxs b/src/TestData/RegistrationTests/BundleA/BundleA.wxs
new file mode 100644
index 00000000..bd164a29
--- /dev/null
+++ b/src/TestData/RegistrationTests/BundleA/BundleA.wxs
@@ -0,0 +1,10 @@
1<!-- 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. -->
2
3
4<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
5 <Fragment>
6 <PackageGroup Id="BundlePackages">
7 <MsiPackage Id="PackageA" SourceFile="$(var.PackageA.TargetPath)" />
8 </PackageGroup>
9 </Fragment>
10</Wix>
diff --git a/src/TestData/RegistrationTests/PackageA/PackageA.wixproj b/src/TestData/RegistrationTests/PackageA/PackageA.wixproj
new file mode 100644
index 00000000..7e5dbb8c
--- /dev/null
+++ b/src/TestData/RegistrationTests/PackageA/PackageA.wixproj
@@ -0,0 +1,9 @@
1<!-- 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. -->
2<Project Sdk="WixToolset.Sdk">
3 <PropertyGroup>
4 <UpgradeCode>{BF26D3E4-1D6B-480E-B312-3FECE6363E43}</UpgradeCode>
5 </PropertyGroup>
6 <ItemGroup>
7 <Compile Include="..\..\Templates\Package.wxs" Link="Package.wxs" />
8 </ItemGroup>
9</Project> \ No newline at end of file
diff --git a/src/Utilities/TestBA/TestBA.cs b/src/Utilities/TestBA/TestBA.cs
index c68c2b61..1348ce98 100644
--- a/src/Utilities/TestBA/TestBA.cs
+++ b/src/Utilities/TestBA/TestBA.cs
@@ -18,14 +18,17 @@ namespace WixToolset.Test.BA
18 { 18 {
19 private const string BurnBundleVersionVariable = "WixBundleVersion"; 19 private const string BurnBundleVersionVariable = "WixBundleVersion";
20 20
21 private ApplicationContext appContext;
22 private Form dummyWindow; 21 private Form dummyWindow;
22 private IntPtr windowHandle;
23 private LaunchAction action; 23 private LaunchAction action;
24 private ManualResetEvent wait;
24 private int result; 25 private int result;
25 26
26 private string updateBundlePath; 27 private string updateBundlePath;
27 28
28 private int redetectCount; 29 private bool immediatelyQuit;
30 private bool quitAfterDetect;
31 private int redetectRemaining;
29 private int sleepDuringCache; 32 private int sleepDuringCache;
30 private int cancelCacheAtProgress; 33 private int cancelCacheAtProgress;
31 private int sleepDuringExecute; 34 private int sleepDuringExecute;
@@ -45,6 +48,7 @@ namespace WixToolset.Test.BA
45 : base(engine) 48 : base(engine)
46 { 49 {
47 this.Command = bootstrapperCommand; 50 this.Command = bootstrapperCommand;
51 this.wait = new ManualResetEvent(false);
48 } 52 }
49 53
50 /// <summary> 54 /// <summary>
@@ -60,8 +64,17 @@ namespace WixToolset.Test.BA
60 /// <summary> 64 /// <summary>
61 /// UI Thread entry point for TestUX. 65 /// UI Thread entry point for TestUX.
62 /// </summary> 66 /// </summary>
63 protected override void Run() 67 protected override void OnStartup(StartupEventArgs args)
64 { 68 {
69 string immediatelyQuit = this.ReadPackageAction(null, "ImmediatelyQuit");
70 if (!String.IsNullOrEmpty(immediatelyQuit) && Boolean.TryParse(immediatelyQuit, out this.immediatelyQuit) && this.immediatelyQuit)
71 {
72 this.Engine.Quit(0);
73 return;
74 }
75
76 base.OnStartup(args);
77
65 this.action = this.Command.Action; 78 this.action = this.Command.Action;
66 this.TestVariables(); 79 this.TestVariables();
67 80
@@ -102,20 +115,46 @@ namespace WixToolset.Test.BA
102 return; 115 return;
103 } 116 }
104 117
105 this.dummyWindow = new Form(); 118 int redetectCount;
106 this.dummyWindow.CreateControl();
107 this.appContext = new ApplicationContext();
108
109 this.redetectCount = 0;
110 string redetect = this.ReadPackageAction(null, "RedetectCount"); 119 string redetect = this.ReadPackageAction(null, "RedetectCount");
111 if (String.IsNullOrEmpty(redetect) || !Int32.TryParse(redetect, out this.redetectCount)) 120 if (String.IsNullOrEmpty(redetect) || !Int32.TryParse(redetect, out redetectCount))
121 {
122 redetectCount = 0;
123 }
124
125 string quitAfterDetect = this.ReadPackageAction(null, "QuitAfterDetect");
126 if (String.IsNullOrEmpty(quitAfterDetect) || !Boolean.TryParse(quitAfterDetect, out this.quitAfterDetect))
112 { 127 {
113 this.redetectCount = 0; 128 this.quitAfterDetect = false;
114 } 129 }
115 130
116 this.Engine.Detect(); 131 this.wait.WaitOne();
132
133 this.redetectRemaining = redetectCount;
134 for (int i = -1; i < redetectCount; i++)
135 {
136 this.Engine.Detect(this.windowHandle);
137 }
138 }
139
140 protected override void Run()
141 {
142 this.dummyWindow = new Form();
143 this.windowHandle = this.dummyWindow.Handle;
144
145 this.Log("Running TestBA application");
146 this.wait.Set();
147 Application.Run();
148 }
149
150 private void ShutdownUiThread()
151 {
152 if (this.dummyWindow != null)
153 {
154 this.dummyWindow.Invoke(new Action(Application.ExitThread));
155 this.dummyWindow.Dispose();
156 }
117 157
118 Application.Run(this.appContext);
119 this.Engine.Quit(this.result & 0xFFFF); // return plain old Win32 error, not HRESULT. 158 this.Engine.Quit(this.result & 0xFFFF); // return plain old Win32 error, not HRESULT.
120 } 159 }
121 160
@@ -167,10 +206,13 @@ namespace WixToolset.Test.BA
167 if (Hresult.Succeeded(this.result) && 206 if (Hresult.Succeeded(this.result) &&
168 (this.UpdateAvailable || LaunchAction.UpdateReplaceEmbedded != this.action && LaunchAction.UpdateReplace != this.action)) 207 (this.UpdateAvailable || LaunchAction.UpdateReplaceEmbedded != this.action && LaunchAction.UpdateReplace != this.action))
169 { 208 {
170 if (this.redetectCount > 0) 209 if (this.redetectRemaining > 0)
210 {
211 this.Log("Completed detection phase: {0} re-runs remaining", this.redetectRemaining--);
212 }
213 else if (this.quitAfterDetect)
171 { 214 {
172 this.Log("Completed detection phase: {0} re-runs remaining", this.redetectCount--); 215 this.ShutdownUiThread();
173 this.Engine.Detect();
174 } 216 }
175 else 217 else
176 { 218 {
@@ -179,7 +221,7 @@ namespace WixToolset.Test.BA
179 } 221 }
180 else 222 else
181 { 223 {
182 this.appContext.ExitThread(); 224 this.ShutdownUiThread();
183 } 225 }
184 } 226 }
185 227
@@ -218,11 +260,11 @@ namespace WixToolset.Test.BA
218 this.result = args.Status; 260 this.result = args.Status;
219 if (Hresult.Succeeded(this.result)) 261 if (Hresult.Succeeded(this.result))
220 { 262 {
221 this.Engine.Apply(this.dummyWindow.Handle); 263 this.Engine.Apply(this.windowHandle);
222 } 264 }
223 else 265 else
224 { 266 {
225 this.appContext.ExitThread(); 267 this.ShutdownUiThread();
226 } 268 }
227 } 269 }
228 270
@@ -402,7 +444,7 @@ namespace WixToolset.Test.BA
402 this.Log("After elevation: WixBundleElevated = {0}", this.Engine.GetVariableNumeric("WixBundleElevated")); 444 this.Log("After elevation: WixBundleElevated = {0}", this.Engine.GetVariableNumeric("WixBundleElevated"));
403 445
404 this.result = args.Status; 446 this.result = args.Status;
405 this.appContext.ExitThread(); 447 this.ShutdownUiThread();
406 } 448 }
407 449
408 protected override void OnSystemShutdown(SystemShutdownEventArgs args) 450 protected override void OnSystemShutdown(SystemShutdownEventArgs args)
@@ -411,7 +453,7 @@ namespace WixToolset.Test.BA
411 this.Log("Disallowed system request to shut down the bootstrapper application."); 453 this.Log("Disallowed system request to shut down the bootstrapper application.");
412 args.Cancel = true; 454 args.Cancel = true;
413 455
414 this.appContext.ExitThread(); 456 this.ShutdownUiThread();
415 } 457 }
416 458
417 private void TestVariables() 459 private void TestVariables()
diff --git a/src/WixToolsetTest.BurnE2E/BundleVerifier.cs b/src/WixToolsetTest.BurnE2E/BundleVerifier.cs
index 94d51890..98ec96a0 100644
--- a/src/WixToolsetTest.BurnE2E/BundleVerifier.cs
+++ b/src/WixToolsetTest.BurnE2E/BundleVerifier.cs
@@ -33,14 +33,19 @@ namespace WixToolsetTest.BurnE2E
33 return this.BundleSymbol; 33 return this.BundleSymbol;
34 } 34 }
35 35
36 public string GetExpectedCachedBundlePath() 36 public string GetPackageCachePathForCacheId(string cacheId)
37 { 37 {
38 var bundleSymbol = this.GetBundleSymbol();
39
40 using var policyKey = Registry.LocalMachine.OpenSubKey(FULL_BURN_POLICY_REGISTRY_PATH); 38 using var policyKey = Registry.LocalMachine.OpenSubKey(FULL_BURN_POLICY_REGISTRY_PATH);
41 var redirectedCachePath = policyKey?.GetValue("PackageCache") as string; 39 var redirectedCachePath = policyKey?.GetValue("PackageCache") as string;
42 var cachePath = redirectedCachePath ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), PACKAGE_CACHE_FOLDER_NAME); 40 var cachePath = redirectedCachePath ?? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), PACKAGE_CACHE_FOLDER_NAME);
43 return Path.Combine(cachePath, bundleSymbol.BundleId, Path.GetFileName(this.Bundle)); 41 return Path.Combine(cachePath, cacheId);
42 }
43
44 public string GetExpectedCachedBundlePath()
45 {
46 var bundleSymbol = this.GetBundleSymbol();
47 var cachePath = this.GetPackageCachePathForCacheId(bundleSymbol.BundleId);
48 return Path.Combine(cachePath, Path.GetFileName(this.Bundle));
44 } 49 }
45 50
46 public bool TryGetPerMachineRegistration(out BundleRegistration registration) 51 public bool TryGetPerMachineRegistration(out BundleRegistration registration)
@@ -74,5 +79,18 @@ namespace WixToolsetTest.BurnE2E
74 Assert.False(this.TryGetPerMachineRegistration(out _)); 79 Assert.False(this.TryGetPerMachineRegistration(out _));
75 Assert.False(File.Exists(cachedBundlePath)); 80 Assert.False(File.Exists(cachedBundlePath));
76 } 81 }
82
83 public void RemovePackageFromCache(string packageId)
84 {
85 using var wixOutput = WixOutput.Read(this.BundlePdb);
86 var intermediate = Intermediate.Load(wixOutput);
87 var section = intermediate.Sections.Single();
88 var packageSymbol = section.Symbols.OfType<WixBundlePackageSymbol>().Single(p => p.Id.Id == packageId);
89 var cachePath = this.GetPackageCachePathForCacheId(packageSymbol.CacheId);
90 if (Directory.Exists(cachePath))
91 {
92 Directory.Delete(cachePath, true);
93 }
94 }
77 } 95 }
78} 96}
diff --git a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs
index f3b3e583..d3400658 100644
--- a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs
+++ b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs
@@ -12,32 +12,32 @@ namespace WixToolsetTest.BurnE2E
12 { 12 {
13 protected BurnE2ETests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } 13 protected BurnE2ETests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
14 14
15 private Queue<IDisposable> Installers { get; } = new Queue<IDisposable>(); 15 private Stack<IDisposable> Installers { get; } = new Stack<IDisposable>();
16 16
17 protected BundleInstaller CreateBundleInstaller(string name) 17 protected BundleInstaller CreateBundleInstaller(string name)
18 { 18 {
19 var installer = new BundleInstaller(this.TestContext, name); 19 var installer = new BundleInstaller(this.TestContext, name);
20 this.Installers.Enqueue(installer); 20 this.Installers.Push(installer);
21 return installer; 21 return installer;
22 } 22 }
23 23
24 protected PackageInstaller CreatePackageInstaller(string filename) 24 protected PackageInstaller CreatePackageInstaller(string filename)
25 { 25 {
26 var installer = new PackageInstaller(this.TestContext, filename); 26 var installer = new PackageInstaller(this.TestContext, filename);
27 this.Installers.Enqueue(installer); 27 this.Installers.Push(installer);
28 return installer; 28 return installer;
29 } 29 }
30 30
31 protected TestBAController CreateTestBAController() 31 protected TestBAController CreateTestBAController()
32 { 32 {
33 var controller = new TestBAController(this.TestContext); 33 var controller = new TestBAController(this.TestContext);
34 this.Installers.Enqueue(controller); 34 this.Installers.Push(controller);
35 return controller; 35 return controller;
36 } 36 }
37 37
38 public void Dispose() 38 public void Dispose()
39 { 39 {
40 while (this.Installers.TryDequeue(out var installer)) 40 while (this.Installers.TryPop(out var installer))
41 { 41 {
42 try 42 try
43 { 43 {
diff --git a/src/WixToolsetTest.BurnE2E/PackageInstaller.cs b/src/WixToolsetTest.BurnE2E/PackageInstaller.cs
index bd1e30cc..c3516fe7 100644
--- a/src/WixToolsetTest.BurnE2E/PackageInstaller.cs
+++ b/src/WixToolsetTest.BurnE2E/PackageInstaller.cs
@@ -40,7 +40,7 @@ namespace WixToolsetTest.BurnE2E
40 /// <param name="expectedExitCode">Expected exit code</param> 40 /// <param name="expectedExitCode">Expected exit code</param>
41 /// <param name="otherArguments">Other arguments to pass to MSIExec.</param> 41 /// <param name="otherArguments">Other arguments to pass to MSIExec.</param>
42 /// <returns>MSIExec log File</returns> 42 /// <returns>MSIExec log File</returns>
43 public string UninstallProduct(MSIExecReturnCode expectedExitCode, params string[] otherArguments) 43 public string UninstallProduct(MSIExecReturnCode expectedExitCode = MSIExecReturnCode.SUCCESS, params string[] otherArguments)
44 { 44 {
45 return this.RunMSIExec(MSIExecMode.Uninstall, otherArguments, expectedExitCode); 45 return this.RunMSIExec(MSIExecMode.Uninstall, otherArguments, expectedExitCode);
46 } 46 }
@@ -51,7 +51,7 @@ namespace WixToolsetTest.BurnE2E
51 /// <param name="expectedExitCode">Expected exit code</param> 51 /// <param name="expectedExitCode">Expected exit code</param>
52 /// <param name="otherArguments">Other arguments to pass to msiexe.exe.</param> 52 /// <param name="otherArguments">Other arguments to pass to msiexe.exe.</param>
53 /// <returns>MSIExec log File</returns> 53 /// <returns>MSIExec log File</returns>
54 public string RepairProduct(MSIExecReturnCode expectedExitCode, params string[] otherArguments) 54 public string RepairProduct(MSIExecReturnCode expectedExitCode = MSIExecReturnCode.SUCCESS, params string[] otherArguments)
55 { 55 {
56 return this.RunMSIExec(MSIExecMode.Repair, otherArguments, expectedExitCode); 56 return this.RunMSIExec(MSIExecMode.Repair, otherArguments, expectedExitCode);
57 } 57 }
diff --git a/src/WixToolsetTest.BurnE2E/PrereqBaTests.cs b/src/WixToolsetTest.BurnE2E/PrereqBaTests.cs
index b07b3aec..ced2e08e 100644
--- a/src/WixToolsetTest.BurnE2E/PrereqBaTests.cs
+++ b/src/WixToolsetTest.BurnE2E/PrereqBaTests.cs
@@ -18,7 +18,7 @@ namespace WixToolsetTest.BurnE2E
18 /// The preqba doesn't infinitely reload itself after failing to load the managed BA. 18 /// The preqba doesn't infinitely reload itself after failing to load the managed BA.
19 /// The engine automatically uninstalls the bundle since only permanent packages were installed. 19 /// The engine automatically uninstalls the bundle since only permanent packages were installed.
20 /// </summary> 20 /// </summary>
21 [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6297")] 21 [Fact]
22 public void DncPreqBaDetectsInfiniteLoop() 22 public void DncPreqBaDetectsInfiniteLoop()
23 { 23 {
24 var packageA = this.CreatePackageInstaller("PackageA"); 24 var packageA = this.CreatePackageInstaller("PackageA");
@@ -49,7 +49,7 @@ namespace WixToolsetTest.BurnE2E
49 /// The preqba doesn't infinitely reload itself after failing to load the managed BA. 49 /// The preqba doesn't infinitely reload itself after failing to load the managed BA.
50 /// The engine automatically uninstalls the bundle since only permanent packages were installed. 50 /// The engine automatically uninstalls the bundle since only permanent packages were installed.
51 /// </summary> 51 /// </summary>
52 [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6297")] 52 [Fact]
53 public void MbaPreqBaDetectsInfiniteLoop() 53 public void MbaPreqBaDetectsInfiniteLoop()
54 { 54 {
55 var packageB = this.CreatePackageInstaller("PackageB"); 55 var packageB = this.CreatePackageInstaller("PackageB");
diff --git a/src/WixToolsetTest.BurnE2E/RegistrationTests.cs b/src/WixToolsetTest.BurnE2E/RegistrationTests.cs
new file mode 100644
index 00000000..640b5085
--- /dev/null
+++ b/src/WixToolsetTest.BurnE2E/RegistrationTests.cs
@@ -0,0 +1,51 @@
1// 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.
2
3namespace WixToolsetTest.BurnE2E
4{
5 using System;
6 using Xunit;
7 using Xunit.Abstractions;
8
9 public class RegistrationTests : BurnE2ETests
10 {
11 public RegistrationTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
12
13 [Fact]
14 public void AutomaticallyUninstallsBundleWithoutBADoingApply()
15 {
16 this.InstallBundleThenManuallyUninstallPackageAndRemovePackageFromCacheThenRunAndQuitWithoutApply(true);
17 }
18
19 [Fact]
20 public void AutomaticallyUninstallsBundleWithoutBADoingDetect()
21 {
22 this.InstallBundleThenManuallyUninstallPackageAndRemovePackageFromCacheThenRunAndQuitWithoutApply(false);
23 }
24
25 private void InstallBundleThenManuallyUninstallPackageAndRemovePackageFromCacheThenRunAndQuitWithoutApply(bool detect)
26 {
27 var packageA = this.CreatePackageInstaller("PackageA");
28 var bundleA = this.CreateBundleInstaller("BundleA");
29 var testBAController = this.CreateTestBAController();
30
31 bundleA.Install();
32 bundleA.VerifyRegisteredAndInPackageCache();
33 packageA.VerifyInstalled(true);
34
35 packageA.UninstallProduct();
36 bundleA.RemovePackageFromCache("PackageA");
37
38 if (detect)
39 {
40 testBAController.SetQuitAfterDetect();
41 }
42 else
43 {
44 testBAController.SetImmediatelyQuit();
45 }
46 bundleA.Install();
47 packageA.VerifyInstalled(false);
48 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
49 }
50 }
51}
diff --git a/src/WixToolsetTest.BurnE2E/TestBAController.cs b/src/WixToolsetTest.BurnE2E/TestBAController.cs
index 54a81b46..91d1b817 100644
--- a/src/WixToolsetTest.BurnE2E/TestBAController.cs
+++ b/src/WixToolsetTest.BurnE2E/TestBAController.cs
@@ -40,6 +40,16 @@ namespace WixToolsetTest.BurnE2E
40 } 40 }
41 } 41 }
42 42
43 public void SetImmediatelyQuit(string value = "true")
44 {
45 this.SetBurnTestValue("ImmediatelyQuit", value);
46 }
47
48 public void SetQuitAfterDetect(string value = "true")
49 {
50 this.SetBurnTestValue("QuitAfterDetect", value);
51 }
52
43 /// <summary> 53 /// <summary>
44 /// Slows the cache progress of a package. 54 /// Slows the cache progress of a package.
45 /// </summary> 55 /// </summary>