aboutsummaryrefslogtreecommitdiff
path: root/src/burn/test/BurnUnitTest/PlanTest.cpp
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2022-03-07 16:23:59 -0600
committerSean Hall <r.sean.hall@gmail.com>2022-03-07 17:00:05 -0600
commitfc41b90c2746c78ec7b1d7f9a14686ddc09fed12 (patch)
tree262dc1bfe541aa3fa78381cdef14498632f232c0 /src/burn/test/BurnUnitTest/PlanTest.cpp
parent5a6c681b28c953d809292b4b85c80af300d7902f (diff)
downloadwix-fc41b90c2746c78ec7b1d7f9a14686ddc09fed12.tar.gz
wix-fc41b90c2746c78ec7b1d7f9a14686ddc09fed12.tar.bz2
wix-fc41b90c2746c78ec7b1d7f9a14686ddc09fed12.zip
Read Uninstallable from manifest and add test for non-uninstallable exe
Last part of 6459
Diffstat (limited to 'src/burn/test/BurnUnitTest/PlanTest.cpp')
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index 685d2ca9..881a960a 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -12,6 +12,7 @@ static HRESULT WINAPI PlanTestBAProc(
12static LPCWSTR wzMsiTransactionManifestFileName = L"MsiTransaction_BundleAv1_manifest.xml"; 12static LPCWSTR wzMsiTransactionManifestFileName = L"MsiTransaction_BundleAv1_manifest.xml";
13static LPCWSTR wzSingleMsiManifestFileName = L"BasicFunctionality_BundleA_manifest.xml"; 13static LPCWSTR wzSingleMsiManifestFileName = L"BasicFunctionality_BundleA_manifest.xml";
14static LPCWSTR wzSlipstreamManifestFileName = L"Slipstream_BundleA_manifest.xml"; 14static LPCWSTR wzSlipstreamManifestFileName = L"Slipstream_BundleA_manifest.xml";
15static LPCWSTR wzSlipstreamModifiedManifestFileName = L"Slipstream_BundleA_modified_manifest.xml";
15 16
16static BOOL vfUsePackageRequestState = FALSE; 17static BOOL vfUsePackageRequestState = FALSE;
17static BOOTSTRAPPER_REQUEST_STATE vPackageRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE; 18static BOOTSTRAPPER_REQUEST_STATE vPackageRequestState = BOOTSTRAPPER_REQUEST_STATE_NONE;
@@ -1283,6 +1284,188 @@ namespace Bootstrapper
1283 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[2], L"PatchA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT); 1284 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[2], L"PatchA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
1284 } 1285 }
1285 1286
1287 [Fact]
1288 void UnuninstallableExePackageForceAbsentTest()
1289 {
1290 HRESULT hr = S_OK;
1291 BURN_ENGINE_STATE engineState = { };
1292 BURN_ENGINE_STATE* pEngineState = &engineState;
1293 BURN_PLAN* pPlan = &engineState.plan;
1294
1295 InitializeEngineStateForCorePlan(wzSlipstreamModifiedManifestFileName, pEngineState);
1296 DetectPackagesAsPresentAndCached(pEngineState);
1297
1298 vfUsePackageRequestState = TRUE;
1299 vPackageRequestState = BOOTSTRAPPER_REQUEST_STATE_FORCE_ABSENT;
1300
1301 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL);
1302 NativeAssert::Succeeded(hr, "CorePlan failed");
1303
1304 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action);
1305 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
1306 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
1307
1308 BOOL fRollback = FALSE;
1309 DWORD dwIndex = 0;
1310 Assert::Equal(dwIndex, pPlan->cCacheActions);
1311
1312 fRollback = TRUE;
1313 dwIndex = 0;
1314 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
1315
1316 Assert::Equal(0ull, pPlan->qwEstimatedSize);
1317 Assert::Equal(0ull, pPlan->qwCacheSizeTotal);
1318
1319 fRollback = FALSE;
1320 dwIndex = 0;
1321 DWORD dwExecuteCheckpointId = 1;
1322 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1323 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1324 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", unregisterActions1, 1);
1325 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1326 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
1327 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1328 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1329 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1330 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1331 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1332 Assert::Equal(dwIndex, pPlan->cExecuteActions);
1333
1334 fRollback = TRUE;
1335 dwIndex = 0;
1336 dwExecuteCheckpointId = 1;
1337 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1338 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", registerActions1, 1);
1339 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1340 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
1341 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1342 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1343 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1344 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1345 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1346 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1347 Assert::Equal(dwIndex, pPlan->cRollbackActions);
1348
1349 Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
1350 Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal);
1351
1352 dwIndex = 0;
1353 Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions);
1354
1355 dwIndex = 0;
1356 ValidateCleanAction(pPlan, dwIndex++, L"PackageA");
1357 Assert::Equal(dwIndex, pPlan->cCleanActions);
1358
1359 UINT uIndex = 0;
1360 ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL);
1361 ValidatePlannedProvider(pPlan, uIndex++, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", NULL);
1362 Assert::Equal(uIndex, pPlan->cPlannedProviders);
1363
1364 Assert::Equal(2ul, pEngineState->packages.cPackages);
1365 ValidatePermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"NetFx48Web");
1366 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
1367 }
1368
1369 [Fact]
1370 void UnuninstallableExePackageInstallTest()
1371 {
1372 HRESULT hr = S_OK;
1373 BURN_ENGINE_STATE engineState = { };
1374 BURN_ENGINE_STATE* pEngineState = &engineState;
1375 BURN_PLAN* pPlan = &engineState.plan;
1376
1377 InitializeEngineStateForCorePlan(wzSlipstreamModifiedManifestFileName, pEngineState);
1378 DetectPackagesAsAbsent(pEngineState);
1379
1380 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_INSTALL);
1381 NativeAssert::Succeeded(hr, "CorePlan failed");
1382
1383 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action);
1384 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
1385 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
1386
1387 BOOL fRollback = FALSE;
1388 DWORD dwIndex = 0;
1389 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
1390 ValidateCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
1391 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++);
1392 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 4);
1393 ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
1394 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++);
1395 Assert::Equal(dwIndex, pPlan->cCacheActions);
1396
1397 fRollback = TRUE;
1398 dwIndex = 0;
1399 ValidateCacheRollbackPackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
1400 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
1401 ValidateCacheRollbackPackage(pPlan, fRollback, dwIndex++, L"PackageA");
1402 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 4);
1403 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
1404
1405 Assert::Equal(2993671ull, pPlan->qwEstimatedSize);
1406 Assert::Equal(6048672ull, pPlan->qwCacheSizeTotal);
1407
1408 fRollback = FALSE;
1409 dwIndex = 0;
1410 DWORD dwExecuteCheckpointId = 2;
1411 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1412 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1413 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
1414 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web", BOOTSTRAPPER_ACTION_STATE_INSTALL);
1415 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1416 dwExecuteCheckpointId += 1; // cache checkpoints
1417 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1418 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
1419 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1420 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1);
1421 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1422 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1423 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1424 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", registerActions1, 1);
1425 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1426 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1427 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1428 Assert::Equal(dwIndex, pPlan->cExecuteActions);
1429
1430 fRollback = TRUE;
1431 dwIndex = 0;
1432 dwExecuteCheckpointId = 2;
1433 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
1434 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
1435 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1436 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1437 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
1438 dwExecuteCheckpointId += 1; // cache checkpoints
1439 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1440 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1);
1441 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1442 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, BOOTSTRAPPER_MSI_FILE_VERSIONING_MISSING_OR_OLDER, 0);
1443 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1444 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", unregisterActions1, 1);
1445 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1446 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1447 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
1448 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
1449 Assert::Equal(dwIndex, pPlan->cRollbackActions);
1450
1451 Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
1452 Assert::Equal(4ul, pPlan->cOverallProgressTicksTotal);
1453
1454 dwIndex = 0;
1455 Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions);
1456
1457 dwIndex = 0;
1458 Assert::Equal(dwIndex, pPlan->cCleanActions);
1459
1460 UINT uIndex = 0;
1461 ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL);
1462 Assert::Equal(uIndex, pPlan->cPlannedProviders);
1463
1464 Assert::Equal(2ul, pEngineState->packages.cPackages);
1465 ValidatePermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"NetFx48Web");
1466 ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT);
1467 }
1468
1286 private: 1469 private:
1287 // This doesn't initialize everything, just enough for CorePlan to work. 1470 // This doesn't initialize everything, just enough for CorePlan to work.
1288 void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState) 1471 void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState)