aboutsummaryrefslogtreecommitdiff
path: root/src/test/burn/WixToolsetTest.BurnE2E
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2026-02-04 20:47:04 -0500
committerBob Arnson <bob@firegiant.com>2026-02-04 20:47:04 -0500
commitedccb203c421d2bd820062024088c6698424d9ee (patch)
tree6b47c3eb5ca53bd9f79f3d032dc1a596d411bf38 /src/test/burn/WixToolsetTest.BurnE2E
parenta3d3963f806117ce123d95e8b77e73e1c1545b25 (diff)
downloadwix-bob/ConfigurableScopeBundles.tar.gz
wix-bob/ConfigurableScopeBundles.tar.bz2
wix-bob/ConfigurableScopeBundles.zip
Support dual-purpose packages in Burn.bob/ConfigurableScopeBundles
Fixes https://github.com/wixtoolset/issues/issues/8958
Diffstat (limited to 'src/test/burn/WixToolsetTest.BurnE2E')
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs2
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs631
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/OptionalUpdateRegistrationTests.cs4
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/Utilities/TestBAController.cs5
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/runtests.cmd4
5 files changed, 642 insertions, 4 deletions
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs
index dc793cf0..b066899b 100644
--- a/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs
+++ b/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs
@@ -92,7 +92,7 @@ namespace WixToolsetTest.BurnE2E
92 92
93 Assert.True(LogVerifier.MessageInLogFile(logPath, "Applied execute package: v3bundle.exe, result: 0x0, restart: None")); 93 Assert.True(LogVerifier.MessageInLogFile(logPath, "Applied execute package: v3bundle.exe, result: 0x0, restart: None"));
94 94
95 Assert.True(BundleRegistration.TryGetPerMachineBundleRegistrationById(v3BundleId, false, out var v3Registration)); 95 Assert.True(BundleRegistration.TryGetPerMachineBundleRegistrationById(v3BundleId, false, this.TestContext.TestOutputHelper, out var v3Registration));
96 Assert.Null(v3Registration.SystemComponent); 96 Assert.Null(v3Registration.SystemComponent);
97 } 97 }
98 98
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs
new file mode 100644
index 00000000..1b7d6d75
--- /dev/null
+++ b/src/test/burn/WixToolsetTest.BurnE2E/ConfigurableScopeTests.cs
@@ -0,0 +1,631 @@
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 WixTestTools;
6 using WixToolset.BootstrapperApplicationApi;
7 using Xunit;
8 using Xunit.Abstractions;
9
10 public class ConfigurableScopeTests : BurnE2ETests
11 {
12 public ConfigurableScopeTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
13
14 [RuntimeFact]
15 public void CommandLineScopeTestNoopBecauseNonDefaultPlan()
16 {
17 var testBAController = this.CreateTestBAController();
18 testBAController.SetBundleScope(BundleScope.PerMachine);
19
20 var bundle = this.CreateBundleInstaller("AllPmouBundleTestBA");
21 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
22 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
23 var log = bundle.Install(arguments: "/peruser");
24
25 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
26 pkg1.VerifyInstalled();
27 pkg2.VerifyInstalled();
28
29 Assert.True(LogVerifier.MessageInLogFile(log, "Scope command-line switch ignored because the bootstrapper application already specified a scope."));
30
31 bundle.Uninstall();
32 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
33 pkg1.VerifyInstalled(false);
34 pkg2.VerifyInstalled(false);
35 }
36
37 [RuntimeFact]
38 public void CommandLineScopeTestNoopBecauseNoConfigurablePackages()
39 {
40 var bundle = this.CreateBundleInstaller("PerMachineBundle");
41 var log = bundle.Install(arguments: "/peruser");
42
43 Assert.True(LogVerifier.MessageInLogFile(log, "Scope command-line switch ignored because the bundle doesn't have any packages with configurable scope."));
44 }
45
46 [RuntimeFact]
47 public void CommandLineScopeTestPerUser()
48 {
49 var testBAController = this.CreateTestBAController();
50 testBAController.SetBundleScope(BundleScope.Default);
51
52 var bundle = this.CreateBundleInstaller("AllPmouBundleTestBA");
53 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
54 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
55 var log = bundle.Install(arguments: "/peruser");
56
57 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
58 pkg1.VerifyInstalled();
59 pkg2.VerifyInstalled();
60
61 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: Default"));
62 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
63 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
64 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
65
66 bundle.Uninstall(arguments: "/peruser");
67 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
68 pkg1.VerifyInstalled(false);
69 pkg2.VerifyInstalled(false);
70 }
71
72 [RuntimeFact]
73 public void CommandLineScopeTestPerMachine()
74 {
75 var testBAController = this.CreateTestBAController();
76 testBAController.SetBundleScope(BundleScope.Default);
77
78 var bundle = this.CreateBundleInstaller("AllPuomBundleTestBA");
79 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
80 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
81 var log = bundle.Install(arguments: "/permachine");
82
83 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
84 pkg1.VerifyInstalled();
85 pkg2.VerifyInstalled();
86
87 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: Default"));
88 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
89 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
90 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
91
92 bundle.Uninstall(arguments: "/permachine");
93 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
94 pkg1.VerifyInstalled(false);
95 pkg2.VerifyInstalled(false);
96 }
97
98 [RuntimeFact]
99 public void PMOU_Bundle_Default_Plan_Installs_PerMachine()
100 {
101 var testBAController = this.CreateTestBAController();
102 testBAController.SetBundleScope(BundleScope.Default);
103
104 var bundle = this.CreateBundleInstaller("AllPmouBundleTestBA");
105 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
106 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
107 var log = bundle.Install();
108
109 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
110 pkg1.VerifyInstalled();
111 pkg2.VerifyInstalled();
112
113 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: Default"));
114 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
115 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
116 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
117
118 bundle.Uninstall();
119 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
120 pkg1.VerifyInstalled(false);
121 pkg2.VerifyInstalled(false);
122 }
123
124 [RuntimeFact]
125 public void PUOM_Bundle_Default_Plan_Installs_PerUser()
126 {
127 var testBAController = this.CreateTestBAController();
128 testBAController.SetBundleScope(BundleScope.Default);
129
130 var bundle = this.CreateBundleInstaller("AllPuomBundleTestBA");
131 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
132 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
133 var log = bundle.Install();
134
135 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
136 pkg1.VerifyInstalled();
137 pkg2.VerifyInstalled();
138
139 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: Default"));
140 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
141 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
142 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
143
144 bundle.Uninstall();
145 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
146 pkg1.VerifyInstalled(false);
147 pkg2.VerifyInstalled(false);
148 }
149
150 [RuntimeFact]
151 public void PMOU_Bundle_PM_Plan_Installs_PerMachine()
152 {
153 var testBAController = this.CreateTestBAController();
154 testBAController.SetBundleScope(BundleScope.PerMachine);
155
156 var bundle = this.CreateBundleInstaller("AllPmouBundleTestBA");
157 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
158 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
159 var log = bundle.Install();
160
161 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
162 pkg1.VerifyInstalled();
163 pkg2.VerifyInstalled();
164
165 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: PerMachine"));
166 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
167 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
168 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
169
170 bundle.Uninstall();
171 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
172 pkg1.VerifyInstalled(false);
173 pkg2.VerifyInstalled(false);
174 }
175
176 [RuntimeFact]
177 public void PUOM_Bundle_PM_Plan_Installs_PerMachine()
178 {
179 var testBAController = this.CreateTestBAController();
180 testBAController.SetBundleScope(BundleScope.PerMachine);
181
182 var bundle = this.CreateBundleInstaller("AllPuomBundleTestBA");
183 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
184 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
185 var log = bundle.Install();
186
187 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
188 pkg1.VerifyInstalled();
189 pkg2.VerifyInstalled();
190
191 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: PerMachine"));
192 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
193 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
194 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
195
196 bundle.Uninstall();
197 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
198 pkg1.VerifyInstalled(false);
199 pkg2.VerifyInstalled(false);
200 }
201
202 [RuntimeFact]
203 public void PMOU_Bundle_PU_Plan_Installs_PerUser()
204 {
205 var testBAController = this.CreateTestBAController();
206 testBAController.SetBundleScope(BundleScope.PerUser);
207
208 var bundle = this.CreateBundleInstaller("AllPmouBundleTestBA");
209 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
210 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
211 var log = bundle.Install();
212
213 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
214 pkg1.VerifyInstalled();
215 pkg2.VerifyInstalled();
216
217 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: PerUser"));
218 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
219 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
220 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
221
222 bundle.Uninstall();
223 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
224 pkg1.VerifyInstalled(false);
225 pkg2.VerifyInstalled(false);
226 }
227
228 [RuntimeFact]
229 public void PUOM_Bundle_PU_Plan_Installs_PerUser()
230 {
231 var testBAController = this.CreateTestBAController();
232 testBAController.SetBundleScope(BundleScope.PerUser);
233
234 var bundle = this.CreateBundleInstaller("AllPuomBundleTestBA");
235 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
236 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
237 var log = bundle.Install();
238
239 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
240 pkg1.VerifyInstalled();
241 pkg2.VerifyInstalled();
242
243 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 3 packages, action: Install, planned scope: PerUser"));
244 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
245 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
246 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
247
248 bundle.Uninstall();
249 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
250 pkg1.VerifyInstalled(false);
251 pkg2.VerifyInstalled(false);
252 }
253
254 [RuntimeFact]
255 public void PM_PMOU_Bundle_Default_Plan_Installs_PerMachine()
256 {
257 var testBAController = this.CreateTestBAController();
258 testBAController.SetBundleScope(BundleScope.Default);
259
260 var bundle = this.CreateBundleInstaller("PmPmouBundleTestBA");
261 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
262 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
263 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
264 var log = bundle.Install();
265
266 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
267 perMachinePkg.VerifyInstalled();
268 pkg1.VerifyInstalled();
269 pkg2.VerifyInstalled();
270
271 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: Default"));
272 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
273 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
274 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
275 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
276
277 bundle.Uninstall();
278 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
279 perMachinePkg.VerifyInstalled(false);
280 pkg1.VerifyInstalled(false);
281 pkg2.VerifyInstalled(false);
282 }
283
284 [RuntimeFact]
285 public void PM_PMOU_Bundle_PM_Plan_Installs_PerMachine()
286 {
287 var testBAController = this.CreateTestBAController();
288 testBAController.SetBundleScope(BundleScope.PerMachine);
289
290 var bundle = this.CreateBundleInstaller("PmPmouBundleTestBA");
291 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
292 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
293 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
294 var log = bundle.Install();
295
296 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
297 perMachinePkg.VerifyInstalled();
298 pkg1.VerifyInstalled();
299 pkg2.VerifyInstalled();
300
301 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: PerMachine"));
302 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
303 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
304 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
305 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
306
307 bundle.Uninstall();
308 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
309 perMachinePkg.VerifyInstalled(false);
310 pkg1.VerifyInstalled(false);
311 pkg2.VerifyInstalled(false);
312 }
313
314 [RuntimeFact]
315 public void PM_PMOU_Bundle_PU_Plan_Installs_PerUserMostly()
316 {
317 var testBAController = this.CreateTestBAController();
318 testBAController.SetBundleScope(BundleScope.PerUser);
319
320 var bundle = this.CreateBundleInstaller("PmPmouBundleTestBA");
321 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
322 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
323 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
324 var log = bundle.Install();
325
326 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
327 perMachinePkg.VerifyInstalled();
328 pkg1.VerifyInstalled();
329 pkg2.VerifyInstalled();
330
331 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: PerUser"));
332 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
333 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
334 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
335 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
336
337 bundle.Uninstall();
338 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
339 perMachinePkg.VerifyInstalled(false);
340 pkg1.VerifyInstalled(false);
341 pkg2.VerifyInstalled(false);
342 }
343
344 [RuntimeFact]
345 public void PM_PUOM_Bundle_Default_Plan_Installs_PerUser()
346 {
347 var testBAController = this.CreateTestBAController();
348 testBAController.SetBundleScope(BundleScope.Default);
349
350 var bundle = this.CreateBundleInstaller("PmPuomBundleTestBA");
351 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
352 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
353 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
354 var log = bundle.Install();
355
356 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
357 perMachinePkg.VerifyInstalled();
358 pkg1.VerifyInstalled();
359 pkg2.VerifyInstalled();
360
361 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: Default"));
362 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
363 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
364 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
365 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
366
367 bundle.Uninstall();
368 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
369 perMachinePkg.VerifyInstalled(false);
370 pkg1.VerifyInstalled(false);
371 pkg2.VerifyInstalled(false);
372 }
373
374 [RuntimeFact]
375 public void PM_PUOM_Bundle_PM_Plan_Installs_PerMachine()
376 {
377 var testBAController = this.CreateTestBAController();
378 testBAController.SetBundleScope(BundleScope.PerMachine);
379
380 var bundle = this.CreateBundleInstaller("PmPuomBundleTestBA");
381 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
382 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
383 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
384 var log = bundle.Install();
385
386 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
387 perMachinePkg.VerifyInstalled();
388 pkg1.VerifyInstalled();
389 pkg2.VerifyInstalled();
390
391 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: PerMachine"));
392 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerMachine"));
393 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
394 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
395 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
396
397 bundle.Uninstall();
398 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
399 perMachinePkg.VerifyInstalled(false);
400 pkg1.VerifyInstalled(false);
401 pkg2.VerifyInstalled(false);
402 }
403
404 [RuntimeFact]
405 public void PM_PUOM_Bundle_PU_Plan_Installs_PerUserMostly()
406 {
407 var testBAController = this.CreateTestBAController();
408 testBAController.SetBundleScope(BundleScope.PerUser);
409
410 var bundle = this.CreateBundleInstaller("PmPuomBundleTestBA");
411 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
412 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
413 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
414 var log = bundle.Install();
415
416 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
417 perMachinePkg.VerifyInstalled();
418 pkg1.VerifyInstalled();
419 pkg2.VerifyInstalled();
420
421 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 4 packages, action: Install, planned scope: PerUser"));
422 Assert.True(LogVerifier.MessageInLogFile(log, "Planned configurable scope: PerUser"));
423 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
424 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
425 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
426
427 bundle.Uninstall();
428 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
429 perMachinePkg.VerifyInstalled(false);
430 pkg1.VerifyInstalled(false);
431 pkg2.VerifyInstalled(false);
432 }
433
434 [RuntimeFact]
435 public void PM_PU_PMOU_Bundle_Default_Plan_Installs_PerMachine()
436 {
437 var testBAController = this.CreateTestBAController();
438 testBAController.SetBundleScope(BundleScope.Default);
439
440 var bundle = this.CreateBundleInstaller("PmPuPmouBundleTestBA");
441 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
442 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
443 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
444 var log = bundle.Install();
445
446 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
447 perMachinePkg.VerifyInstalled();
448 pkg1.VerifyInstalled();
449 pkg2.VerifyInstalled();
450
451 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: Default"));
452 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
453 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
454 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
455 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
456
457 bundle.Uninstall();
458 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
459 perMachinePkg.VerifyInstalled(false);
460 pkg1.VerifyInstalled(false);
461 pkg2.VerifyInstalled(false);
462 }
463
464 [RuntimeFact]
465 public void PM_PU_PMOU_Bundle_PM_Plan_Installs_PerMachine()
466 {
467 var testBAController = this.CreateTestBAController();
468 testBAController.SetBundleScope(BundleScope.PerMachine);
469
470 var bundle = this.CreateBundleInstaller("PmPuPmouBundleTestBA");
471 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
472 var perUserPkg = this.CreatePackageInstaller("PerUserPkg");
473 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
474 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
475 var log = bundle.Install();
476
477 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
478 perMachinePkg.VerifyInstalled();
479 perUserPkg.VerifyInstalled();
480 pkg1.VerifyInstalled();
481 pkg2.VerifyInstalled();
482
483 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: PerMachine"));
484 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
485 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
486 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
487 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
488
489 bundle.Uninstall();
490 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
491 perMachinePkg.VerifyInstalled(false);
492 perUserPkg.VerifyInstalled(false);
493 pkg1.VerifyInstalled(false);
494 pkg2.VerifyInstalled(false);
495 }
496
497 [RuntimeFact]
498 public void PM_PU_PMOU_Bundle_PU_Plan_Installs_PerUserMostly()
499 {
500 var testBAController = this.CreateTestBAController();
501 testBAController.SetBundleScope(BundleScope.PerUser);
502
503 var bundle = this.CreateBundleInstaller("PmPuPmouBundleTestBA");
504 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
505 var perUserPkg = this.CreatePackageInstaller("PerUserPkg");
506 var pkg1 = this.CreatePackageInstaller("PmouPkg1");
507 var pkg2 = this.CreatePackageInstaller("PmouPkg2");
508 var log = bundle.Install();
509
510 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
511 perMachinePkg.VerifyInstalled();
512 perUserPkg.VerifyInstalled();
513 pkg1.VerifyInstalled();
514 pkg2.VerifyInstalled();
515
516 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: PerUser"));
517 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine,"));
518 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
519 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
520 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PmouPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser,"));
521
522 bundle.Uninstall();
523 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
524 perMachinePkg.VerifyInstalled(false);
525 perUserPkg.VerifyInstalled(false);
526 pkg1.VerifyInstalled(false);
527 pkg2.VerifyInstalled(false);
528 }
529
530 [RuntimeFact]
531 public void PM_PU_PUOM_Bundle_Default_Plan_Installs_PerUser()
532 {
533 var testBAController = this.CreateTestBAController();
534 testBAController.SetBundleScope(BundleScope.Default);
535
536 var bundle = this.CreateBundleInstaller("PmPuPuomBundleTestBA");
537 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
538 var perUserPkg = this.CreatePackageInstaller("PerUserPkg");
539 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
540 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
541 var log = bundle.Install();
542
543 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
544 perMachinePkg.VerifyInstalled();
545 perUserPkg.VerifyInstalled();
546 pkg1.VerifyInstalled();
547 pkg2.VerifyInstalled();
548
549 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: Default"));
550 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
551 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
552 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
553 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
554
555 bundle.Uninstall();
556 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
557 perMachinePkg.VerifyInstalled(false);
558 perUserPkg.VerifyInstalled(false);
559 pkg1.VerifyInstalled(false);
560 pkg2.VerifyInstalled(false);
561 }
562
563 [RuntimeFact]
564 public void PM_PU_PUOM_Bundle_PM_Plan_Installs_PerMachineMostly()
565 {
566 var testBAController = this.CreateTestBAController();
567 testBAController.SetBundleScope(BundleScope.PerMachine);
568
569 var bundle = this.CreateBundleInstaller("PmPuPuomBundleTestBA");
570 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
571 var perUserPkg = this.CreatePackageInstaller("PerUserPkg");
572 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
573 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
574 var log = bundle.Install();
575
576 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: true);
577 perMachinePkg.VerifyInstalled();
578 perUserPkg.VerifyInstalled();
579 pkg1.VerifyInstalled();
580 pkg2.VerifyInstalled();
581
582 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: PerMachine"));
583 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
584 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
585 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
586 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
587
588 bundle.Uninstall();
589 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: true);
590 perMachinePkg.VerifyInstalled(false);
591 perUserPkg.VerifyInstalled(false);
592 pkg1.VerifyInstalled(false);
593 pkg2.VerifyInstalled(false);
594 }
595
596 [RuntimeFact]
597 public void PM_PU_PUOM_Bundle_PU_Plan_Installs_PerUserMostly()
598 {
599 var testBAController = this.CreateTestBAController();
600 testBAController.SetBundleScope(BundleScope.PerUser);
601
602 var bundle = this.CreateBundleInstaller("PmPuPuomBundleTestBA");
603 var perMachinePkg = this.CreatePackageInstaller("PerMachinePkg");
604 var perUserPkg = this.CreatePackageInstaller("PerUserPkg");
605 var pkg1 = this.CreatePackageInstaller("PuomPkg1");
606 var pkg2 = this.CreatePackageInstaller("PuomPkg2");
607 var log = bundle.Install();
608
609 bundle.VerifyRegisteredAndInPackageCache(plannedPerMachine: false);
610 perMachinePkg.VerifyInstalled();
611 perUserPkg.VerifyInstalled();
612 pkg1.VerifyInstalled();
613 pkg2.VerifyInstalled();
614
615 Assert.True(LogVerifier.MessageInLogFile(log, "Plan begin, 5 packages, action: Install, planned scope: PerUser"));
616 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerMachinePkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerMachine"));
617 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PerUserPkg.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
618 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg1.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
619 Assert.True(LogVerifier.MessageInLogFile(log, "Planned package: PuomPkg2.msi, state: Absent, default requested: Present, ba requested: Present, execute: Install, rollback: Uninstall, scope: PerUser"));
620
621 bundle.Uninstall();
622 bundle.VerifyUnregisteredAndRemovedFromPackageCache(plannedPerMachine: false);
623 perMachinePkg.VerifyInstalled(false);
624 perUserPkg.VerifyInstalled(false);
625 pkg1.VerifyInstalled(false);
626 pkg2.VerifyInstalled(false);
627 }
628
629
630 }
631}
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/OptionalUpdateRegistrationTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/OptionalUpdateRegistrationTests.cs
index 3731b0cc..3e848fbd 100644
--- a/src/test/burn/WixToolsetTest.BurnE2E/OptionalUpdateRegistrationTests.cs
+++ b/src/test/burn/WixToolsetTest.BurnE2E/OptionalUpdateRegistrationTests.cs
@@ -20,11 +20,11 @@ namespace WixToolsetTest.BurnE2E
20 20
21 bundleAv1.Install(); 21 bundleAv1.Install();
22 bundleAv1.VerifyRegisteredAndInPackageCache(); 22 bundleAv1.VerifyRegisteredAndInPackageCache();
23 var gotV1Registration = bundleAv1.TryGetUpdateRegistration(out var v1Registration); 23 var gotV1Registration = bundleAv1.TryGetUpdateRegistration(plannedPerMachine: null, out var v1Registration);
24 24
25 bundleAv2.Install(); 25 bundleAv2.Install();
26 bundleAv2.VerifyRegisteredAndInPackageCache(); 26 bundleAv2.VerifyRegisteredAndInPackageCache();
27 var gotV2Registration = bundleAv2.TryGetUpdateRegistration(out var v2Registration); 27 var gotV2Registration = bundleAv2.TryGetUpdateRegistration(plannedPerMachine: null, out var v2Registration);
28 28
29 bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); 29 bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache();
30 30
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/Utilities/TestBAController.cs b/src/test/burn/WixToolsetTest.BurnE2E/Utilities/TestBAController.cs
index c344ebce..872e6954 100644
--- a/src/test/burn/WixToolsetTest.BurnE2E/Utilities/TestBAController.cs
+++ b/src/test/burn/WixToolsetTest.BurnE2E/Utilities/TestBAController.cs
@@ -72,6 +72,11 @@ namespace WixToolsetTest.BurnE2E
72 this.SetBurnTestValue("ForceUpdateSource", url); 72 this.SetBurnTestValue("ForceUpdateSource", url);
73 } 73 }
74 74
75 public void SetBundleScope(BundleScope scope)
76 {
77 this.SetBurnTestValue("BundleScope", scope.ToString());
78 }
79
75 /// <summary> 80 /// <summary>
76 /// Slows the cache progress of a package. 81 /// Slows the cache progress of a package.
77 /// </summary> 82 /// </summary>
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/runtests.cmd b/src/test/burn/WixToolsetTest.BurnE2E/runtests.cmd
index ecea18a0..f6950fb0 100644
--- a/src/test/burn/WixToolsetTest.BurnE2E/runtests.cmd
+++ b/src/test/burn/WixToolsetTest.BurnE2E/runtests.cmd
@@ -1,2 +1,4 @@
1SET RuntimeTestsEnabled=true 1SET RuntimeTestsEnabled=true
2dotnet test WixToolsetTest.BurnE2E.dll -v normal --logger trx 2dotnet test WixToolsetTest.BurnE2E.dll -v normal --logger trx;LogFileName=%TMP%\SandboxTests.trx
3
4ROBOCOPY /NFL /NDL /S /PURGE %TMP% C:\Build\SandboxLogs *.log *.trx