aboutsummaryrefslogtreecommitdiff
path: root/src/burn
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-09-15 14:51:55 -0500
committerSean Hall <r.sean.hall@gmail.com>2022-09-15 17:05:54 -0500
commitf1f75591bb723ac7358afa142307fe9574d59956 (patch)
tree6760496722be049aa66edfd40e5238711cd40cb5 /src/burn
parent86cb96db39f97aacf1ed78b1e95fefe15e54bee6 (diff)
downloadwix-f1f75591bb723ac7358afa142307fe9574d59956.tar.gz
wix-f1f75591bb723ac7358afa142307fe9574d59956.tar.bz2
wix-f1f75591bb723ac7358afa142307fe9574d59956.zip
Don't clean packages during layout.
Fixes 6871
Diffstat (limited to 'src/burn')
-rw-r--r--src/burn/engine/plan.cpp2
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp92
2 files changed, 93 insertions, 1 deletions
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index e6997b64..b7703869 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -871,7 +871,7 @@ static HRESULT PlanPackagesHelper(
871 } 871 }
872 872
873 // Passthrough packages are never cleaned up by the calling bundle (they delete themselves when appropriate). 873 // Passthrough packages are never cleaned up by the calling bundle (they delete themselves when appropriate).
874 if (!pPlan->fEnabledForwardCompatibleBundle) 874 if (!pPlan->fEnabledForwardCompatibleBundle && BOOTSTRAPPER_ACTION_LAYOUT != pPlan->action)
875 { 875 {
876 // Plan clean up of packages. 876 // Plan clean up of packages.
877 for (DWORD i = 0; i < cPackages; ++i) 877 for (DWORD i = 0; i < cPackages; ++i)
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index a98484c1..72ac1f9a 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -1358,6 +1358,88 @@ namespace Bootstrapper
1358 } 1358 }
1359 1359
1360 [Fact] 1360 [Fact]
1361 void SingleExeLayoutTest()
1362 {
1363 HRESULT hr = S_OK;
1364 BURN_ENGINE_STATE engineState = { };
1365 BURN_ENGINE_STATE* pEngineState = &engineState;
1366 BURN_PLAN* pPlan = &engineState.plan;
1367
1368 InitializeEngineStateForCorePlan(wzSingleExeManifestFileName, pEngineState);
1369 DetectAttachedContainerAsAttached(pEngineState);
1370 DetectPermanentPackagesAsPresentAndCached(pEngineState);
1371
1372 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_LAYOUT);
1373 NativeAssert::Succeeded(hr, "CorePlan failed");
1374
1375 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_LAYOUT, pPlan->action);
1376 NativeAssert::StringEqual(L"{9C184683-04FB-49AD-9D79-65101BDC3EE3}", pPlan->wzBundleId);
1377 NativeAssert::StringEqual(L"{9C184683-04FB-49AD-9D79-65101BDC3EE3}", pPlan->wzBundleProviderKey);
1378 Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle);
1379 Assert::Equal<BOOL>(FALSE, pPlan->fPerMachine);
1380 Assert::Equal<BOOL>(FALSE, pPlan->fCanAffectMachineState);
1381 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
1382 Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval);
1383 Assert::Equal<BOOL>(FALSE, pPlan->fDowngrade);
1384 Assert::Equal<DWORD>(0, pPlan->dwRegistrationOperations);
1385 Assert::True(0 != pPlan->sczLayoutDirectory);
1386 Assert::NotEqual<WCHAR>(0, *pPlan->sczLayoutDirectory);
1387
1388 BOOL fRollback = FALSE;
1389 DWORD dwIndex = 0;
1390 Assert::Equal(dwIndex, pPlan->cRegistrationActions);
1391
1392 fRollback = TRUE;
1393 dwIndex = 0;
1394 Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions);
1395
1396 fRollback = FALSE;
1397 dwIndex = 0;
1398 ValidateCacheLayoutBundle(pPlan, fRollback, dwIndex++);
1399 ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web", TRUE, BURN_CACHE_PACKAGE_TYPE_NONE, BURN_CACHE_PACKAGE_TYPE_NONE);
1400 ValidateCachePackage(pPlan, fRollback, dwIndex++, L"ExeA", TRUE, BURN_CACHE_PACKAGE_TYPE_NONE, BURN_CACHE_PACKAGE_TYPE_NONE);
1401 Assert::Equal(dwIndex, pPlan->cCacheActions);
1402
1403 fRollback = TRUE;
1404 dwIndex = 0;
1405 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
1406
1407 Assert::Equal(4321686ull, pPlan->qwCacheSizeTotal);
1408
1409 fRollback = FALSE;
1410 dwIndex = 0;
1411 DWORD dwExecuteCheckpointId = 1;
1412 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1413 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1414 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1415 Assert::Equal(dwIndex, pPlan->cExecuteActions);
1416
1417 fRollback = TRUE;
1418 dwIndex = 0;
1419 dwExecuteCheckpointId = 1;
1420 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1421 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1422 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1423 Assert::Equal(dwIndex, pPlan->cRollbackActions);
1424
1425 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
1426 Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal);
1427
1428 dwIndex = 0;
1429 Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions);
1430
1431 dwIndex = 0;
1432 Assert::Equal(dwIndex, pPlan->cCleanActions);
1433
1434 UINT uIndex = 0;
1435 ValidatePlannedProvider(pPlan, uIndex++, L"{9C184683-04FB-49AD-9D79-65101BDC3EE3}", NULL);
1436 Assert::Equal(uIndex, pPlan->cPlannedProviders);
1437
1438 Assert::Equal(2ul, pEngineState->packages.cPackages);
1439 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"ExeA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
1440 }
1441
1442 [Fact]
1361 void SingleMsiCacheTest() 1443 void SingleMsiCacheTest()
1362 { 1444 {
1363 HRESULT hr = S_OK; 1445 HRESULT hr = S_OK;
@@ -3169,6 +3251,16 @@ namespace Bootstrapper
3169 Assert::Equal(dwId, pAction->checkpoint.dwId); 3251 Assert::Equal(dwId, pAction->checkpoint.dwId);
3170 } 3252 }
3171 3253
3254 void ValidateCacheLayoutBundle(
3255 __in BURN_PLAN* pPlan,
3256 __in BOOL fRollback,
3257 __in DWORD dwIndex
3258 )
3259 {
3260 BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex);
3261 Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_LAYOUT_BUNDLE, pAction->type);
3262 }
3263
3172 DWORD ValidateCachePackage( 3264 DWORD ValidateCachePackage(
3173 __in BURN_PLAN* pPlan, 3265 __in BURN_PLAN* pPlan,
3174 __in BOOL fRollback, 3266 __in BOOL fRollback,