diff options
author | Sean Hall <r.sean.hall@gmail.com> | 2020-12-15 20:02:53 -0600 |
---|---|---|
committer | Sean Hall <r.sean.hall@gmail.com> | 2020-12-15 20:06:52 -0600 |
commit | 8701b06765803d1af0672df7cff533662990a82e (patch) | |
tree | be1a7c698d77515b8cb9d20b735d1ed9ff6127ff | |
parent | 6ac2cf5c3dc2df77ba8be2cf12c624e1c4a20e18 (diff) | |
download | wix-8701b06765803d1af0672df7cff533662990a82e.tar.gz wix-8701b06765803d1af0672df7cff533662990a82e.tar.bz2 wix-8701b06765803d1af0672df7cff533662990a82e.zip |
WIXBUG:4539 - Fix overall Cache action planning with related bundles.
-rw-r--r-- | src/engine/plan.cpp | 6 | ||||
-rw-r--r-- | src/test/BurnUnitTest/PlanTest.cpp | 72 |
2 files changed, 78 insertions, 0 deletions
diff --git a/src/engine/plan.cpp b/src/engine/plan.cpp index 990ef554..ccb7b3ce 100644 --- a/src/engine/plan.cpp +++ b/src/engine/plan.cpp | |||
@@ -1223,6 +1223,12 @@ extern "C" HRESULT PlanDefaultRelatedBundleRequestState( | |||
1223 | HRESULT hr = S_OK; | 1223 | HRESULT hr = S_OK; |
1224 | int nCompareResult = 0; | 1224 | int nCompareResult = 0; |
1225 | 1225 | ||
1226 | // Never touch related bundles during Cache. | ||
1227 | if (BOOTSTRAPPER_ACTION_CACHE == action) | ||
1228 | { | ||
1229 | ExitFunction1(*pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE); | ||
1230 | } | ||
1231 | |||
1226 | switch (relatedBundleRelationType) | 1232 | switch (relatedBundleRelationType) |
1227 | { | 1233 | { |
1228 | case BOOTSTRAPPER_RELATION_UPGRADE: | 1234 | case BOOTSTRAPPER_RELATION_UPGRADE: |
diff --git a/src/test/BurnUnitTest/PlanTest.cpp b/src/test/BurnUnitTest/PlanTest.cpp index d3b10678..5b3dca8d 100644 --- a/src/test/BurnUnitTest/PlanTest.cpp +++ b/src/test/BurnUnitTest/PlanTest.cpp | |||
@@ -398,6 +398,78 @@ namespace Bootstrapper | |||
398 | } | 398 | } |
399 | 399 | ||
400 | [Fact] | 400 | [Fact] |
401 | void SingleMsiCacheTest() | ||
402 | { | ||
403 | HRESULT hr = S_OK; | ||
404 | BURN_ENGINE_STATE engineState = { }; | ||
405 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
406 | BURN_PLAN* pPlan = &engineState.plan; | ||
407 | |||
408 | InitializeEngineStateForCorePlan(wzSingleMsiManifest, pEngineState); | ||
409 | DetectAttachedContainerAsAttached(pEngineState); | ||
410 | DetectPackagesAsAbsent(pEngineState); | ||
411 | DetectUpgradeBundle(pEngineState, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", L"0.9.0.0"); | ||
412 | |||
413 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_CACHE); | ||
414 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
415 | |||
416 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_CACHE, pPlan->action); | ||
417 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
418 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
419 | Assert::Equal<BOOL>(FALSE, pPlan->fKeepRegistrationDefault); | ||
420 | |||
421 | BOOL fRollback = FALSE; | ||
422 | DWORD dwIndex = 0; | ||
423 | DWORD dwPackageStart = 0; | ||
424 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | ||
425 | dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageE", 5, 2, 33741, FALSE); | ||
426 | ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2); | ||
427 | ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageE", L"PackageE", TRUE, FALSE, dwPackageStart); | ||
428 | ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageE", L"cabkAPka1fWa1PyiVdoVPuoB6Qvs3k", TRUE, FALSE, dwPackageStart); | ||
429 | ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageE", FALSE); | ||
430 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE); | ||
431 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
432 | |||
433 | fRollback = TRUE; | ||
434 | dwIndex = 0; | ||
435 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
436 | |||
437 | Assert::Equal(0ull, pPlan->qwEstimatedSize); | ||
438 | Assert::Equal(33741ull, pPlan->qwCacheSizeTotal); | ||
439 | |||
440 | fRollback = FALSE; | ||
441 | dwIndex = 0; | ||
442 | DWORD dwExecuteCheckpointId = 2; | ||
443 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
444 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[6].syncpoint.hEvent); | ||
445 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
446 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
447 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
448 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
449 | |||
450 | fRollback = TRUE; | ||
451 | dwIndex = 0; | ||
452 | dwExecuteCheckpointId = 2; | ||
453 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
454 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageE"); | ||
455 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
456 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageE", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
457 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
458 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
459 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
460 | |||
461 | Assert::Equal(0ul, pPlan->cExecutePackagesTotal); | ||
462 | Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal); | ||
463 | |||
464 | dwIndex = 0; | ||
465 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
466 | |||
467 | UINT uIndex = 0; | ||
468 | ValidatePlannedProvider(pPlan, uIndex++, L"{4a04385a-0081-44ba-acd1-9e4e95cfc97f}", NULL); | ||
469 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
470 | } | ||
471 | |||
472 | [Fact] | ||
401 | void SingleMsiInstallTest() | 473 | void SingleMsiInstallTest() |
402 | { | 474 | { |
403 | HRESULT hr = S_OK; | 475 | HRESULT hr = S_OK; |