@joebigelow / wix / commits / 8701b067

WIXBUG:4539 - Fix overall Cache action planning with related bundles.

Sean Hall committed Dec 15, 2020 at 20:02 UTC 8701b06765803d1af0672df7cff533662990a82e
2 files changed +78
src/engine/plan.cpp
+6
@@ -1223,6 +1223,12 @@ extern "C" HRESULT PlanDefaultRelatedBundleRequestState(
1223 HRESULT hr = S_OK;
1224 int nCompareResult = 0;
1225
1226 + // Never touch related bundles during Cache.
1227 + if (BOOTSTRAPPER_ACTION_CACHE == action)
1228 + {
1229 + ExitFunction1(*pRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE);
1230 + }
1231 +
1232 switch (relatedBundleRelationType)
1233 {
1234 case BOOTSTRAPPER_RELATION_UPGRADE:
src/test/BurnUnitTest/PlanTest.cpp
+72
@@ -397,6 +397,78 @@ namespace Bootstrapper
397 Assert::Equal(uIndex, pPlan->cPlannedProviders);
398 }
399
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]
473 void SingleMsiInstallTest()
474 {