diff options
Diffstat (limited to 'src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs')
-rw-r--r-- | src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs | 611 |
1 files changed, 611 insertions, 0 deletions
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs new file mode 100644 index 00000000..d563bbe7 --- /dev/null +++ b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs | |||
@@ -0,0 +1,611 @@ | |||
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.Mba.Core; | ||
8 | using Xunit; | ||
9 | using Xunit.Abstractions; | ||
10 | |||
11 | public class DependencyTests : BurnE2ETests | ||
12 | { | ||
13 | public DependencyTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } | ||
14 | |||
15 | [Fact] | ||
16 | public void CanKeepSameExactPackageAfterUpgradingBundle() | ||
17 | { | ||
18 | var packageF = this.CreatePackageInstaller("PackageF"); | ||
19 | var bundleKv1 = this.CreateBundleInstaller("BundleKv1"); | ||
20 | var bundleKv2 = this.CreateBundleInstaller("BundleKv2"); | ||
21 | |||
22 | packageF.VerifyInstalled(false); | ||
23 | |||
24 | bundleKv1.Install(); | ||
25 | bundleKv1.VerifyRegisteredAndInPackageCache(); | ||
26 | |||
27 | packageF.VerifyInstalled(true); | ||
28 | |||
29 | bundleKv2.Install(); | ||
30 | bundleKv2.VerifyRegisteredAndInPackageCache(); | ||
31 | bundleKv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
32 | |||
33 | packageF.VerifyInstalled(true); | ||
34 | |||
35 | bundleKv2.VerifyPackageIsCached("PackageF"); | ||
36 | |||
37 | bundleKv2.Uninstall(); | ||
38 | bundleKv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
39 | |||
40 | packageF.VerifyInstalled(false); | ||
41 | } | ||
42 | |||
43 | [Fact (Skip = "https://github.com/wixtoolset/issues/issues/6387")] | ||
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 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/exea")] | ||
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 | #if SUPPORT_ADDON_AND_PATCH_RELATED_BUNDLES | ||
127 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6387")] | ||
128 | #else | ||
129 | [Fact(Skip = "addon/patch related bundle")] | ||
130 | #endif | ||
131 | public void CanMinorUpgradeDependencyPackageFromPatchBundle() | ||
132 | { | ||
133 | var originalVersion = "1.0.0.0"; | ||
134 | var patchedVersion = "1.0.1.0"; | ||
135 | var testRegistryValue = "PackageA"; | ||
136 | |||
137 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
138 | var packageBv1 = this.CreatePackageInstaller("PackageBv1"); | ||
139 | var packageBv101 = this.CreatePackageInstaller("PackageBv1_0_1"); | ||
140 | var bundleJ = this.CreateBundleInstaller("BundleJ"); | ||
141 | var bundleJ_Patch = this.CreateBundleInstaller("BundleJ_Patch"); | ||
142 | |||
143 | packageA.VerifyInstalled(false); | ||
144 | packageBv1.VerifyInstalled(false); | ||
145 | packageBv101.VerifyInstalled(false); | ||
146 | |||
147 | bundleJ.Install(); | ||
148 | bundleJ.VerifyRegisteredAndInPackageCache(); | ||
149 | |||
150 | packageA.VerifyInstalled(true); | ||
151 | packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
152 | packageBv1.VerifyInstalled(true); | ||
153 | |||
154 | bundleJ_Patch.Install(); | ||
155 | bundleJ_Patch.VerifyRegisteredAndInPackageCache(); | ||
156 | |||
157 | packageA.VerifyInstalled(true); | ||
158 | packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion); | ||
159 | packageBv1.VerifyInstalled(false); | ||
160 | packageBv101.VerifyInstalled(true); | ||
161 | |||
162 | bundleJ.Uninstall(); | ||
163 | bundleJ.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
164 | bundleJ_Patch.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
165 | |||
166 | packageA.VerifyInstalled(false); | ||
167 | packageBv1.VerifyInstalled(false); | ||
168 | packageBv101.VerifyInstalled(false); | ||
169 | } | ||
170 | |||
171 | #if SUPPORT_ADDON_AND_PATCH_RELATED_BUNDLES | ||
172 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6387")] | ||
173 | #else | ||
174 | [Fact(Skip = "addon/patch related bundle")] | ||
175 | #endif | ||
176 | public void CanMinorUpgradeDependencyPackageFromPatchBundleThenUninstallToRestoreBase() | ||
177 | { | ||
178 | var originalVersion = "1.0.0.0"; | ||
179 | var patchedVersion = "1.0.1.0"; | ||
180 | var testRegistryValue = "PackageA"; | ||
181 | |||
182 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
183 | var packageBv1 = this.CreatePackageInstaller("PackageBv1"); | ||
184 | var packageBv101 = this.CreatePackageInstaller("PackageBv1_0_1"); | ||
185 | var bundleJ = this.CreateBundleInstaller("BundleJ"); | ||
186 | var bundleJ_Patch = this.CreateBundleInstaller("BundleJ_Patch"); | ||
187 | |||
188 | packageA.VerifyInstalled(false); | ||
189 | packageBv1.VerifyInstalled(false); | ||
190 | packageBv101.VerifyInstalled(false); | ||
191 | |||
192 | bundleJ.Install(); | ||
193 | bundleJ.VerifyRegisteredAndInPackageCache(); | ||
194 | |||
195 | packageA.VerifyInstalled(true); | ||
196 | packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
197 | packageBv1.VerifyInstalled(true); | ||
198 | |||
199 | bundleJ_Patch.Install(); | ||
200 | bundleJ_Patch.VerifyRegisteredAndInPackageCache(); | ||
201 | |||
202 | packageA.VerifyInstalled(true); | ||
203 | packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion); | ||
204 | packageBv1.VerifyInstalled(false); | ||
205 | packageBv101.VerifyInstalled(true); | ||
206 | |||
207 | bundleJ_Patch.Uninstall(); | ||
208 | bundleJ_Patch.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
209 | |||
210 | packageA.VerifyInstalled(true); | ||
211 | packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
212 | packageBv1.VerifyInstalled(true); | ||
213 | packageBv101.VerifyInstalled(false); | ||
214 | |||
215 | bundleJ.Uninstall(); | ||
216 | bundleJ.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
217 | |||
218 | packageA.VerifyInstalled(false); | ||
219 | packageBv1.VerifyInstalled(false); | ||
220 | packageBv101.VerifyInstalled(false); | ||
221 | } | ||
222 | |||
223 | #if SUPPORT_ADDON_AND_PATCH_RELATED_BUNDLES | ||
224 | [Fact] | ||
225 | #else | ||
226 | [Fact(Skip = "addon/patch related bundle")] | ||
227 | #endif | ||
228 | public void CanUninstallBaseWithAddOnsWhenAllSharePackages() | ||
229 | { | ||
230 | var testRegistryValueExe = "ExeA"; | ||
231 | |||
232 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
233 | var packageB = this.CreatePackageInstaller("PackageB"); | ||
234 | var bundleF = this.CreateBundleInstaller("BundleF"); | ||
235 | var bundleF_AddOnA = this.CreateBundleInstaller("BundleF_AddOnA"); | ||
236 | var bundleF_AddOnB = this.CreateBundleInstaller("BundleF_AddOnB"); | ||
237 | |||
238 | packageA.VerifyInstalled(false); | ||
239 | packageB.VerifyInstalled(false); | ||
240 | |||
241 | bundleF.Install(); | ||
242 | bundleF.VerifyRegisteredAndInPackageCache(); | ||
243 | |||
244 | packageA.VerifyInstalled(true); | ||
245 | packageB.VerifyInstalled(true); | ||
246 | |||
247 | bundleF_AddOnA.Install(); | ||
248 | bundleF_AddOnA.VerifyRegisteredAndInPackageCache(); | ||
249 | |||
250 | packageA.VerifyInstalled(true); | ||
251 | bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
252 | packageB.VerifyInstalled(true); | ||
253 | |||
254 | bundleF_AddOnB.Install(); | ||
255 | bundleF_AddOnB.VerifyRegisteredAndInPackageCache(); | ||
256 | |||
257 | packageA.VerifyInstalled(true); | ||
258 | bundleF.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
259 | packageB.VerifyInstalled(true); | ||
260 | |||
261 | bundleF.Uninstall(); | ||
262 | bundleF.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
263 | bundleF_AddOnA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
264 | bundleF_AddOnB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
265 | |||
266 | packageA.VerifyInstalled(false); | ||
267 | bundleF.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); | ||
268 | packageB.VerifyInstalled(false); | ||
269 | } | ||
270 | |||
271 | [Fact] | ||
272 | public void CanUninstallDependencyPackagesWithBundlesUninstalledInFifoOrder() | ||
273 | { | ||
274 | var testRegistryValueExe = "ExeA"; | ||
275 | |||
276 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
277 | var packageB = this.CreatePackageInstaller("PackageB"); | ||
278 | var bundleA = this.CreateBundleInstaller("BundleAv1"); | ||
279 | var bundleB = this.CreateBundleInstaller("BundleB"); | ||
280 | |||
281 | packageA.VerifyInstalled(false); | ||
282 | packageB.VerifyInstalled(false); | ||
283 | |||
284 | bundleA.Install(); | ||
285 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
286 | |||
287 | packageA.VerifyInstalled(true); | ||
288 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
289 | |||
290 | bundleB.Install(); | ||
291 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
292 | |||
293 | packageA.VerifyInstalled(true); | ||
294 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
295 | packageB.VerifyInstalled(true); | ||
296 | |||
297 | bundleA.Uninstall(); | ||
298 | bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
299 | |||
300 | packageA.VerifyInstalled(true); | ||
301 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
302 | packageB.VerifyInstalled(true); | ||
303 | |||
304 | bundleB.Uninstall(); | ||
305 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
306 | |||
307 | packageA.VerifyInstalled(false); | ||
308 | bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); | ||
309 | packageB.VerifyInstalled(false); | ||
310 | } | ||
311 | |||
312 | [Fact] | ||
313 | public void CanUninstallDependencyPackagesWithBundlesUninstalledInReverseOrder() | ||
314 | { | ||
315 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
316 | var packageB = this.CreatePackageInstaller("PackageB"); | ||
317 | var bundleA = this.CreateBundleInstaller("BundleAv1"); | ||
318 | var bundleB = this.CreateBundleInstaller("BundleB"); | ||
319 | |||
320 | packageA.VerifyInstalled(false); | ||
321 | packageB.VerifyInstalled(false); | ||
322 | |||
323 | bundleA.Install(); | ||
324 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
325 | |||
326 | packageA.VerifyInstalled(true); | ||
327 | |||
328 | bundleB.Install(); | ||
329 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
330 | |||
331 | packageA.VerifyInstalled(true); | ||
332 | packageB.VerifyInstalled(true); | ||
333 | |||
334 | bundleB.Uninstall(); | ||
335 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
336 | |||
337 | packageA.VerifyInstalled(true); | ||
338 | |||
339 | bundleA.Uninstall(); | ||
340 | bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
341 | |||
342 | packageA.VerifyInstalled(false); | ||
343 | packageB.VerifyInstalled(false); | ||
344 | } | ||
345 | |||
346 | #if SUPPORT_ADDON_AND_PATCH_RELATED_BUNDLES | ||
347 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6387")] | ||
348 | #else | ||
349 | [Fact(Skip = "addon/patch related bundle")] | ||
350 | #endif | ||
351 | public void CanUpgradePatchBundleWithAdditionalPatch() | ||
352 | { | ||
353 | var originalVersion = "1.0.0.0"; | ||
354 | var patchedVersion = "1.0.1.0"; | ||
355 | var patchedVersion2 = "1.0.2.0"; | ||
356 | var testRegistryValue = "PackageA"; | ||
357 | |||
358 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
359 | var packageB = this.CreatePackageInstaller("PackageBv1"); | ||
360 | var bundleF = this.CreateBundleInstaller("BundleJ"); | ||
361 | var bundleF_PatchAv101 = this.CreateBundleInstaller("BundleF_PatchAv1_0_1"); | ||
362 | var bundleF_PatchAv102 = this.CreateBundleInstaller("BundleF_PatchAv1_0_2"); | ||
363 | |||
364 | packageA.VerifyInstalled(false); | ||
365 | packageB.VerifyInstalled(false); | ||
366 | |||
367 | bundleF.Install(); | ||
368 | bundleF.VerifyRegisteredAndInPackageCache(); | ||
369 | |||
370 | packageA.VerifyInstalled(true); | ||
371 | packageA.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
372 | packageB.VerifyInstalled(true); | ||
373 | |||
374 | bundleF_PatchAv101.Install(); | ||
375 | bundleF_PatchAv101.VerifyRegisteredAndInPackageCache(); | ||
376 | |||
377 | packageA.VerifyInstalled(true); | ||
378 | packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion); | ||
379 | packageB.VerifyInstalled(false); | ||
380 | |||
381 | bundleF_PatchAv102.Install(); | ||
382 | bundleF_PatchAv102.VerifyRegisteredAndInPackageCache(); | ||
383 | |||
384 | packageA.VerifyInstalled(true); | ||
385 | packageA.VerifyTestRegistryValue(testRegistryValue, patchedVersion2); | ||
386 | packageB.VerifyInstalled(false); | ||
387 | |||
388 | bundleF.Uninstall(); | ||
389 | bundleF.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
390 | bundleF_PatchAv101.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
391 | bundleF_PatchAv102.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
392 | |||
393 | packageA.VerifyInstalled(false); | ||
394 | packageB.VerifyInstalled(false); | ||
395 | } | ||
396 | |||
397 | [Fact] | ||
398 | public void DoesntRegisterDependencyOnPackageNotSelectedForInstall() | ||
399 | { | ||
400 | var testRegistryValueExe = "ExeA"; | ||
401 | |||
402 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
403 | var packageB = this.CreatePackageInstaller("PackageB"); | ||
404 | var bundleA = this.CreateBundleInstaller("BundleAv1"); | ||
405 | var bundleB = this.CreateBundleInstaller("BundleB"); | ||
406 | var testBAController = this.CreateTestBAController(); | ||
407 | |||
408 | packageA.VerifyInstalled(false); | ||
409 | packageB.VerifyInstalled(false); | ||
410 | |||
411 | bundleA.Install(); | ||
412 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
413 | |||
414 | packageA.VerifyInstalled(true); | ||
415 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
416 | |||
417 | // Verify https://github.com/wixtoolset/issues/issues/3456 - Dependency registered on package though unselected to instal | ||
418 | testBAController.SetPackageRequestedState("PackageA", RequestState.None); | ||
419 | testBAController.SetPackageRequestedState("PackageB", RequestState.None); | ||
420 | |||
421 | bundleB.Install(); | ||
422 | bundleB.VerifyRegisteredAndInPackageCache(); | ||
423 | |||
424 | packageA.VerifyInstalled(true); | ||
425 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
426 | packageB.VerifyInstalled(false); | ||
427 | |||
428 | testBAController.ResetPackageStates("PackageA"); | ||
429 | testBAController.ResetPackageStates("PackageB"); | ||
430 | |||
431 | bundleA.Uninstall(); | ||
432 | bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
433 | |||
434 | packageA.VerifyInstalled(false); | ||
435 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
436 | packageB.VerifyInstalled(false); | ||
437 | |||
438 | bundleB.Uninstall(); | ||
439 | bundleB.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
440 | |||
441 | packageA.VerifyInstalled(false); | ||
442 | bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); | ||
443 | packageB.VerifyInstalled(false); | ||
444 | } | ||
445 | |||
446 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/3516")] | ||
447 | public void DoesntRollbackPackageInstallIfPreexistingDependents() | ||
448 | { | ||
449 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
450 | var packageC = this.CreatePackageInstaller("PackageC"); | ||
451 | var bundleE = this.CreateBundleInstaller("BundleE"); | ||
452 | var bundleL = this.CreateBundleInstaller("BundleL"); | ||
453 | var testBAController = this.CreateTestBAController(); | ||
454 | |||
455 | packageA.VerifyInstalled(false); | ||
456 | packageC.VerifyInstalled(false); | ||
457 | |||
458 | // Make PackageC fail. | ||
459 | testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); | ||
460 | |||
461 | bundleE.Install(); | ||
462 | bundleE.VerifyRegisteredAndInPackageCache(); | ||
463 | |||
464 | packageA.VerifyInstalled(true); | ||
465 | packageC.VerifyInstalled(false); | ||
466 | |||
467 | // Make PackageC install then rollback. | ||
468 | testBAController.SetPackageCancelExecuteAtProgress("PackageC", null); | ||
469 | testBAController.SetPackageCancelOnProgressAtProgress("PackageC", 10); | ||
470 | |||
471 | bundleL.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); | ||
472 | bundleL.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
473 | |||
474 | packageA.VerifyInstalled(true); | ||
475 | packageC.VerifyInstalled(true); | ||
476 | |||
477 | testBAController.SetPackageCancelOnProgressAtProgress("PackageC", null); | ||
478 | |||
479 | bundleE.Uninstall(); | ||
480 | bundleE.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
481 | |||
482 | packageA.VerifyInstalled(false); | ||
483 | packageC.VerifyInstalled(false); | ||
484 | } | ||
485 | |||
486 | [Fact] | ||
487 | public void RegistersDependencyOnFailedNonVitalPackages() | ||
488 | { | ||
489 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
490 | var packageC = this.CreatePackageInstaller("PackageC"); | ||
491 | var bundleE = this.CreateBundleInstaller("BundleE"); | ||
492 | var bundleL = this.CreateBundleInstaller("BundleL"); | ||
493 | var testBAController = this.CreateTestBAController(); | ||
494 | |||
495 | packageA.VerifyInstalled(false); | ||
496 | packageC.VerifyInstalled(false); | ||
497 | |||
498 | // Make PackageC fail. | ||
499 | testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); | ||
500 | |||
501 | // Verify https://github.com/wixtoolset/issues/issues/3406 - Non-vital failure result in bundle failure (install) | ||
502 | bundleE.Install(); | ||
503 | bundleE.VerifyRegisteredAndInPackageCache(); | ||
504 | |||
505 | packageA.VerifyInstalled(true); | ||
506 | packageC.VerifyInstalled(false); | ||
507 | |||
508 | // Verify https://github.com/wixtoolset/issues/issues/3406 - Non-vital failure result in bundle failure (repair) | ||
509 | bundleE.Repair(); | ||
510 | bundleE.VerifyRegisteredAndInPackageCache(); | ||
511 | |||
512 | packageA.VerifyInstalled(true); | ||
513 | packageC.VerifyInstalled(false); | ||
514 | |||
515 | testBAController.SetPackageCancelExecuteAtProgress("PackageC", null); | ||
516 | |||
517 | bundleL.Install(); | ||
518 | bundleL.VerifyRegisteredAndInPackageCache(); | ||
519 | |||
520 | packageA.VerifyInstalled(true); | ||
521 | packageC.VerifyInstalled(true); | ||
522 | |||
523 | // Verify https://github.com/wixtoolset/issues/issues/3516 - Burn registers dependency on failed packages | ||
524 | bundleL.Uninstall(); | ||
525 | bundleL.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
526 | |||
527 | packageA.VerifyInstalled(true); | ||
528 | packageC.VerifyInstalled(true); | ||
529 | |||
530 | bundleE.Uninstall(); | ||
531 | bundleE.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
532 | |||
533 | packageA.VerifyInstalled(false); | ||
534 | packageC.VerifyInstalled(false); | ||
535 | } | ||
536 | |||
537 | [Fact] | ||
538 | public void RemovesDependencyDuringUpgradeRollback() | ||
539 | { | ||
540 | var testRegistryValueExe = "ExeA"; | ||
541 | |||
542 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
543 | var bundleA = this.CreateBundleInstaller("BundleAv1"); | ||
544 | var bundleD = this.CreateBundleInstaller("BundleD"); | ||
545 | |||
546 | packageA.VerifyInstalled(false); | ||
547 | bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); | ||
548 | |||
549 | bundleA.Install(); | ||
550 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
551 | |||
552 | packageA.VerifyInstalled(true); | ||
553 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
554 | |||
555 | // Verify https://github.com/wixtoolset/issues/issues/3341 - pkg dependecy not removed in rollback if pkg already present | ||
556 | bundleD.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_FAILURE); | ||
557 | bundleD.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
558 | |||
559 | packageA.VerifyInstalled(true); | ||
560 | bundleA.VerifyExeTestRegistryValue(testRegistryValueExe, "1.0.0.0"); | ||
561 | |||
562 | bundleA.Uninstall(); | ||
563 | bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
564 | |||
565 | packageA.VerifyInstalled(false); | ||
566 | bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); | ||
567 | } | ||
568 | |||
569 | [Fact] | ||
570 | public void SkipsCrossScopeDependencyRegistration() | ||
571 | { | ||
572 | var packageA = this.CreatePackageInstaller("PackageAv1"); | ||
573 | var packageDv1 = this.CreatePackageInstaller("PackageDv1"); | ||
574 | var packageDv2 = this.CreatePackageInstaller("PackageDv2"); | ||
575 | var bundleHv1 = this.CreateBundleInstaller("BundleHv1"); | ||
576 | var bundleHv2 = this.CreateBundleInstaller("BundleHv2"); | ||
577 | |||
578 | packageA.VerifyInstalled(false); | ||
579 | packageDv1.VerifyInstalled(false); | ||
580 | packageDv2.VerifyInstalled(false); | ||
581 | |||
582 | var bundleHv1InstallLogFilePath = bundleHv1.Install(); | ||
583 | bundleHv1.VerifyRegisteredAndInPackageCache(); | ||
584 | |||
585 | packageA.VerifyInstalled(true); | ||
586 | packageDv1.VerifyInstalled(true); | ||
587 | |||
588 | Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv1InstallLogFilePath, @"Skipping cross-scope dependency registration on package: PackageA, bundle scope: PerUser, package scope: PerMachine")); | ||
589 | |||
590 | var bundleHv2InstallLogFilePath = bundleHv2.Install(); | ||
591 | bundleHv2.VerifyRegisteredAndInPackageCache(); | ||
592 | bundleHv1.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
593 | |||
594 | packageA.VerifyInstalled(true); | ||
595 | packageDv1.VerifyInstalled(false); | ||
596 | packageDv2.VerifyInstalled(true); | ||
597 | |||
598 | Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv2InstallLogFilePath, @"Skipping cross-scope dependency registration on package: PackageA, bundle scope: PerUser, package scope: PerMachine")); | ||
599 | Assert.True(LogVerifier.MessageInLogFileRegex(bundleHv2InstallLogFilePath, @"Detected related bundle: \{[0-9A-Za-z\-]{36}\}, type: Upgrade, scope: PerUser, version: 1\.0\.0\.0, operation: MajorUpgrade, cached: Yes")); | ||
600 | |||
601 | bundleHv2.Uninstall(); | ||
602 | bundleHv2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
603 | |||
604 | // Verify that permanent packageA is still installed and then remove. | ||
605 | packageA.VerifyInstalled(true); | ||
606 | packageDv2.VerifyInstalled(false); | ||
607 | packageA.UninstallProduct(); | ||
608 | packageA.VerifyInstalled(false); | ||
609 | } | ||
610 | } | ||
611 | } | ||