aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-03-10 18:18:38 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-03-11 20:24:18 -0600
commitaf68033509730ffe01602f839861a47287bb709f (patch)
tree2960f6cdd023e74a4ca2bbc49d0294b7bfbed5c5 /src/test
parent10ef9d5bfbf81f454113a1c2716009831a916222 (diff)
downloadwix-af68033509730ffe01602f839861a47287bb709f.tar.gz
wix-af68033509730ffe01602f839861a47287bb709f.tar.bz2
wix-af68033509730ffe01602f839861a47287bb709f.zip
Handle when related bundles have an uninstall key but aren't cached.
#4991
Diffstat (limited to 'src/test')
-rw-r--r--src/test/BurnUnitTest/PlanTest.cpp95
1 files changed, 93 insertions, 2 deletions
diff --git a/src/test/BurnUnitTest/PlanTest.cpp b/src/test/BurnUnitTest/PlanTest.cpp
index 40a61fe3..2a34cb16 100644
--- a/src/test/BurnUnitTest/PlanTest.cpp
+++ b/src/test/BurnUnitTest/PlanTest.cpp
@@ -293,6 +293,94 @@ namespace Bootstrapper
293 } 293 }
294 294
295 [Fact] 295 [Fact]
296 void RelatedBundleMissingFromCacheTest()
297 {
298 HRESULT hr = S_OK;
299 BURN_ENGINE_STATE engineState = { };
300 BURN_ENGINE_STATE* pEngineState = &engineState;
301 BURN_PLAN* pPlan = &engineState.plan;
302
303 InitializeEngineStateForCorePlan(wzSingleMsiManifestFileName, pEngineState);
304 DetectAttachedContainerAsAttached(pEngineState);
305 DetectPackagesAsAbsent(pEngineState);
306 BURN_RELATED_BUNDLE* pRelatedBundle = DetectUpgradeBundle(pEngineState, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", L"0.9.0.0");
307 pRelatedBundle->fPlannable = FALSE;
308
309 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_INSTALL);
310 NativeAssert::Succeeded(hr, "CorePlan failed");
311
312 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action);
313 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
314 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
315
316 BOOL fRollback = FALSE;
317 DWORD dwIndex = 0;
318 DWORD dwPackageStart = 0;
319 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
320 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", 5, 2, 33743, FALSE);
321 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2);
322 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart);
323 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ", TRUE, FALSE, dwPackageStart);
324 ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageA", FALSE);
325 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE);
326 Assert::Equal(dwIndex, pPlan->cCacheActions);
327
328 fRollback = TRUE;
329 dwIndex = 0;
330 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
331 ValidateCacheRollbackPackage(pPlan, fRollback, dwIndex++, L"PackageA", FALSE);
332 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
333
334 Assert::Equal(35694ull, pPlan->qwEstimatedSize);
335 Assert::Equal(33743ull, pPlan->qwCacheSizeTotal);
336
337 fRollback = FALSE;
338 dwIndex = 0;
339 DWORD dwExecuteCheckpointId = 2;
340 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
341 ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[6].syncpoint.hEvent);
342 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
343 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
344 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
345 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
346 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
347 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
348 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
349 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
350 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
351 Assert::Equal(dwIndex, pPlan->cExecuteActions);
352
353 fRollback = TRUE;
354 dwIndex = 0;
355 dwExecuteCheckpointId = 2;
356 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
357 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
358 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
359 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
360 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
361 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
362 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
363 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
364 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
365 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
366 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
367 Assert::Equal(dwIndex, pPlan->cRollbackActions);
368
369 Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
370 Assert::Equal(2ul, pPlan->cOverallProgressTicksTotal);
371
372 dwIndex = 0;
373 Assert::Equal(dwIndex, pPlan->cCleanActions);
374
375 UINT uIndex = 0;
376 ValidatePlannedProvider(pPlan, uIndex++, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", NULL);
377 Assert::Equal(uIndex, pPlan->cPlannedProviders);
378
379 Assert::Equal(1ul, pEngineState->packages.cPackages);
380 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT);
381 }
382
383 [Fact]
296 void SingleMsiCacheTest() 384 void SingleMsiCacheTest()
297 { 385 {
298 HRESULT hr = S_OK; 386 HRESULT hr = S_OK;
@@ -1041,7 +1129,7 @@ namespace Bootstrapper
1041 } 1129 }
1042 } 1130 }
1043 1131
1044 void DetectUpgradeBundle( 1132 BURN_RELATED_BUNDLE* DetectUpgradeBundle(
1045 __in BURN_ENGINE_STATE* pEngineState, 1133 __in BURN_ENGINE_STATE* pEngineState,
1046 __in LPCWSTR wzId, 1134 __in LPCWSTR wzId,
1047 __in LPCWSTR wzVersion 1135 __in LPCWSTR wzVersion
@@ -1067,12 +1155,15 @@ namespace Bootstrapper
1067 hr = VerParseVersion(wzVersion, 0, FALSE, &pRelatedBundle->pVersion); 1155 hr = VerParseVersion(wzVersion, 0, FALSE, &pRelatedBundle->pVersion);
1068 NativeAssert::Succeeded(hr, "Failed to parse pseudo bundle version: %ls", wzVersion); 1156 NativeAssert::Succeeded(hr, "Failed to parse pseudo bundle version: %ls", wzVersion);
1069 1157
1158 pRelatedBundle->fPlannable = TRUE;
1070 pRelatedBundle->relationType = BOOTSTRAPPER_RELATION_UPGRADE; 1159 pRelatedBundle->relationType = BOOTSTRAPPER_RELATION_UPGRADE;
1071 1160
1072 hr = PseudoBundleInitialize(0, &pRelatedBundle->package, TRUE, wzId, pRelatedBundle->relationType, BOOTSTRAPPER_PACKAGE_STATE_PRESENT, NULL, NULL, NULL, 0, FALSE, L"-quiet", L"-repair -quiet", L"-uninstall -quiet", &dependencyProvider, NULL, 0); 1161 hr = PseudoBundleInitialize(0, &pRelatedBundle->package, TRUE, wzId, pRelatedBundle->relationType, BOOTSTRAPPER_PACKAGE_STATE_PRESENT, BURN_CACHE_STATE_COMPLETE, NULL, NULL, NULL, 0, FALSE, L"-quiet", L"-repair -quiet", L"-uninstall -quiet", &dependencyProvider, NULL, 0);
1073 NativeAssert::Succeeded(hr, "Failed to initialize related bundle to represent bundle: %ls", wzId); 1162 NativeAssert::Succeeded(hr, "Failed to initialize related bundle to represent bundle: %ls", wzId);
1074 1163
1075 ++pRelatedBundles->cRelatedBundles; 1164 ++pRelatedBundles->cRelatedBundles;
1165
1166 return pRelatedBundle;
1076 } 1167 }
1077 1168
1078 void DetectAsRelatedUpgradeBundle( 1169 void DetectAsRelatedUpgradeBundle(