aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSean Hall <r.sean.hall@gmail.com>2021-12-12 21:52:29 -0600
committerSean Hall <r.sean.hall@gmail.com>2021-12-13 14:44:02 -0600
commit72b024f33d9630432e8aad2bf8261051a0df1e41 (patch)
tree3ff13dffd1a3f93b87f789716bf4c47268a845d9 /src
parente223ab393bdf04a9c3d0d2144b48a10d7b2650a2 (diff)
downloadwix-72b024f33d9630432e8aad2bf8261051a0df1e41.tar.gz
wix-72b024f33d9630432e8aad2bf8261051a0df1e41.tar.bz2
wix-72b024f33d9630432e8aad2bf8261051a0df1e41.zip
After rolling back in a non-vital rollback boundary, skip to its end.
Fixes #6309
Diffstat (limited to 'src')
-rw-r--r--src/burn/engine/apply.cpp73
-rw-r--r--src/burn/engine/engine.mc14
-rw-r--r--src/burn/engine/plan.cpp24
-rw-r--r--src/burn/engine/plan.h3
-rw-r--r--src/burn/test/BurnUnitTest/PlanTest.cpp88
-rw-r--r--src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs2
6 files changed, 147 insertions, 57 deletions
diff --git a/src/burn/engine/apply.cpp b/src/burn/engine/apply.cpp
index 283c0ada..0467132e 100644
--- a/src/burn/engine/apply.cpp
+++ b/src/burn/engine/apply.cpp
@@ -191,7 +191,6 @@ static HRESULT DoExecuteAction(
191 __in BURN_ENGINE_STATE* pEngineState, 191 __in BURN_ENGINE_STATE* pEngineState,
192 __in BURN_EXECUTE_ACTION* pExecuteAction, 192 __in BURN_EXECUTE_ACTION* pExecuteAction,
193 __in BURN_EXECUTE_CONTEXT* pContext, 193 __in BURN_EXECUTE_CONTEXT* pContext,
194 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary,
195 __inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint, 194 __inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint,
196 __out BOOL* pfSuspend, 195 __out BOOL* pfSuspend,
197 __out BOOTSTRAPPER_APPLY_RESTART* pRestart 196 __out BOOTSTRAPPER_APPLY_RESTART* pRestart
@@ -657,8 +656,7 @@ extern "C" HRESULT ApplyExecute(
657 HRESULT hrRollback = S_OK; 656 HRESULT hrRollback = S_OK;
658 BURN_EXECUTE_ACTION_CHECKPOINT* pCheckpoint = NULL; 657 BURN_EXECUTE_ACTION_CHECKPOINT* pCheckpoint = NULL;
659 BURN_EXECUTE_CONTEXT context = { }; 658 BURN_EXECUTE_CONTEXT context = { };
660 BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL; 659 BOOL fSeekRollbackBoundaryEnd = FALSE;
661 BOOL fSeekNextRollbackBoundary = FALSE;
662 660
663 context.pCache = pEngineState->plan.pCache; 661 context.pCache = pEngineState->plan.pCache;
664 context.pUX = &pEngineState->userExperience; 662 context.pUX = &pEngineState->userExperience;
@@ -680,21 +678,41 @@ extern "C" HRESULT ApplyExecute(
680 continue; 678 continue;
681 } 679 }
682 680
683 // If we are seeking the next rollback boundary, skip if this action wasn't it. 681 // If we are seeking the end of the rollback boundary, skip if this action wasn't it.
684 if (fSeekNextRollbackBoundary) 682 if (fSeekRollbackBoundaryEnd)
685 { 683 {
686 if (BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY == pExecuteAction->type) 684 if (BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END != pExecuteAction->type)
687 { 685 {
686 LPCWSTR wzId = NULL;
687 switch (pExecuteAction->type)
688 {
689 case BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE:
690 wzId = pExecuteAction->exePackage.pPackage->sczId;
691 break;
692 case BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE:
693 wzId = pExecuteAction->msiPackage.pPackage->sczId;
694 break;
695 case BURN_EXECUTE_ACTION_TYPE_MSP_TARGET:
696 wzId = pExecuteAction->mspTarget.pPackage->sczId;
697 break;
698 case BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE:
699 wzId = pExecuteAction->msuPackage.pPackage->sczId;
700 break;
701 }
702
703 if (wzId)
704 {
705 LogId(REPORT_WARNING, MSG_APPLY_SKIPPING_NONVITAL_ROLLBACK_BOUNDARY_PACKAGE, wzId);
706 }
707
688 continue; 708 continue;
689 } 709 }
690 else 710
691 { 711 fSeekRollbackBoundaryEnd = FALSE;
692 fSeekNextRollbackBoundary = FALSE;
693 }
694 } 712 }
695 713
696 // Execute the action. 714 // Execute the action.
697 hr = DoExecuteAction(pEngineState, pExecuteAction, &context, &pRollbackBoundary, &pCheckpoint, pfSuspend, pRestart); 715 hr = DoExecuteAction(pEngineState, pExecuteAction, &context, &pCheckpoint, pfSuspend, pRestart);
698 716
699 if (*pfSuspend || BOOTSTRAPPER_APPLY_RESTART_INITIATED == *pRestart) 717 if (*pfSuspend || BOOTSTRAPPER_APPLY_RESTART_INITIATED == *pRestart)
700 { 718 {
@@ -737,19 +755,24 @@ extern "C" HRESULT ApplyExecute(
737 755
738 hrRollback = DoRollbackActions(pEngineState, &context, pCheckpoint->dwId, pRestart); 756 hrRollback = DoRollbackActions(pEngineState, &context, pCheckpoint->dwId, pRestart);
739 IgnoreRollbackError(hrRollback, "Failed rollback actions"); 757 IgnoreRollbackError(hrRollback, "Failed rollback actions");
740 }
741 758
742 // If the rollback boundary is vital, end execution here. 759 if (pCheckpoint->pActiveRollbackBoundary)
743 if (pRollbackBoundary && pRollbackBoundary->fVital) 760 {
744 { 761 if (pCheckpoint->pActiveRollbackBoundary->fVital)
745 break; 762 {
763 // If the rollback boundary is vital, end execution here.
764 break;
765 }
766
767 // Move forward to the end of this rollback boundary.
768 fSeekRollbackBoundaryEnd = TRUE;
769
770 LogId(REPORT_WARNING, MSG_APPLY_SKIPPING_REST_OF_NONVITAL_ROLLBACK_BOUNDARY, pCheckpoint->pActiveRollbackBoundary->sczId);
771 }
746 } 772 }
747 773
748 // Ignore failure inside of a non-vital rollback boundary. 774 // Ignore failure outside of a vital rollback boundary.
749 hr = S_OK; 775 hr = S_OK;
750
751 // Move forward to next rollback boundary.
752 fSeekNextRollbackBoundary = TRUE;
753 } 776 }
754 } 777 }
755 778
@@ -2207,7 +2230,6 @@ static HRESULT DoExecuteAction(
2207 __in BURN_ENGINE_STATE* pEngineState, 2230 __in BURN_ENGINE_STATE* pEngineState,
2208 __in BURN_EXECUTE_ACTION* pExecuteAction, 2231 __in BURN_EXECUTE_ACTION* pExecuteAction,
2209 __in BURN_EXECUTE_CONTEXT* pContext, 2232 __in BURN_EXECUTE_CONTEXT* pContext,
2210 __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary,
2211 __inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint, 2233 __inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint,
2212 __out BOOL* pfSuspend, 2234 __out BOOL* pfSuspend,
2213 __out BOOTSTRAPPER_APPLY_RESTART* pRestart 2235 __out BOOTSTRAPPER_APPLY_RESTART* pRestart
@@ -2226,7 +2248,7 @@ static HRESULT DoExecuteAction(
2226 2248
2227 do 2249 do
2228 { 2250 {
2229 fInsideMsiTransaction = *ppRollbackBoundary && (*ppRollbackBoundary)->fActiveTransaction; 2251 fInsideMsiTransaction = *ppCheckpoint && (*ppCheckpoint)->pActiveRollbackBoundary && (*ppCheckpoint)->pActiveRollbackBoundary->fActiveTransaction;
2230 2252
2231 switch (pExecuteAction->type) 2253 switch (pExecuteAction->type)
2232 { 2254 {
@@ -2296,8 +2318,9 @@ static HRESULT DoExecuteAction(
2296 2318
2297 break; 2319 break;
2298 2320
2299 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY: 2321 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START: __fallthrough;
2300 *ppRollbackBoundary = pExecuteAction->rollbackBoundary.pRollbackBoundary; 2322 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END:
2323 *ppCheckpoint = NULL;
2301 break; 2324 break;
2302 2325
2303 case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION: 2326 case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION:
@@ -2406,7 +2429,7 @@ static HRESULT DoRollbackActions(
2406 IgnoreRollbackError(hr, "Failed to rollback dependency action."); 2429 IgnoreRollbackError(hr, "Failed to rollback dependency action.");
2407 break; 2430 break;
2408 2431
2409 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY: 2432 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START:
2410 ExitFunction1(hr = S_OK); 2433 ExitFunction1(hr = S_OK);
2411 2434
2412 case BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE: 2435 case BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE:
diff --git a/src/burn/engine/engine.mc b/src/burn/engine/engine.mc
index dcd18074..b9267593 100644
--- a/src/burn/engine/engine.mc
+++ b/src/burn/engine/engine.mc
@@ -991,6 +991,20 @@ Language=English
991Illegal state: Reboot requested within an MSI transaction, id: %1!ls! 991Illegal state: Reboot requested within an MSI transaction, id: %1!ls!
992. 992.
993 993
994MessageId=388
995Severity=Warning
996SymbolicName=MSG_APPLY_SKIPPING_NONVITAL_ROLLBACK_BOUNDARY_PACKAGE
997Language=English
998Skipping package inside non-vital rollback boundary, id: %1!ls!
999.
1000
1001MessageId=389
1002Severity=Warning
1003SymbolicName=MSG_APPLY_SKIPPING_REST_OF_NONVITAL_ROLLBACK_BOUNDARY
1004Language=English
1005Skipping the rest of non-vital rollback boundary, id: %1!ls!
1006.
1007
994MessageId=399 1008MessageId=399
995Severity=Success 1009Severity=Success
996SymbolicName=MSG_APPLY_COMPLETE 1010SymbolicName=MSG_APPLY_COMPLETE
diff --git a/src/burn/engine/plan.cpp b/src/burn/engine/plan.cpp
index 5aad8c9b..0f63a945 100644
--- a/src/burn/engine/plan.cpp
+++ b/src/burn/engine/plan.cpp
@@ -1724,14 +1724,14 @@ extern "C" HRESULT PlanRollbackBoundaryBegin(
1724 hr = PlanAppendExecuteAction(pPlan, &pExecuteAction); 1724 hr = PlanAppendExecuteAction(pPlan, &pExecuteAction);
1725 ExitOnFailure(hr, "Failed to append rollback boundary begin action."); 1725 ExitOnFailure(hr, "Failed to append rollback boundary begin action.");
1726 1726
1727 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY; 1727 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START;
1728 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary; 1728 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary;
1729 1729
1730 // Add begin rollback boundary to rollback plan. 1730 // Add begin rollback boundary to rollback plan.
1731 hr = PlanAppendRollbackAction(pPlan, &pExecuteAction); 1731 hr = PlanAppendRollbackAction(pPlan, &pExecuteAction);
1732 ExitOnFailure(hr, "Failed to append rollback boundary begin action."); 1732 ExitOnFailure(hr, "Failed to append rollback boundary begin action.");
1733 1733
1734 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY; 1734 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START;
1735 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary; 1735 pExecuteAction->rollbackBoundary.pRollbackBoundary = pRollbackBoundary;
1736 1736
1737 hr = UserExperienceOnPlanRollbackBoundary(pUX, pRollbackBoundary->sczId, &pRollbackBoundary->fTransaction); 1737 hr = UserExperienceOnPlanRollbackBoundary(pUX, pRollbackBoundary->sczId, &pRollbackBoundary->fTransaction);
@@ -1786,6 +1786,18 @@ extern "C" HRESULT PlanRollbackBoundaryComplete(
1786 // Add checkpoints. 1786 // Add checkpoints.
1787 hr = PlanExecuteCheckpoint(pPlan); 1787 hr = PlanExecuteCheckpoint(pPlan);
1788 1788
1789 // Add complete rollback boundary to execute plan.
1790 hr = PlanAppendExecuteAction(pPlan, &pExecuteAction);
1791 ExitOnFailure(hr, "Failed to append rollback boundary complete action.");
1792
1793 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END;
1794
1795 // Add begin rollback boundary to rollback plan.
1796 hr = PlanAppendRollbackAction(pPlan, &pExecuteAction);
1797 ExitOnFailure(hr, "Failed to append rollback boundary complete action.");
1798
1799 pExecuteAction->type = BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END;
1800
1789LExit: 1801LExit:
1790 return hr; 1802 return hr;
1791} 1803}
@@ -2616,8 +2628,12 @@ static void ExecuteActionLog(
2616 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSU_PACKAGE package id: %ls, action: %hs, log path: %ls", wzBase, iAction, pAction->msuPackage.pPackage->sczId, LoggingActionStateToString(pAction->msuPackage.action), pAction->msuPackage.sczLogPath); 2628 LogStringLine(PlanDumpLevel, "%ls action[%u]: MSU_PACKAGE package id: %ls, action: %hs, log path: %ls", wzBase, iAction, pAction->msuPackage.pPackage->sczId, LoggingActionStateToString(pAction->msuPackage.action), pAction->msuPackage.sczLogPath);
2617 break; 2629 break;
2618 2630
2619 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY: 2631 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START:
2620 LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no"); 2632 LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY_START id: %ls, vital: %ls", wzBase, iAction, pAction->rollbackBoundary.pRollbackBoundary->sczId, pAction->rollbackBoundary.pRollbackBoundary->fVital ? L"yes" : L"no");
2633 break;
2634
2635 case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END:
2636 LogStringLine(PlanDumpLevel, "%ls action[%u]: ROLLBACK_BOUNDARY_END", wzBase, iAction);
2621 break; 2637 break;
2622 2638
2623 case BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE: 2639 case BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE:
diff --git a/src/burn/engine/plan.h b/src/burn/engine/plan.h
index b4348cc4..f0560e6e 100644
--- a/src/burn/engine/plan.h
+++ b/src/burn/engine/plan.h
@@ -56,7 +56,8 @@ enum BURN_EXECUTE_ACTION_TYPE
56 BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE, 56 BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE,
57 BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER, 57 BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER,
58 BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY, 58 BURN_EXECUTE_ACTION_TYPE_PACKAGE_DEPENDENCY,
59 BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY, 59 BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START,
60 BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END,
60 BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION, 61 BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION,
61 BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION, 62 BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION,
62}; 63};
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp
index 921f2a50..627da49a 100644
--- a/src/burn/test/BurnUnitTest/PlanTest.cpp
+++ b/src/burn/test/BurnUnitTest/PlanTest.cpp
@@ -81,7 +81,7 @@ namespace Bootstrapper
81 fRollback = FALSE; 81 fRollback = FALSE;
82 dwIndex = 0; 82 dwIndex = 0;
83 DWORD dwExecuteCheckpointId = 2; 83 DWORD dwExecuteCheckpointId = 2;
84 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 84 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
85 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 85 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
86 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 86 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
87 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 87 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -92,7 +92,8 @@ namespace Bootstrapper
92 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 92 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
93 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 93 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
94 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 94 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
95 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE); 95 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
96 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
96 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 97 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
97 ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 98 ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
98 dwExecuteCheckpointId += 1; // cache checkpoints 99 dwExecuteCheckpointId += 1; // cache checkpoints
@@ -115,13 +116,14 @@ namespace Bootstrapper
115 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 116 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
116 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 117 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 118 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
119 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
118 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL); 120 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
119 Assert::Equal(dwIndex, pPlan->cExecuteActions); 121 Assert::Equal(dwIndex, pPlan->cExecuteActions);
120 122
121 fRollback = TRUE; 123 fRollback = TRUE;
122 dwIndex = 0; 124 dwIndex = 0;
123 dwExecuteCheckpointId = 2; 125 dwExecuteCheckpointId = 2;
124 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 126 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
125 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 127 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
126 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 128 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
127 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 129 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -132,7 +134,8 @@ namespace Bootstrapper
132 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 134 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
133 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 135 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
134 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 136 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
135 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE); 137 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
138 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
136 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 139 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
137 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageB"); 140 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageB");
138 dwExecuteCheckpointId += 1; // cache checkpoints 141 dwExecuteCheckpointId += 1; // cache checkpoints
@@ -151,6 +154,7 @@ namespace Bootstrapper
151 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 154 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
152 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 155 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
153 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 156 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
157 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
154 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); 158 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
155 Assert::Equal(dwIndex, pPlan->cRollbackActions); 159 Assert::Equal(dwIndex, pPlan->cRollbackActions);
156 160
@@ -202,7 +206,7 @@ namespace Bootstrapper
202 fRollback = FALSE; 206 fRollback = FALSE;
203 dwIndex = 0; 207 dwIndex = 0;
204 DWORD dwExecuteCheckpointId = 1; 208 DWORD dwExecuteCheckpointId = 1;
205 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE); 209 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
206 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 210 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
207 ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 211 ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
208 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 212 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -219,7 +223,8 @@ namespace Bootstrapper
219 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 223 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
220 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 224 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
221 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
222 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 226 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
227 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
223 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 228 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
224 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 229 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 230 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -228,12 +233,13 @@ namespace Bootstrapper
228 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); 233 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);
229 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 234 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
230 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 235 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
236 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
231 Assert::Equal(dwIndex, pPlan->cExecuteActions); 237 Assert::Equal(dwIndex, pPlan->cExecuteActions);
232 238
233 fRollback = TRUE; 239 fRollback = TRUE;
234 dwIndex = 0; 240 dwIndex = 0;
235 dwExecuteCheckpointId = 1; 241 dwExecuteCheckpointId = 1;
236 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE); 242 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
237 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 243 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
238 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 244 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
239 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 245 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -246,7 +252,8 @@ namespace Bootstrapper
246 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 252 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
247 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 253 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
248 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 254 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
249 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 255 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
256 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
250 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 257 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
251 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 258 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
252 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 259 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -255,6 +262,7 @@ namespace Bootstrapper
255 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 262 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
256 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 263 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
257 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 264 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
265 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
258 Assert::Equal(dwIndex, pPlan->cRollbackActions); 266 Assert::Equal(dwIndex, pPlan->cRollbackActions);
259 267
260 Assert::Equal(3ul, pPlan->cExecutePackagesTotal); 268 Assert::Equal(3ul, pPlan->cExecutePackagesTotal);
@@ -319,7 +327,7 @@ namespace Bootstrapper
319 fRollback = FALSE; 327 fRollback = FALSE;
320 dwIndex = 0; 328 dwIndex = 0;
321 DWORD dwExecuteCheckpointId = 2; 329 DWORD dwExecuteCheckpointId = 2;
322 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 330 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
323 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 331 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
324 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 332 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
325 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 333 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -330,12 +338,13 @@ namespace Bootstrapper
330 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 338 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
331 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 339 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
332 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 340 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
341 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
333 Assert::Equal(dwIndex, pPlan->cExecuteActions); 342 Assert::Equal(dwIndex, pPlan->cExecuteActions);
334 343
335 fRollback = TRUE; 344 fRollback = TRUE;
336 dwIndex = 0; 345 dwIndex = 0;
337 dwExecuteCheckpointId = 2; 346 dwExecuteCheckpointId = 2;
338 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 347 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
339 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 348 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
340 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 349 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
341 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 350 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -346,6 +355,7 @@ namespace Bootstrapper
346 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 355 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
347 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 356 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
348 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 357 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
358 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
349 Assert::Equal(dwIndex, pPlan->cRollbackActions); 359 Assert::Equal(dwIndex, pPlan->cRollbackActions);
350 360
351 Assert::Equal(1ul, pPlan->cExecutePackagesTotal); 361 Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
@@ -401,22 +411,24 @@ namespace Bootstrapper
401 fRollback = FALSE; 411 fRollback = FALSE;
402 dwIndex = 0; 412 dwIndex = 0;
403 DWORD dwExecuteCheckpointId = 2; 413 DWORD dwExecuteCheckpointId = 2;
404 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 414 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
405 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 415 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
406 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 416 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
407 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 417 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
408 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 418 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
419 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
409 Assert::Equal(dwIndex, pPlan->cExecuteActions); 420 Assert::Equal(dwIndex, pPlan->cExecuteActions);
410 421
411 fRollback = TRUE; 422 fRollback = TRUE;
412 dwIndex = 0; 423 dwIndex = 0;
413 dwExecuteCheckpointId = 2; 424 dwExecuteCheckpointId = 2;
414 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 425 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
415 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 426 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
416 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 427 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
417 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 428 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
418 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 429 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
419 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 430 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
431 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
420 Assert::Equal(dwIndex, pPlan->cRollbackActions); 432 Assert::Equal(dwIndex, pPlan->cRollbackActions);
421 433
422 Assert::Equal(0ul, pPlan->cExecutePackagesTotal); 434 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -472,7 +484,7 @@ namespace Bootstrapper
472 fRollback = FALSE; 484 fRollback = FALSE;
473 dwIndex = 0; 485 dwIndex = 0;
474 DWORD dwExecuteCheckpointId = 2; 486 DWORD dwExecuteCheckpointId = 2;
475 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 487 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
476 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 488 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
477 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 489 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
478 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 490 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -483,13 +495,14 @@ namespace Bootstrapper
483 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 495 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
484 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 496 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
485 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 497 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
498 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
486 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL); 499 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
487 Assert::Equal(dwIndex, pPlan->cExecuteActions); 500 Assert::Equal(dwIndex, pPlan->cExecuteActions);
488 501
489 fRollback = TRUE; 502 fRollback = TRUE;
490 dwIndex = 0; 503 dwIndex = 0;
491 dwExecuteCheckpointId = 2; 504 dwExecuteCheckpointId = 2;
492 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 505 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
493 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 506 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
494 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 507 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
495 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 508 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -500,6 +513,7 @@ namespace Bootstrapper
500 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 513 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
501 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 514 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
502 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 515 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
516 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
503 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); 517 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
504 Assert::Equal(dwIndex, pPlan->cRollbackActions); 518 Assert::Equal(dwIndex, pPlan->cRollbackActions);
505 519
@@ -551,15 +565,17 @@ namespace Bootstrapper
551 fRollback = FALSE; 565 fRollback = FALSE;
552 dwIndex = 0; 566 dwIndex = 0;
553 DWORD dwExecuteCheckpointId = 1; 567 DWORD dwExecuteCheckpointId = 1;
554 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 568 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
555 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 569 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
570 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
556 Assert::Equal(dwIndex, pPlan->cExecuteActions); 571 Assert::Equal(dwIndex, pPlan->cExecuteActions);
557 572
558 fRollback = TRUE; 573 fRollback = TRUE;
559 dwIndex = 0; 574 dwIndex = 0;
560 dwExecuteCheckpointId = 1; 575 dwExecuteCheckpointId = 1;
561 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 576 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
562 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 577 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
578 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
563 Assert::Equal(dwIndex, pPlan->cRollbackActions); 579 Assert::Equal(dwIndex, pPlan->cRollbackActions);
564 580
565 Assert::Equal(0ul, pPlan->cExecutePackagesTotal); 581 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -609,7 +625,7 @@ namespace Bootstrapper
609 fRollback = FALSE; 625 fRollback = FALSE;
610 dwIndex = 0; 626 dwIndex = 0;
611 DWORD dwExecuteCheckpointId = 1; 627 DWORD dwExecuteCheckpointId = 1;
612 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 628 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
613 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 629 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
614 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 630 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
615 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 631 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -618,12 +634,13 @@ namespace Bootstrapper
618 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); 634 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);
619 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 635 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
620 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 636 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
637 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
621 Assert::Equal(dwIndex, pPlan->cExecuteActions); 638 Assert::Equal(dwIndex, pPlan->cExecuteActions);
622 639
623 fRollback = TRUE; 640 fRollback = TRUE;
624 dwIndex = 0; 641 dwIndex = 0;
625 dwExecuteCheckpointId = 1; 642 dwExecuteCheckpointId = 1;
626 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 643 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
627 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 644 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
628 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 645 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
629 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 646 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -632,6 +649,7 @@ namespace Bootstrapper
632 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 649 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
633 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 650 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
634 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 651 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
652 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
635 Assert::Equal(dwIndex, pPlan->cRollbackActions); 653 Assert::Equal(dwIndex, pPlan->cRollbackActions);
636 654
637 Assert::Equal(1ul, pPlan->cExecutePackagesTotal); 655 Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
@@ -682,21 +700,23 @@ namespace Bootstrapper
682 fRollback = FALSE; 700 fRollback = FALSE;
683 dwIndex = 0; 701 dwIndex = 0;
684 DWORD dwExecuteCheckpointId = 1; 702 DWORD dwExecuteCheckpointId = 1;
685 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 703 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
686 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 704 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
687 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 705 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
688 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 706 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
689 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 707 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
708 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
690 Assert::Equal(dwIndex, pPlan->cExecuteActions); 709 Assert::Equal(dwIndex, pPlan->cExecuteActions);
691 710
692 fRollback = TRUE; 711 fRollback = TRUE;
693 dwIndex = 0; 712 dwIndex = 0;
694 dwExecuteCheckpointId = 1; 713 dwExecuteCheckpointId = 1;
695 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 714 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
696 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 715 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
697 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 716 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
698 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 717 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
699 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 718 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
719 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
700 Assert::Equal(dwIndex, pPlan->cRollbackActions); 720 Assert::Equal(dwIndex, pPlan->cRollbackActions);
701 721
702 Assert::Equal(0ul, pPlan->cExecutePackagesTotal); 722 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -756,7 +776,7 @@ namespace Bootstrapper
756 dwIndex = 0; 776 dwIndex = 0;
757 DWORD dwExecuteCheckpointId = 2; 777 DWORD dwExecuteCheckpointId = 2;
758 BURN_EXECUTE_ACTION* pExecuteAction = NULL; 778 BURN_EXECUTE_ACTION* pExecuteAction = NULL;
759 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 779 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
760 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 780 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
761 dwExecuteCheckpointId += 1; // cache checkpoints 781 dwExecuteCheckpointId += 1; // cache checkpoints
762 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web"); 782 ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
@@ -780,12 +800,13 @@ namespace Bootstrapper
780 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 800 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
781 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 801 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
782 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 802 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
803 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
783 Assert::Equal(dwIndex, pPlan->cExecuteActions); 804 Assert::Equal(dwIndex, pPlan->cExecuteActions);
784 805
785 fRollback = TRUE; 806 fRollback = TRUE;
786 dwIndex = 0; 807 dwIndex = 0;
787 dwExecuteCheckpointId = 2; 808 dwExecuteCheckpointId = 2;
788 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 809 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
789 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 810 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
790 dwExecuteCheckpointId += 1; // cache checkpoints 811 dwExecuteCheckpointId += 1; // cache checkpoints
791 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 812 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -806,6 +827,7 @@ namespace Bootstrapper
806 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 827 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
807 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 828 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
808 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 829 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
830 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
809 Assert::Equal(dwIndex, pPlan->cRollbackActions); 831 Assert::Equal(dwIndex, pPlan->cRollbackActions);
810 832
811 Assert::Equal(2ul, pPlan->cExecutePackagesTotal); 833 Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
@@ -857,7 +879,7 @@ namespace Bootstrapper
857 dwIndex = 0; 879 dwIndex = 0;
858 DWORD dwExecuteCheckpointId = 1; 880 DWORD dwExecuteCheckpointId = 1;
859 BURN_EXECUTE_ACTION* pExecuteAction = NULL; 881 BURN_EXECUTE_ACTION* pExecuteAction = NULL;
860 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 882 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
861 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 883 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
862 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); 884 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
863 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 885 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -873,12 +895,13 @@ namespace Bootstrapper
873 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); 895 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);
874 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 896 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
875 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 897 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
898 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
876 Assert::Equal(dwIndex, pPlan->cExecuteActions); 899 Assert::Equal(dwIndex, pPlan->cExecuteActions);
877 900
878 fRollback = TRUE; 901 fRollback = TRUE;
879 dwIndex = 0; 902 dwIndex = 0;
880 dwExecuteCheckpointId = 1; 903 dwExecuteCheckpointId = 1;
881 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 904 ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
882 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); 905 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
883 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 906 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
884 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); 907 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -894,6 +917,7 @@ namespace Bootstrapper
894 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 917 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
895 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 918 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
896 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 919 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
920 ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
897 Assert::Equal(dwIndex, pPlan->cRollbackActions); 921 Assert::Equal(dwIndex, pPlan->cRollbackActions);
898 922
899 Assert::Equal(2ul, pPlan->cExecutePackagesTotal); 923 Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
@@ -1402,7 +1426,7 @@ namespace Bootstrapper
1402 Assert::Equal<BOOL>(FALSE, pAction->fDeleted); 1426 Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1403 } 1427 }
1404 1428
1405 void ValidateExecuteRollbackBoundary( 1429 void ValidateExecuteRollbackBoundaryStart(
1406 __in BURN_PLAN* pPlan, 1430 __in BURN_PLAN* pPlan,
1407 __in BOOL fRollback, 1431 __in BOOL fRollback,
1408 __in DWORD dwIndex, 1432 __in DWORD dwIndex,
@@ -1412,13 +1436,25 @@ namespace Bootstrapper
1412 ) 1436 )
1413 { 1437 {
1414 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex); 1438 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
1415 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY, pAction->type); 1439 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START, pAction->type);
1416 NativeAssert::StringEqual(wzId, pAction->rollbackBoundary.pRollbackBoundary->sczId); 1440 NativeAssert::StringEqual(wzId, pAction->rollbackBoundary.pRollbackBoundary->sczId);
1417 Assert::Equal<BOOL>(fVital, pAction->rollbackBoundary.pRollbackBoundary->fVital); 1441 Assert::Equal<BOOL>(fVital, pAction->rollbackBoundary.pRollbackBoundary->fVital);
1418 Assert::Equal<BOOL>(fTransaction, pAction->rollbackBoundary.pRollbackBoundary->fTransaction); 1442 Assert::Equal<BOOL>(fTransaction, pAction->rollbackBoundary.pRollbackBoundary->fTransaction);
1419 Assert::Equal<BOOL>(FALSE, pAction->fDeleted); 1443 Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1420 } 1444 }
1421 1445
1446 void ValidateExecuteRollbackBoundaryEnd(
1447 __in BURN_PLAN* pPlan,
1448 __in BOOL fRollback,
1449 __in DWORD dwIndex
1450 )
1451 {
1452 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
1453 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END, pAction->type);
1454 Assert::Equal<size_t>(NULL, (size_t)(pAction->rollbackBoundary.pRollbackBoundary));
1455 Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1456 }
1457
1422 void ValidateExecuteUncachePackage( 1458 void ValidateExecuteUncachePackage(
1423 __in BURN_PLAN* pPlan, 1459 __in BURN_PLAN* pPlan,
1424 __in BOOL fRollback, 1460 __in BOOL fRollback,
diff --git a/src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs
index 6539db34..effe4418 100644
--- a/src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs
+++ b/src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs
@@ -22,7 +22,7 @@ namespace WixToolsetTest.BurnE2E
22 /// install package B 22 /// install package B
23 /// unregister since no non-permanent packages should be installed or cached. 23 /// unregister since no non-permanent packages should be installed or cached.
24 /// </summary> 24 /// </summary>
25 [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6309")] 25 [Fact]
26 public void NonVitalRollbackBoundarySkipsToNextRollbackBoundary() 26 public void NonVitalRollbackBoundarySkipsToNextRollbackBoundary()
27 { 27 {
28 var packageA = this.CreatePackageInstaller("PackageA"); 28 var packageA = this.CreatePackageInstaller("PackageA");