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
{