From 27a0db4070a2b5756282bf15b957dd7f0021417f Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 10 Feb 2022 18:09:34 -0600 Subject: When rolling back a bundle failure, reinstall all upgrade related bundles. Fixes #3421 --- src/burn/test/BurnUnitTest/PlanTest.cpp | 64 +++++++++++++++++++++++++++++++++ 1 file changed, 64 insertions(+) (limited to 'src/burn/test/BurnUnitTest/PlanTest.cpp') diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index 99644115..81484234 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp @@ -169,6 +169,10 @@ namespace Bootstrapper Assert::Equal(4ul, pPlan->cExecutePackagesTotal); Assert::Equal(7ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + ValidateRestoreRelatedBundle(pPlan, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -276,6 +280,9 @@ namespace Bootstrapper Assert::Equal(3ul, pPlan->cExecutePackagesTotal); Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PackageC"); ValidateCleanAction(pPlan, dwIndex++, L"PackageB"); @@ -349,6 +356,9 @@ namespace Bootstrapper Assert::Equal(1ul, pPlan->cExecutePackagesTotal); Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); ValidateCleanCompatibleAction(pPlan, dwIndex++, L"PackageA"); @@ -437,6 +447,9 @@ namespace Bootstrapper Assert::Equal(1ul, pPlan->cExecutePackagesTotal); Assert::Equal(2ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -507,6 +520,9 @@ namespace Bootstrapper Assert::Equal(0ul, pPlan->cExecutePackagesTotal); Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -578,6 +594,9 @@ namespace Bootstrapper Assert::Equal(2ul, pPlan->cExecutePackagesTotal); Assert::Equal(2ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -657,6 +676,10 @@ namespace Bootstrapper Assert::Equal(2ul, pPlan->cExecutePackagesTotal); Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + ValidateRestoreRelatedBundle(pPlan, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -743,6 +766,10 @@ namespace Bootstrapper Assert::Equal(2ul, pPlan->cExecutePackagesTotal); Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + ValidateRestoreRelatedBundle(pPlan, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -804,6 +831,9 @@ namespace Bootstrapper Assert::Equal(0ul, pPlan->cExecutePackagesTotal); Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -878,6 +908,9 @@ namespace Bootstrapper Assert::Equal(1ul, pPlan->cExecutePackagesTotal); Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -945,6 +978,9 @@ namespace Bootstrapper Assert::Equal(0ul, pPlan->cExecutePackagesTotal); Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -1056,6 +1092,9 @@ namespace Bootstrapper Assert::Equal(2ul, pPlan->cExecutePackagesTotal); Assert::Equal(5ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; Assert::Equal(dwIndex, pPlan->cCleanActions); @@ -1146,6 +1185,9 @@ namespace Bootstrapper Assert::Equal(2ul, pPlan->cExecutePackagesTotal); Assert::Equal(2ul, pPlan->cOverallProgressTicksTotal); + dwIndex = 0; + Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); + dwIndex = 0; ValidateCleanAction(pPlan, dwIndex++, L"PatchA"); ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); @@ -1829,6 +1871,28 @@ namespace Bootstrapper NativeAssert::StringEqual(wzName, pProvider->sczName); } + void ValidateRestoreRelatedBundle( + __in BURN_PLAN* pPlan, + __in DWORD dwIndex, + __in LPCWSTR wzPackageId, + __in BOOTSTRAPPER_ACTION_STATE action, + __in LPCWSTR wzIgnoreDependencies + ) + { + BURN_EXECUTE_ACTION* pAction = ValidateRestoreRelatedBundleActionExists(pPlan, dwIndex); + Assert::Equal(BURN_EXECUTE_ACTION_TYPE_RELATED_BUNDLE, pAction->type); + NativeAssert::StringEqual(wzPackageId, pAction->relatedBundle.pRelatedBundle->package.sczId); + Assert::Equal(action, pAction->relatedBundle.action); + NativeAssert::StringEqual(wzIgnoreDependencies, pAction->relatedBundle.sczIgnoreDependencies); + Assert::Equal(FALSE, pAction->fDeleted); + } + + BURN_EXECUTE_ACTION* ValidateRestoreRelatedBundleActionExists(BURN_PLAN* pPlan, DWORD dwIndex) + { + Assert::InRange(dwIndex + 1ul, 1ul, pPlan->cRestoreRelatedBundleActions); + return pPlan->rgRestoreRelatedBundleActions + dwIndex; + } + void ValidateUninstallMsiCompatiblePackage( __in BURN_PLAN* pPlan, __in BOOL fRollback, -- cgit v1.2.3-55-g6feb