main
cs 1,109 lines 45.7 KB
Raw
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 namespace WixToolsetTest.BurnE2E
4 {
5 using System;
6 using WixTestTools;
7 using WixToolset.BootstrapperApplicationApi;
8 using Xunit;
9 using Xunit.Abstractions;
10
11 public class DependencyTests : BurnE2ETests
12 {
13 public DependencyTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
14
15 [RuntimeFact]
16 public void CanKeepSameExactPackageAfterUpgradingBundle()
17 {
18 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
19 var bundleKv1 = this.CreateBundleInstaller("BundleKv1");
20 var bundleKv2 = this.CreateBundleInstaller("BundleKv2");
21
22 packageFv1.VerifyInstalled(false);
23
24 bundleKv1.Install();
25 bundleKv1.VerifyRegisteredAndInPackageCache();
26
27 packageFv1.VerifyInstalled(true);
28
29 bundleKv2.Install();
30 bundleKv2.VerifyRegisteredAndInPackageCache();
31 bundleKv1.VerifyUnregisteredAndRemovedFromPackageCache();
32
33 packageFv1.VerifyInstalled(true);
34
35 bundleKv2.VerifyPackageIsCached("PackageF");
36
37 bundleKv2.Uninstall();
38 bundleKv2.VerifyUnregisteredAndRemovedFromPackageCache();
39
40 packageFv1.VerifyInstalled(false);
41 }
42
43 [RuntimeFact]
44 public void CanKeepSameExactPackageAfterUpgradingBundleWithSlipstreamedPatch()
45 {
46 var originalVersion = "1.0.0.0";
47 var patchedVersion = "1.0.1.0";
48 var testRegistryValue = "PackageA";
49 var testRegistryValueExe = "ExeA";
50
51 var packageA = this.CreatePackageInstaller("PackageAv1");
52 var bundleA = this.CreateBundleInstaller("BundleAv1");
53 var bundleC = this.CreateBundleInstaller("BundleC");
54
55 packageA.VerifyInstalled(false);
56
57 bundleA.Install();
58 bundleA.VerifyRegisteredAndInPackageCache();
59
60 packageA.VerifyInstalled(true);
61 packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion);
62 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, originalVersion);
63
64 // Verify https://github.com/wixtoolset/issues/issues/3294 - Uninstalling bundle registers a dependency on a package
65 bundleC.Install();
66 bundleC.VerifyRegisteredAndInPackageCache();
67 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
68
69 packageA.VerifyInstalled(true);
70 packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
71 bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
72
73 // Verify https://github.com/wixtoolset/issues/issues/2915 - Update bundle removes previously cached MSIs
74 bundleC.Repair();
75
76 bundleC.Uninstall();
77 bundleC.VerifyUnregisteredAndRemovedFromPackageCache();
78
79 packageA.VerifyInstalled(false);
80 }
81
82 [RuntimeFact]
83 public void CanKeepUpgradedPackageAfterUninstallUpgradedBundle()
84 {
85 var testRegistryValueExe = "ExeA";
86
87 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
88 var packageAv101 = this.CreatePackageInstaller("PackageAv1_0_1");
89 var packageB = this.CreatePackageInstaller("PackageB");
90 var bundleAv1 = this.CreateBundleInstaller("BundleAv1");
91 var bundleAv101 = this.CreateBundleInstaller("BundleAv1_0_1");
92 var bundleB = this.CreateBundleInstaller("BundleB");
93
94 packageAv1.VerifyInstalledWithVersion(false);
95 packageAv101.VerifyInstalledWithVersion(false);
96 packageB.VerifyInstalled(false);
97
98 bundleAv1.Install();
99 bundleAv1.VerifyRegisteredAndInPackageCache();
100
101 packageAv1.VerifyInstalledWithVersion(true);
102 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
103
104 bundleB.Install();
105 bundleB.VerifyRegisteredAndInPackageCache();
106
107 packageAv1.VerifyInstalledWithVersion(true);
108 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
109 packageB.VerifyInstalled(true);
110
111 bundleAv101.Install();
112 bundleAv101.VerifyRegisteredAndInPackageCache();
113 bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache();
114
115 packageAv1.VerifyInstalledWithVersion(false);
116 packageAv101.VerifyInstalledWithVersion(true);
117 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.1.0");
118
119 bundleAv101.Uninstall();
120 bundleAv101.VerifyUnregisteredAndRemovedFromPackageCache();
121
122 packageAv101.VerifyInstalledWithVersion(true);
123 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.1.0");
124 }
125
126 [RuntimeFact]
127 public void UninstallsOrphanCompatiblePackages()
128 {
129 var testRegistryValueExe = "ExeA";
130
131 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
132 var packageAv2 = this.CreatePackageInstaller("PackageAv2");
133 var packageB = this.CreatePackageInstaller("PackageB");
134 var bundleAv1 = this.CreateBundleInstaller("BundleAv1");
135 var bundleAv2 = this.CreateBundleInstaller("BundleAv2");
136 var bundleB = this.CreateBundleInstaller("BundleB");
137
138 packageAv1.VerifyInstalled(false);
139 packageAv2.VerifyInstalled(false);
140 packageB.VerifyInstalled(false);
141
142 bundleAv1.Install();
143 bundleAv1.VerifyRegisteredAndInPackageCache();
144
145 packageAv1.VerifyInstalled(true);
146 bundleAv1.VerifyPackageIsCached("PackageA");
147 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
148
149 bundleB.Install();
150 bundleB.VerifyRegisteredAndInPackageCache();
151
152 packageAv1.VerifyInstalled(true);
153 bundleAv1.VerifyPackageIsCached("PackageA");
154 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
155 packageB.VerifyInstalled(true);
156
157 bundleAv2.Install();
158 bundleAv2.VerifyRegisteredAndInPackageCache();
159 bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache();
160
161 packageAv1.VerifyInstalled(false);
162 bundleAv1.VerifyPackageIsCached("PackageA", false);
163 packageAv2.VerifyInstalled(true);
164 bundleAv2.VerifyPackageIsCached("PackageA");
165 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "2.0.0.0");
166
167 bundleAv2.Uninstall();
168 bundleAv2.VerifyUnregisteredAndRemovedFromPackageCache();
169
170 packageAv2.VerifyInstalled(true);
171 bundleAv2.VerifyPackageIsCached("PackageA");
172 bundleAv1.VerifyExeTestRegistryValue(testRegistryValueExe, "2.0.0.0");
173
174 // Verify https://github.com/wixtoolset/issues/issues/3190
175 bundleB.Uninstall();
176
177 packageAv1.VerifyInstalled(false);
178 packageAv2.VerifyInstalled(false);
179 bundleAv2.VerifyPackageIsCached("PackageA", false);
180 packageB.VerifyInstalled(false);
181 bundleAv1.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
182 }
183
184 [RuntimeFact]
185 public void CanMinorUpgradeDependencyPackageFromPatchBundle()
186 {
187 var originalVersion = "1.0.0.0";
188 var patchedVersion = "1.0.1.0";
189 var testRegistryValue = "PackageA";
190
191 var packageA = this.CreatePackageInstaller("PackageAv1");
192 var packageEv1 = this.CreatePackageInstaller("PackageEv1");
193 var packageEv101 = this.CreatePackageInstaller("PackageEv1_0_1");
194 var bundleJ = this.CreateBundleInstaller("BundleJ");
195 var bundleJ_Patch = this.CreateBundleInstaller("BundleJ_Patch");
196
197 packageA.VerifyInstalled(false);
198 packageEv1.VerifyInstalledWithVersion(false);
199 packageEv101.VerifyInstalledWithVersion(false);
200
201 bundleJ.Install();
202 if (this.SupportAddonAndPatchRelatedBundles)
203 {
204 bundleJ.VerifyRegisteredAndInPackageCache();
205
206 packageA.VerifyInstalled(true);
207 packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion);
208 packageEv1.VerifyInstalledWithVersion(true);
209 }
210
211 bundleJ_Patch.Install();
212 if (this.SupportAddonAndPatchRelatedBundles)
213 {
214 bundleJ_Patch.VerifyRegisteredAndInPackageCache();
215
216 packageA.VerifyInstalled(true);
217 packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
218 packageEv1.VerifyInstalledWithVersion(false);
219 packageEv101.VerifyInstalledWithVersion(true);
220 }
221
222 bundleJ.Uninstall();
223 if (this.SupportAddonAndPatchRelatedBundles)
224 {
225 bundleJ.VerifyUnregisteredAndRemovedFromPackageCache();
226 bundleJ_Patch.VerifyUnregisteredAndRemovedFromPackageCache();
227
228 packageA.VerifyInstalled(false);
229 packageEv1.VerifyInstalledWithVersion(false);
230 packageEv101.VerifyInstalledWithVersion(false);
231 }
232 }
233
234 [RuntimeFact]
235 public void CanMinorUpgradeDependencyPackageFromPatchBundleThenUninstallToRestoreBase()
236 {
237 var originalVersion = "1.0.0.0";
238 var patchedVersion = "1.0.1.0";
239 var testRegistryValue = "PackageA";
240
241 var packageA = this.CreatePackageInstaller("PackageAv1");
242 var packageEv1 = this.CreatePackageInstaller("PackageEv1");
243 var packageEv101 = this.CreatePackageInstaller("PackageEv1_0_1");
244 var bundleJ = this.CreateBundleInstaller("BundleJ");
245 var bundleJ_Patch = this.CreateBundleInstaller("BundleJ_Patch");
246
247 packageA.VerifyInstalled(false);
248 packageEv1.VerifyInstalledWithVersion(false);
249 packageEv101.VerifyInstalledWithVersion(false);
250
251 bundleJ.Install();
252 if (this.SupportAddonAndPatchRelatedBundles)
253 {
254 bundleJ.VerifyRegisteredAndInPackageCache();
255
256 packageA.VerifyInstalled(true);
257 packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion);
258 packageEv1.VerifyInstalledWithVersion(true);
259 }
260
261 bundleJ_Patch.Install();
262 if (this.SupportAddonAndPatchRelatedBundles)
263 {
264 bundleJ_Patch.VerifyRegisteredAndInPackageCache();
265
266 packageA.VerifyInstalled(true);
267 packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
268 packageEv1.VerifyInstalledWithVersion(false);
269 packageEv101.VerifyInstalledWithVersion(true);
270 }
271
272 bundleJ_Patch.Uninstall();
273 if (this.SupportAddonAndPatchRelatedBundles)
274 {
275 bundleJ_Patch.VerifyUnregisteredAndRemovedFromPackageCache();
276
277 packageA.VerifyInstalled(true);
278 packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion);
279 packageEv1.VerifyInstalledWithVersion(true);
280 packageEv101.VerifyInstalledWithVersion(false);
281 }
282
283 bundleJ.Uninstall();
284 if (this.SupportAddonAndPatchRelatedBundles)
285 {
286 bundleJ.VerifyUnregisteredAndRemovedFromPackageCache();
287
288 packageA.VerifyInstalled(false);
289 packageEv1.VerifyInstalledWithVersion(false);
290 packageEv101.VerifyInstalledWithVersion(false);
291 }
292 }
293
294 [RuntimeFact]
295 public void CanUninstallBaseWithAddOnsWhenAllSharePackages()
296 {
297 var testRegistryValueExe = "ExeA";
298
299 var packageA = this.CreatePackageInstaller("PackageAv1");
300 var packageB = this.CreatePackageInstaller("PackageB");
301 var bundleF = this.CreateBundleInstaller("BundleF");
302 var bundleF_AddOnA = this.CreateBundleInstaller("BundleF_AddOnA");
303 var bundleF_AddOnB = this.CreateBundleInstaller("BundleF_AddOnB");
304
305 packageA.VerifyInstalled(false);
306 packageB.VerifyInstalled(false);
307
308 bundleF.Install();
309 if (this.SupportAddonAndPatchRelatedBundles)
310 {
311 bundleF.VerifyRegisteredAndInPackageCache();
312
313 packageA.VerifyInstalled(true);
314 packageB.VerifyInstalled(true);
315 }
316
317 bundleF_AddOnA.Install();
318 if (this.SupportAddonAndPatchRelatedBundles)
319 {
320 bundleF_AddOnA.VerifyRegisteredAndInPackageCache();
321
322 packageA.VerifyInstalled(true);
323 bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
324 packageB.VerifyInstalled(true);
325 }
326
327 bundleF_AddOnB.Install();
328 if (this.SupportAddonAndPatchRelatedBundles)
329 {
330 bundleF_AddOnB.VerifyRegisteredAndInPackageCache();
331
332 packageA.VerifyInstalled(true);
333 bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
334 packageB.VerifyInstalled(true);
335 }
336
337 bundleF.Uninstall();
338 if (this.SupportAddonAndPatchRelatedBundles)
339 {
340 bundleF.VerifyUnregisteredAndRemovedFromPackageCache();
341 bundleF_AddOnA.VerifyUnregisteredAndRemovedFromPackageCache();
342 bundleF_AddOnB.VerifyUnregisteredAndRemovedFromPackageCache();
343
344 packageA.VerifyInstalled(false);
345 bundleF.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
346 packageB.VerifyInstalled(false);
347 }
348 }
349
350 [RuntimeFact]
351 public void CanUpgradeBaseWithAddOns()
352 {
353 var testRegistryValueExe = "ExeA";
354
355 var packageA = this.CreatePackageInstaller("PackageAv1");
356 var packageB = this.CreatePackageInstaller("PackageB");
357 var bundleF = this.CreateBundleInstaller("BundleF");
358 var bundleF_AddOnA = this.CreateBundleInstaller("BundleF_AddOnA");
359 var bundleF_AddOnB = this.CreateBundleInstaller("BundleF_AddOnB");
360 var bundleFv2 = this.CreateBundleInstaller("BundleFv2");
361
362 packageA.VerifyInstalled(false);
363 packageB.VerifyInstalled(false);
364
365 bundleF.Install();
366 if (this.SupportAddonAndPatchRelatedBundles)
367 {
368 bundleF.VerifyRegisteredAndInPackageCache();
369
370 packageA.VerifyInstalled(true);
371 packageB.VerifyInstalled(true);
372 }
373
374 bundleF_AddOnA.Install();
375 if (this.SupportAddonAndPatchRelatedBundles)
376 {
377 bundleF_AddOnA.VerifyRegisteredAndInPackageCache();
378
379 packageA.VerifyInstalled(true);
380 bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
381 packageB.VerifyInstalled(true);
382 }
383
384 bundleF_AddOnB.Install();
385 if (this.SupportAddonAndPatchRelatedBundles)
386 {
387 bundleF_AddOnB.VerifyRegisteredAndInPackageCache();
388
389 packageA.VerifyInstalled(true);
390 bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
391 packageB.VerifyInstalled(true);
392 }
393
394 bundleFv2.Install();
395 if (this.SupportAddonAndPatchRelatedBundles)
396 {
397 bundleFv2.VerifyRegisteredAndInPackageCache();
398 bundleF.VerifyUnregisteredAndRemovedFromPackageCache();
399 bundleF_AddOnA.VerifyRegisteredAndInPackageCache();
400 bundleF_AddOnB.VerifyRegisteredAndInPackageCache();
401
402 packageA.VerifyInstalled(true);
403 bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
404 packageB.VerifyInstalled(true);
405 }
406 }
407
408 [RuntimeFact]
409 public void CanUninstallDependencyPackagesWithBundlesUninstalledInFifoOrder()
410 {
411 var testRegistryValueExe = "ExeA";
412
413 var packageA = this.CreatePackageInstaller("PackageAv1");
414 var packageB = this.CreatePackageInstaller("PackageB");
415 var bundleA = this.CreateBundleInstaller("BundleAv1");
416 var bundleB = this.CreateBundleInstaller("BundleB");
417
418 packageA.VerifyInstalled(false);
419 packageB.VerifyInstalled(false);
420
421 bundleA.Install();
422 bundleA.VerifyRegisteredAndInPackageCache();
423
424 packageA.VerifyInstalled(true);
425 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
426
427 bundleB.Install();
428 bundleB.VerifyRegisteredAndInPackageCache();
429
430 packageA.VerifyInstalled(true);
431 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
432 packageB.VerifyInstalled(true);
433
434 bundleA.Uninstall();
435 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
436
437 packageA.VerifyInstalled(true);
438 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
439 packageB.VerifyInstalled(true);
440
441 bundleB.Uninstall();
442 bundleB.VerifyUnregisteredAndRemovedFromPackageCache();
443
444 packageA.VerifyInstalled(false);
445 bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
446 packageB.VerifyInstalled(false);
447 }
448
449 [RuntimeFact]
450 public void CanUninstallDependencyPackagesWithBundlesUninstalledInReverseOrder()
451 {
452 var packageA = this.CreatePackageInstaller("PackageAv1");
453 var packageB = this.CreatePackageInstaller("PackageB");
454 var bundleA = this.CreateBundleInstaller("BundleAv1");
455 var bundleB = this.CreateBundleInstaller("BundleB");
456
457 packageA.VerifyInstalled(false);
458 packageB.VerifyInstalled(false);
459
460 bundleA.Install();
461 bundleA.VerifyRegisteredAndInPackageCache();
462
463 packageA.VerifyInstalled(true);
464
465 bundleB.Install();
466 bundleB.VerifyRegisteredAndInPackageCache();
467
468 packageA.VerifyInstalled(true);
469 packageB.VerifyInstalled(true);
470
471 bundleB.Uninstall();
472 bundleB.VerifyUnregisteredAndRemovedFromPackageCache();
473
474 packageA.VerifyInstalled(true);
475
476 bundleA.Uninstall();
477 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
478
479 packageA.VerifyInstalled(false);
480 packageB.VerifyInstalled(false);
481 }
482
483 [RuntimeFact]
484 public void CanUpgradePatchBundleWithAdditionalPatch()
485 {
486 var originalVersion = "1.0.0.0";
487 var patchedVersion = "1.0.1.0";
488 var patchedVersion2 = "1.0.2.0";
489 var testRegistryValue = "PackageA";
490
491 var packageA = this.CreatePackageInstaller("PackageAv1");
492 var packageB = this.CreatePackageInstaller("PackageB");
493 var bundleF = this.CreateBundleInstaller("BundleF");
494 var bundleF_PatchAv101 = this.CreateBundleInstaller("BundleF_PatchAv1_0_1");
495 var bundleF_PatchAv102 = this.CreateBundleInstaller("BundleF_PatchAv1_0_2");
496
497 packageA.VerifyInstalled(false);
498 packageB.VerifyInstalled(false);
499
500 bundleF.Install();
501 if (this.SupportAddonAndPatchRelatedBundles)
502 {
503 bundleF.VerifyRegisteredAndInPackageCache();
504
505 packageA.VerifyInstalled(true);
506 packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion);
507 packageB.VerifyInstalled(true);
508 }
509
510 bundleF_PatchAv101.Install();
511 if (this.SupportAddonAndPatchRelatedBundles)
512 {
513 bundleF_PatchAv101.VerifyRegisteredAndInPackageCache();
514
515 packageA.VerifyInstalled(true);
516 packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
517 packageB.VerifyInstalled(false);
518 }
519
520 bundleF_PatchAv102.Install();
521 if (this.SupportAddonAndPatchRelatedBundles)
522 {
523 bundleF_PatchAv102.VerifyRegisteredAndInPackageCache();
524
525 packageA.VerifyInstalled(true);
526 packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion2);
527 packageB.VerifyInstalled(false);
528 }
529
530 bundleF.Uninstall();
531 if (this.SupportAddonAndPatchRelatedBundles)
532 {
533 bundleF.VerifyUnregisteredAndRemovedFromPackageCache();
534 bundleF_PatchAv101.VerifyUnregisteredAndRemovedFromPackageCache();
535 bundleF_PatchAv102.VerifyUnregisteredAndRemovedFromPackageCache();
536
537 packageA.VerifyInstalled(false);
538 packageB.VerifyInstalled(false);
539 }
540 }
541
542 [RuntimeFact]
543 public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsiFifo()
544 {
545 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
546 var packageC = this.CreatePackageInstaller("PackageC");
547 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
548 var packageFv2 = this.CreatePackageInstaller("PackageFv2");
549 var packageGv1 = this.CreatePackageInstaller("PackageGv1");
550 var packageGv2 = this.CreatePackageInstaller("PackageGv2");
551 var bundleM = this.CreateBundleInstaller("BundleM");
552 var bundleNv1 = this.CreateBundleInstaller("BundleNv1");
553 var bundleNv2 = this.CreateBundleInstaller("BundleNv2");
554 var testBAController = this.CreateTestBAController();
555
556 packageAv1.VerifyInstalled(false);
557 packageC.VerifyInstalled(false);
558 packageFv1.VerifyInstalled(false);
559 packageFv2.VerifyInstalled(false);
560 packageGv1.VerifyInstalled(false);
561 packageGv2.VerifyInstalled(false);
562
563 bundleM.Install();
564 bundleM.VerifyRegisteredAndInPackageCache();
565
566 packageAv1.VerifyInstalled(true);
567 packageFv1.VerifyInstalled(true);
568 packageFv2.VerifyInstalled(false);
569 packageGv1.VerifyInstalled(false);
570 packageGv2.VerifyInstalled(false);
571
572 bundleNv1.Install();
573 bundleNv1.VerifyRegisteredAndInPackageCache();
574
575 packageAv1.VerifyInstalled(true);
576 packageFv1.VerifyInstalled(true);
577 packageFv2.VerifyInstalled(false);
578 packageGv1.VerifyInstalled(true);
579 packageGv2.VerifyInstalled(false);
580
581 // Make PackageC fail.
582 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
583
584 bundleNv2.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT);
585 bundleNv2.VerifyUnregisteredAndRemovedFromPackageCache();
586 bundleNv1.VerifyRegisteredAndInPackageCache();
587
588 packageAv1.VerifyInstalled(true);
589 packageC.VerifyInstalled(false);
590 packageFv1.VerifyInstalled(true);
591 packageFv2.VerifyInstalled(false);
592 packageGv1.VerifyInstalled(true);
593 packageGv2.VerifyInstalled(false);
594
595 bundleM.Uninstall();
596 bundleM.VerifyUnregisteredAndRemovedFromPackageCache();
597
598 packageAv1.VerifyInstalled(false);
599 packageFv1.VerifyInstalled(true);
600 packageFv2.VerifyInstalled(false);
601 packageGv1.VerifyInstalled(true);
602 packageGv2.VerifyInstalled(false);
603
604 bundleNv1.Uninstall();
605 bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache();
606
607 packageAv1.VerifyInstalled(false);
608 packageFv1.VerifyInstalled(false);
609 packageFv2.VerifyInstalled(false);
610 packageGv1.VerifyInstalled(false);
611 packageGv2.VerifyInstalled(false);
612 }
613
614 [RuntimeFact]
615 public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsiLifo()
616 {
617 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
618 var packageC = this.CreatePackageInstaller("PackageC");
619 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
620 var packageFv2 = this.CreatePackageInstaller("PackageFv2");
621 var packageGv1 = this.CreatePackageInstaller("PackageGv1");
622 var packageGv2 = this.CreatePackageInstaller("PackageGv2");
623 var bundleM = this.CreateBundleInstaller("BundleM");
624 var bundleNv1 = this.CreateBundleInstaller("BundleNv1");
625 var bundleNv2 = this.CreateBundleInstaller("BundleNv2");
626 var testBAController = this.CreateTestBAController();
627
628 packageAv1.VerifyInstalled(false);
629 packageC.VerifyInstalled(false);
630 packageFv1.VerifyInstalled(false);
631 packageFv2.VerifyInstalled(false);
632 packageGv1.VerifyInstalled(false);
633 packageGv2.VerifyInstalled(false);
634
635 bundleM.Install();
636 bundleM.VerifyRegisteredAndInPackageCache();
637
638 packageAv1.VerifyInstalled(true);
639 packageFv1.VerifyInstalled(true);
640 packageFv2.VerifyInstalled(false);
641 packageGv1.VerifyInstalled(false);
642 packageGv2.VerifyInstalled(false);
643
644 bundleNv1.Install();
645 bundleNv1.VerifyRegisteredAndInPackageCache();
646
647 packageAv1.VerifyInstalled(true);
648 packageFv1.VerifyInstalled(true);
649 packageFv2.VerifyInstalled(false);
650 packageGv1.VerifyInstalled(true);
651 packageGv2.VerifyInstalled(false);
652
653 // Make PackageC fail.
654 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
655
656 bundleNv2.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT);
657 bundleNv2.VerifyUnregisteredAndRemovedFromPackageCache();
658 bundleNv1.VerifyRegisteredAndInPackageCache();
659
660 packageAv1.VerifyInstalled(true);
661 packageC.VerifyInstalled(false);
662 packageFv1.VerifyInstalled(true);
663 packageFv2.VerifyInstalled(false);
664 packageGv1.VerifyInstalled(true);
665 packageGv2.VerifyInstalled(false);
666
667 bundleNv1.Uninstall();
668 bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache();
669
670 packageAv1.VerifyInstalled(true);
671 packageFv1.VerifyInstalled(true);
672 packageFv2.VerifyInstalled(false);
673 packageGv1.VerifyInstalled(false);
674 packageGv2.VerifyInstalled(false);
675
676 bundleM.Uninstall();
677 bundleM.VerifyUnregisteredAndRemovedFromPackageCache();
678
679 packageAv1.VerifyInstalled(false);
680 packageFv1.VerifyInstalled(false);
681 packageFv2.VerifyInstalled(false);
682 packageGv1.VerifyInstalled(false);
683 packageGv2.VerifyInstalled(false);
684 }
685
686 [RuntimeFact]
687 public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsiFifo()
688 {
689 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
690 var packageC = this.CreatePackageInstaller("PackageC");
691 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
692 var packageFv101 = this.CreatePackageInstaller("PackageFv1_0_1");
693 var packageGv1 = this.CreatePackageInstaller("PackageGv1");
694 var packageGv101 = this.CreatePackageInstaller("PackageGv1_0_1");
695 var bundleM = this.CreateBundleInstaller("BundleM");
696 var bundleNv1 = this.CreateBundleInstaller("BundleNv1");
697 var bundleNv101 = this.CreateBundleInstaller("BundleNv1_0_1");
698 var testBAController = this.CreateTestBAController();
699
700 packageAv1.VerifyInstalled(false);
701 packageC.VerifyInstalled(false);
702 packageFv1.VerifyInstalledWithVersion(false);
703 packageFv101.VerifyInstalledWithVersion(false);
704 packageGv1.VerifyInstalledWithVersion(false);
705 packageGv101.VerifyInstalledWithVersion(false);
706
707 bundleM.Install();
708 bundleM.VerifyRegisteredAndInPackageCache();
709
710 packageAv1.VerifyInstalled(true);
711 packageFv1.VerifyInstalledWithVersion(true);
712 packageFv101.VerifyInstalledWithVersion(false);
713 packageGv1.VerifyInstalledWithVersion(false);
714 packageGv101.VerifyInstalledWithVersion(false);
715
716 bundleNv1.Install();
717 bundleNv1.VerifyRegisteredAndInPackageCache();
718
719 packageAv1.VerifyInstalled(true);
720 packageFv1.VerifyInstalledWithVersion(true);
721 packageFv101.VerifyInstalledWithVersion(false);
722 packageGv1.VerifyInstalledWithVersion(true);
723 packageGv101.VerifyInstalledWithVersion(false);
724
725 // Make PackageC fail.
726 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
727
728 // Verify https://github.com/wixtoolset/issues/issues/6510 - Dependency provider removed on rollback even though package is not rolled back
729 bundleNv101.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT);
730 bundleNv101.VerifyUnregisteredAndRemovedFromPackageCache();
731 bundleNv1.VerifyRegisteredAndInPackageCache();
732
733 packageAv1.VerifyInstalled(true);
734 packageC.VerifyInstalled(false);
735 packageFv1.VerifyInstalledWithVersion(true);
736 packageFv101.VerifyInstalledWithVersion(false);
737 packageGv1.VerifyInstalledWithVersion(true);
738 packageGv101.VerifyInstalledWithVersion(false);
739
740 bundleM.Uninstall();
741 bundleM.VerifyUnregisteredAndRemovedFromPackageCache();
742
743 packageAv1.VerifyInstalled(false);
744 packageFv1.VerifyInstalledWithVersion(true);
745 packageFv101.VerifyInstalledWithVersion(false);
746 packageGv1.VerifyInstalledWithVersion(true);
747 packageGv101.VerifyInstalledWithVersion(false);
748
749 bundleNv1.Uninstall();
750 bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache();
751
752 packageAv1.VerifyInstalled(false);
753 packageFv1.VerifyInstalledWithVersion(false);
754 packageFv101.VerifyInstalledWithVersion(false);
755 packageGv1.VerifyInstalledWithVersion(false);
756 packageGv101.VerifyInstalledWithVersion(false);
757 }
758
759 [RuntimeFact]
760 public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsiLifo()
761 {
762 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
763 var packageC = this.CreatePackageInstaller("PackageC");
764 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
765 var packageFv101 = this.CreatePackageInstaller("PackageFv1_0_1");
766 var packageGv1 = this.CreatePackageInstaller("PackageGv1");
767 var packageGv101 = this.CreatePackageInstaller("PackageGv1_0_1");
768 var bundleM = this.CreateBundleInstaller("BundleM");
769 var bundleNv1 = this.CreateBundleInstaller("BundleNv1");
770 var bundleNv101 = this.CreateBundleInstaller("BundleNv1_0_1");
771 var testBAController = this.CreateTestBAController();
772
773 packageAv1.VerifyInstalled(false);
774 packageC.VerifyInstalled(false);
775 packageFv1.VerifyInstalledWithVersion(false);
776 packageFv101.VerifyInstalledWithVersion(false);
777 packageGv1.VerifyInstalledWithVersion(false);
778 packageGv101.VerifyInstalledWithVersion(false);
779
780 bundleM.Install();
781 bundleM.VerifyRegisteredAndInPackageCache();
782
783 packageAv1.VerifyInstalled(true);
784 packageFv1.VerifyInstalledWithVersion(true);
785 packageFv101.VerifyInstalledWithVersion(false);
786 packageGv1.VerifyInstalledWithVersion(false);
787 packageGv101.VerifyInstalledWithVersion(false);
788
789 bundleNv1.Install();
790 bundleNv1.VerifyRegisteredAndInPackageCache();
791
792 packageAv1.VerifyInstalled(true);
793 packageFv1.VerifyInstalledWithVersion(true);
794 packageFv101.VerifyInstalledWithVersion(false);
795 packageGv1.VerifyInstalledWithVersion(true);
796 packageGv101.VerifyInstalledWithVersion(false);
797
798 // Make PackageC fail.
799 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
800
801 // Verify https://github.com/wixtoolset/issues/issues/6510 - Dependency provider removed on rollback even though package is not rolled back
802 bundleNv101.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT);
803 bundleNv101.VerifyUnregisteredAndRemovedFromPackageCache();
804 bundleNv1.VerifyRegisteredAndInPackageCache();
805
806 packageAv1.VerifyInstalled(true);
807 packageC.VerifyInstalled(false);
808 packageFv1.VerifyInstalledWithVersion(true);
809 packageFv101.VerifyInstalledWithVersion(false);
810 packageGv1.VerifyInstalledWithVersion(true);
811 packageGv101.VerifyInstalledWithVersion(false);
812
813 bundleNv1.Uninstall();
814 bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache();
815
816 packageAv1.VerifyInstalled(true);
817 packageFv1.VerifyInstalledWithVersion(true);
818 packageFv101.VerifyInstalledWithVersion(false);
819 packageGv1.VerifyInstalledWithVersion(false);
820 packageGv101.VerifyInstalledWithVersion(false);
821
822 bundleM.Uninstall();
823 bundleM.VerifyUnregisteredAndRemovedFromPackageCache();
824
825 packageAv1.VerifyInstalled(false);
826 packageFv1.VerifyInstalledWithVersion(false);
827 packageFv101.VerifyInstalledWithVersion(false);
828 packageGv1.VerifyInstalledWithVersion(false);
829 packageGv101.VerifyInstalledWithVersion(false);
830 }
831
832 [RuntimeFact]
833 public void DoesntRegisterDependencyOnPackageNotSelectedForInstall()
834 {
835 var testRegistryValueExe = "ExeA";
836
837 var packageA = this.CreatePackageInstaller("PackageAv1");
838 var packageB = this.CreatePackageInstaller("PackageB");
839 var bundleA = this.CreateBundleInstaller("BundleAv1");
840 var bundleB = this.CreateBundleInstaller("BundleB");
841 var testBAController = this.CreateTestBAController();
842
843 packageA.VerifyInstalled(false);
844 packageB.VerifyInstalled(false);
845
846 bundleA.Install();
847 bundleA.VerifyRegisteredAndInPackageCache();
848
849 packageA.VerifyInstalled(true);
850 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
851
852 // Verify https://github.com/wixtoolset/issues/issues/3456 - Dependency registered on package though unselected to instal
853 testBAController.SetPackageRequestedState("PackageA", RequestState.None);
854 testBAController.SetPackageRequestedState("PackageB", RequestState.None);
855
856 bundleB.Install();
857 bundleB.VerifyRegisteredAndInPackageCache();
858
859 packageA.VerifyInstalled(true);
860 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
861 packageB.VerifyInstalled(false);
862
863 testBAController.ResetPackageStates("PackageA");
864 testBAController.ResetPackageStates("PackageB");
865
866 bundleA.Uninstall();
867 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
868
869 packageA.VerifyInstalled(false);
870 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
871 packageB.VerifyInstalled(false);
872
873 bundleB.Uninstall();
874 bundleB.VerifyUnregisteredAndRemovedFromPackageCache();
875
876 packageA.VerifyInstalled(false);
877 bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
878 packageB.VerifyInstalled(false);
879 }
880
881 [RuntimeFact(Skip = "https://github.com/wixtoolset/issues/issues/3516")]
882 public void DoesntRollbackPackageInstallIfPreexistingDependents()
883 {
884 var packageA = this.CreatePackageInstaller("PackageAv1");
885 var packageC = this.CreatePackageInstaller("PackageC");
886 var bundleE = this.CreateBundleInstaller("BundleE");
887 var bundleL = this.CreateBundleInstaller("BundleL");
888 var testBAController = this.CreateTestBAController();
889
890 packageA.VerifyInstalled(false);
891 packageC.VerifyInstalled(false);
892
893 // Make PackageC fail.
894 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
895
896 bundleE.Install();
897 bundleE.VerifyRegisteredAndInPackageCache();
898
899 packageA.VerifyInstalled(true);
900 packageC.VerifyInstalled(false);
901
902 // Make PackageC install then rollback.
903 testBAController.SetPackageCancelExecuteAtProgress("PackageC", null);
904 testBAController.SetPackageCancelOnProgressAtProgress("PackageC", 10);
905
906 bundleL.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT);
907 bundleL.VerifyUnregisteredAndRemovedFromPackageCache();
908
909 packageA.VerifyInstalled(true);
910 packageC.VerifyInstalled(true);
911
912 testBAController.SetPackageCancelOnProgressAtProgress("PackageC", null);
913
914 bundleE.Uninstall();
915 bundleE.VerifyUnregisteredAndRemovedFromPackageCache();
916
917 packageA.VerifyInstalled(false);
918 packageC.VerifyInstalled(false);
919 }
920
921 [RuntimeFact]
922 public void RegistersDependencyOnFailedNonVitalPackages()
923 {
924 var packageA = this.CreatePackageInstaller("PackageAv1");
925 var packageC = this.CreatePackageInstaller("PackageC");
926 var bundleE = this.CreateBundleInstaller("BundleE");
927 var bundleL = this.CreateBundleInstaller("BundleL");
928 var testBAController = this.CreateTestBAController();
929
930 packageA.VerifyInstalled(false);
931 packageC.VerifyInstalled(false);
932
933 // Make PackageC fail.
934 testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10);
935
936 // Verify https://github.com/wixtoolset/issues/issues/3406 - Non-vital failure result in bundle failure (install)
937 bundleE.Install();
938 bundleE.VerifyRegisteredAndInPackageCache();
939
940 packageA.VerifyInstalled(true);
941 packageC.VerifyInstalled(false);
942
943 // Verify https://github.com/wixtoolset/issues/issues/3406 - Non-vital failure result in bundle failure (repair)
944 bundleE.Repair();
945 bundleE.VerifyRegisteredAndInPackageCache();
946
947 packageA.VerifyInstalled(true);
948 packageC.VerifyInstalled(false);
949
950 testBAController.SetPackageCancelExecuteAtProgress("PackageC", null);
951
952 bundleL.Install();
953 bundleL.VerifyRegisteredAndInPackageCache();
954
955 packageA.VerifyInstalled(true);
956 packageC.VerifyInstalled(true);
957
958 // Verify https://github.com/wixtoolset/issues/issues/3516 - Burn registers dependency on failed packages
959 bundleL.Uninstall();
960 bundleL.VerifyUnregisteredAndRemovedFromPackageCache();
961
962 packageA.VerifyInstalled(true);
963 packageC.VerifyInstalled(true);
964
965 bundleE.Uninstall();
966 bundleE.VerifyUnregisteredAndRemovedFromPackageCache();
967
968 packageA.VerifyInstalled(false);
969 packageC.VerifyInstalled(false);
970 }
971
972 [RuntimeFact]
973 public void RemovesDependencyDuringUpgradeRollback()
974 {
975 var testRegistryValueExe = "ExeA";
976
977 var packageA = this.CreatePackageInstaller("PackageAv1");
978 var bundleA = this.CreateBundleInstaller("BundleAv1");
979 var bundleD = this.CreateBundleInstaller("BundleD");
980
981 packageA.VerifyInstalled(false);
982 bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
983
984 bundleA.Install();
985 bundleA.VerifyRegisteredAndInPackageCache();
986
987 packageA.VerifyInstalled(true);
988 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
989
990 // Verify https://github.com/wixtoolset/issues/issues/3341 - pkg dependecy not removed in rollback if pkg already present
991 bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
992 bundleD.VerifyUnregisteredAndRemovedFromPackageCache();
993
994 packageA.VerifyInstalled(true);
995 bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0");
996
997 bundleA.Uninstall();
998 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
999
1000 packageA.VerifyInstalled(false);
1001 bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe);
1002 }
1003
1004 [RuntimeFact]
1005 public void RemovesDependencyProviderFromUpgradedPackageDuringUninstall()
1006 {
1007 var packageC = this.CreatePackageInstaller("PackageC");
1008 var packageFv1 = this.CreatePackageInstaller("PackageFv1");
1009 var packageFv2 = this.CreatePackageInstaller("PackageFv2");
1010 var packageGv1 = this.CreatePackageInstaller("PackageGv1");
1011 var packageGv2 = this.CreatePackageInstaller("PackageGv2");
1012 var bundleNv1 = this.CreateBundleInstaller("BundleNv1");
1013 var bundleNv2 = this.CreateBundleInstaller("BundleNv2");
1014
1015 packageC.VerifyInstalled(false);
1016 packageFv1.VerifyInstalled(false);
1017 packageFv2.VerifyInstalled(false);
1018 packageGv1.VerifyInstalled(false);
1019 packageGv2.VerifyInstalled(false);
1020
1021 bundleNv1.Install();
1022 bundleNv1.VerifyRegisteredAndInPackageCache();
1023
1024 packageC.VerifyInstalled(false);
1025 packageFv1.VerifyInstalled(true);
1026 packageFv2.VerifyInstalled(false);
1027 packageGv1.VerifyInstalled(true);
1028 packageGv2.VerifyInstalled(false);
1029
1030 // Verify https://github.com/wixtoolset/issues/issues/3850 - Dependency provider not removed on uninstall from upgrade
1031 bundleNv2.Install();
1032 bundleNv2.VerifyRegisteredAndInPackageCache();
1033 bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache();
1034
1035 packageC.VerifyInstalled(true);
1036 packageFv1.VerifyInstalled(false);
1037 packageFv2.VerifyInstalled(true);
1038 packageGv1.VerifyInstalled(false);
1039 packageGv2.VerifyInstalled(true);
1040
1041 bundleNv1.VerifyPackageIsCached("PackageF", false);
1042 bundleNv1.VerifyPackageIsCached("PackageG", false);
1043 bundleNv1.VerifyPackageProviderRemoved("PackageF");
1044 bundleNv1.VerifyPackageProviderRemoved("PackageG");
1045 }
1046
1047 [RuntimeFact]
1048 public void SkipsCrossScopeDependencyRegistration()
1049 {
1050 var packageA = this.CreatePackageInstaller("PackageAv1");
1051 var packageDv1 = this.CreatePackageInstaller("PackageDv1");
1052 var packageDv2 = this.CreatePackageInstaller("PackageDv2");
1053 var bundleHv1 = this.CreateBundleInstaller("BundleHv1");
1054 var bundleHv2 = this.CreateBundleInstaller("BundleHv2");
1055
1056 packageA.VerifyInstalled(false);
1057 packageDv1.VerifyInstalled(false);
1058 packageDv2.VerifyInstalled(false);
1059
1060 var bundleHv1InstallLogFilePath = bundleHv1.Install();
1061 bundleHv1.VerifyRegisteredAndInPackageCache();
1062
1063 packageA.VerifyInstalled(true);
1064 packageDv1.VerifyInstalled(true);
1065
1066 Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv1InstallLogFilePath, @"Skipping cross-scope dependency registration on package: PackageA, bundle scope: PerUser, package scope: PerMachine"));
1067
1068 var bundleHv2InstallLogFilePath = bundleHv2.Install();
1069 bundleHv2.VerifyRegisteredAndInPackageCache();
1070 bundleHv1.VerifyUnregisteredAndRemovedFromPackageCache();
1071
1072 packageA.VerifyInstalled(true);
1073 packageDv1.VerifyInstalled(false);
1074 packageDv2.VerifyInstalled(true);
1075
1076 Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv2InstallLogFilePath, @"Skipping cross-scope dependency registration on package: PackageA, bundle scope: PerUser, package scope: PerMachine"));
1077 Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv2InstallLogFilePath, @"Detected related bundle: \{[0-9A-Za-z\-]{36}\}, type: Upgrade, scope: PerUser, version: 1\.0\.0\.0, cached: Yes"));
1078 Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv2InstallLogFilePath, @"Detected related package: \{[0-9A-Za-z\-]{36}\}, scope: PerUser, version: 1.0.0.0, language: 0 operation: MajorUpgrade"));
1079
1080 bundleHv2.Uninstall();
1081 bundleHv2.VerifyUnregisteredAndRemovedFromPackageCache();
1082
1083 // Verify that permanent packageA is still installed and then remove.
1084 packageA.VerifyInstalled(true);
1085 packageDv2.VerifyInstalled(false);
1086 packageA.UninstallProduct();
1087 packageA.VerifyInstalled(false);
1088 }
1089
1090 [RuntimeFact]
1091 public void CannotInstallWhenDependencyUnsatisfied()
1092 {
1093 var packageA = this.CreatePackageInstaller("PackageAv1");
1094 var packageB = this.CreatePackageInstaller("PackageB");
1095 var bundleB = this.CreateBundleInstaller("BundleB");
1096 var testBAController = this.CreateTestBAController();
1097
1098 packageA.VerifyInstalled(false);
1099 packageB.VerifyInstalled(false);
1100
1101 // Prevent install of PackageA to cause PackageB's enforced dependency
1102 // to fail the install.
1103 testBAController.SetPackageRequestedState("PackageA", RequestState.None);
1104
1105 var bundleBInstallLogFilePath = bundleB.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE);
1106 Assert.True(LogVerifier.MessageInLogFileRegex(bundleBInstallLogFilePath, @"Applied execute package: PackageB, result: 0x80070643, restart: None"));
1107 }
1108 }
1109 }