diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2021-03-10 18:18:38 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2021-03-11 20:24:18 -0600 |
commit | af68033509730ffe01602f839861a47287bb709f (patch) | |
tree | 2960f6cdd023e74a4ca2bbc49d0294b7bfbed5c5 /src/test | |
parent | 10ef9d5bfbf81f454113a1c2716009831a916222 (diff) | |
download | wix-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.cpp | 95 |
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( |