aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2020-12-15 20:02:53 -0600
committerSean Hall <r.sean.hall@gmail.com>2020-12-15 20:06:52 -0600
commit8701b06765803d1af0672df7cff533662990a82e (patch)
treebe1a7c698d77515b8cb9d20b735d1ed9ff6127ff
parent6ac2cf5c3dc2df77ba8be2cf12c624e1c4a20e18 (diff)
downloadwix-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.cpp6
-rw-r--r--src/test/BurnUnitTest/PlanTest.cpp72
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;