diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2023-01-15 23:03:42 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2023-01-19 12:20:31 -0600 |
| commit | f0e19e4355c29aa90e2b761031d61904ba1d8ffd (patch) | |
| tree | d27ff80a066e32305e5efed2a7b41574de88ae31 /src/burn/test/BurnUnitTest/PlanTest.cpp | |
| parent | a46ef0eebafea0e5b38c0c6e960be778c2dbb852 (diff) | |
| download | wix-f0e19e4355c29aa90e2b761031d61904ba1d8ffd.tar.gz wix-f0e19e4355c29aa90e2b761031d61904ba1d8ffd.tar.bz2 wix-f0e19e4355c29aa90e2b761031d61904ba1d8ffd.zip | |
Don't uninstall superseded MSI packages.
7147
Diffstat (limited to 'src/burn/test/BurnUnitTest/PlanTest.cpp')
| -rw-r--r-- | src/burn/test/BurnUnitTest/PlanTest.cpp | 92 |
1 files changed, 90 insertions, 2 deletions
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index 72ac1f9a..c3e14a26 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp | |||
| @@ -2228,6 +2228,96 @@ namespace Bootstrapper | |||
| 2228 | } | 2228 | } |
| 2229 | 2229 | ||
| 2230 | [Fact] | 2230 | [Fact] |
| 2231 | void SingleMsiUninstallTestFromUpgradeBundleWithMinorUpdatePackage() | ||
| 2232 | { | ||
| 2233 | HRESULT hr = S_OK; | ||
| 2234 | BURN_ENGINE_STATE engineState = { }; | ||
| 2235 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
| 2236 | BURN_PLAN* pPlan = &engineState.plan; | ||
| 2237 | |||
| 2238 | InitializeEngineStateForCorePlan(wzSingleMsiManifestFileName, pEngineState); | ||
| 2239 | DetectAsRelatedUpgradeBundle(&engineState, L"{02940F3E-C83E-452D-BFCF-C943777ACEAE}", L"2.0.0.0"); | ||
| 2240 | pEngineState->packages.rgPackages[0].currentState = BOOTSTRAPPER_PACKAGE_STATE_SUPERSEDED; | ||
| 2241 | pEngineState->packages.rgPackages[0].Msi.operation = BOOTSTRAPPER_RELATED_OPERATION_DOWNGRADE; | ||
| 2242 | |||
| 2243 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL); | ||
| 2244 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
| 2245 | |||
| 2246 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | ||
| 2247 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleId); | ||
| 2248 | NativeAssert::StringEqual(L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", pPlan->wzBundleProviderKey); | ||
| 2249 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 2250 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
| 2251 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 2252 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
| 2253 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 2254 | Assert::Equal<BOOL>(FALSE, pPlan->fDowngrade); | ||
| 2255 | Assert::Equal<DWORD>(BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE | BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_PROVIDER_KEY, pPlan->dwRegistrationOperations); | ||
| 2256 | |||
| 2257 | BOOL fRollback = FALSE; | ||
| 2258 | DWORD dwIndex = 0; | ||
| 2259 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 2260 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 2261 | |||
| 2262 | fRollback = TRUE; | ||
| 2263 | dwIndex = 0; | ||
| 2264 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}"); | ||
| 2265 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 2266 | |||
| 2267 | fRollback = FALSE; | ||
| 2268 | dwIndex = 0; | ||
| 2269 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
| 2270 | |||
| 2271 | fRollback = TRUE; | ||
| 2272 | dwIndex = 0; | ||
| 2273 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
| 2274 | |||
| 2275 | Assert::Equal(0ull, pPlan->qwCacheSizeTotal); | ||
| 2276 | |||
| 2277 | fRollback = FALSE; | ||
| 2278 | dwIndex = 0; | ||
| 2279 | DWORD dwExecuteCheckpointId = 1; | ||
| 2280 | ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 2281 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2282 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", unregisterActions1, 1); | ||
| 2283 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2284 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", unregisterActions1, 1); | ||
| 2285 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2286 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2287 | ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); | ||
| 2288 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
| 2289 | |||
| 2290 | fRollback = TRUE; | ||
| 2291 | dwIndex = 0; | ||
| 2292 | dwExecuteCheckpointId = 1; | ||
| 2293 | ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 2294 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", registerActions1, 1); | ||
| 2295 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2296 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", registerActions1, 1); | ||
| 2297 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2298 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2299 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 2300 | ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); | ||
| 2301 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
| 2302 | |||
| 2303 | Assert::Equal(0ul, pPlan->cExecutePackagesTotal); | ||
| 2304 | Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal); | ||
| 2305 | |||
| 2306 | dwIndex = 0; | ||
| 2307 | Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); | ||
| 2308 | |||
| 2309 | dwIndex = 0; | ||
| 2310 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
| 2311 | |||
| 2312 | UINT uIndex = 0; | ||
| 2313 | ValidatePlannedProvider(pPlan, uIndex++, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", NULL); | ||
| 2314 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
| 2315 | |||
| 2316 | Assert::Equal(1ul, pEngineState->packages.cPackages); | ||
| 2317 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_IGNORED, BURN_PACKAGE_REGISTRATION_STATE_IGNORED); | ||
| 2318 | } | ||
| 2319 | |||
| 2320 | [Fact] | ||
| 2231 | void SingleMsiUnsafeUninstallTest() | 2321 | void SingleMsiUnsafeUninstallTest() |
| 2232 | { | 2322 | { |
| 2233 | HRESULT hr = S_OK; | 2323 | HRESULT hr = S_OK; |
| @@ -3117,8 +3207,6 @@ namespace Bootstrapper | |||
| 3117 | { | 3207 | { |
| 3118 | for (DWORD j = 0; j < pPackage->Msi.cSlipstreamMspPackages; ++j) | 3208 | for (DWORD j = 0; j < pPackage->Msi.cSlipstreamMspPackages; ++j) |
| 3119 | { | 3209 | { |
| 3120 | pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_SUPERSEDED; | ||
| 3121 | |||
| 3122 | BURN_PACKAGE* pMspPackage = pPackage->Msi.rgSlipstreamMsps[j].pMspPackage; | 3210 | BURN_PACKAGE* pMspPackage = pPackage->Msi.rgSlipstreamMsps[j].pMspPackage; |
| 3123 | MspEngineAddDetectedTargetProduct(&pEngineState->packages, pMspPackage, j, pPackage->Msi.sczProductCode, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED); | 3211 | MspEngineAddDetectedTargetProduct(&pEngineState->packages, pMspPackage, j, pPackage->Msi.sczProductCode, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED); |
| 3124 | 3212 | ||
