After rolling back in a non-vital rollback boundary, skip to its end.
Fixes #6309
Sean Hall committed
Dec 12, 2021 at 21:52 UTC
72b024f33d9630432e8aad2bf8261051a0df1e41
6 files changed
+147
-57
src/burn/engine/apply.cpp
+48
-25
@@ -191,7 +191,6 @@ static HRESULT DoExecuteAction(
191
__in BURN_ENGINE_STATE* pEngineState,
192
__in BURN_EXECUTE_ACTION* pExecuteAction,
193
__in BURN_EXECUTE_CONTEXT* pContext,
194
- __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary,
194
__inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint,
195
__out BOOL* pfSuspend,
196
__out BOOTSTRAPPER_APPLY_RESTART* pRestart
@@ -657,8 +656,7 @@ extern "C" HRESULT ApplyExecute(
656
HRESULT hrRollback = S_OK;
657
BURN_EXECUTE_ACTION_CHECKPOINT* pCheckpoint = NULL;
658
BURN_EXECUTE_CONTEXT context = { };
660
- BURN_ROLLBACK_BOUNDARY* pRollbackBoundary = NULL;
661
- BOOL fSeekNextRollbackBoundary = FALSE;
659
+ BOOL fSeekRollbackBoundaryEnd = FALSE;
660
661
context.pCache = pEngineState->plan.pCache;
662
context.pUX = &pEngineState->userExperience;
@@ -680,21 +678,41 @@ extern "C" HRESULT ApplyExecute(
678
continue;
679
}
680
683
- // If we are seeking the next rollback boundary, skip if this action wasn't it.
684
- if (fSeekNextRollbackBoundary)
681
+ // If we are seeking the end of the rollback boundary, skip if this action wasn't it.
682
+ if (fSeekRollbackBoundaryEnd)
683
{
686
- if (BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY == pExecuteAction->type)
684
+ if (BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END != pExecuteAction->type)
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
+
708
continue;
709
}
690
- else
691
- {
692
- fSeekNextRollbackBoundary = FALSE;
693
- }
710
+
711
+ fSeekRollbackBoundaryEnd = FALSE;
712
}
713
714
// Execute the action.
697
- hr = DoExecuteAction(pEngineState, pExecuteAction, &context, &pRollbackBoundary, &pCheckpoint, pfSuspend, pRestart);
715
+ hr = DoExecuteAction(pEngineState, pExecuteAction, &context, &pCheckpoint, pfSuspend, pRestart);
716
717
if (*pfSuspend || BOOTSTRAPPER_APPLY_RESTART_INITIATED == *pRestart)
718
{
@@ -737,19 +755,24 @@ extern "C" HRESULT ApplyExecute(
755
756
hrRollback = DoRollbackActions(pEngineState, &context, pCheckpoint->dwId, pRestart);
757
IgnoreRollbackError(hrRollback, "Failed rollback actions");
740
- }
758
742
- // If the rollback boundary is vital, end execution here.
743
- if (pRollbackBoundary && pRollbackBoundary->fVital)
744
- {
745
- break;
759
+ if (pCheckpoint->pActiveRollbackBoundary)
760
+ {
761
+ if (pCheckpoint->pActiveRollbackBoundary->fVital)
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
+ }
772
}
773
748
- // Ignore failure inside of a non-vital rollback boundary.
774
+ // Ignore failure outside of a vital rollback boundary.
775
hr = S_OK;
750
-
751
- // Move forward to next rollback boundary.
752
- fSeekNextRollbackBoundary = TRUE;
776
}
777
}
778
@@ -2207,7 +2230,6 @@ static HRESULT DoExecuteAction(
2230
__in BURN_ENGINE_STATE* pEngineState,
2231
__in BURN_EXECUTE_ACTION* pExecuteAction,
2232
__in BURN_EXECUTE_CONTEXT* pContext,
2210
- __inout BURN_ROLLBACK_BOUNDARY** ppRollbackBoundary,
2233
__inout BURN_EXECUTE_ACTION_CHECKPOINT** ppCheckpoint,
2234
__out BOOL* pfSuspend,
2235
__out BOOTSTRAPPER_APPLY_RESTART* pRestart
@@ -2226,7 +2248,7 @@ static HRESULT DoExecuteAction(
2248
2249
do
2250
{
2229
- fInsideMsiTransaction = *ppRollbackBoundary && (*ppRollbackBoundary)->fActiveTransaction;
2251
+ fInsideMsiTransaction = *ppCheckpoint && (*ppCheckpoint)->pActiveRollbackBoundary && (*ppCheckpoint)->pActiveRollbackBoundary->fActiveTransaction;
2252
2253
switch (pExecuteAction->type)
2254
{
@@ -2296,8 +2318,9 @@ static HRESULT DoExecuteAction(
2318
2319
break;
2320
2299
- case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY:
2300
- *ppRollbackBoundary = pExecuteAction->rollbackBoundary.pRollbackBoundary;
2321
+ case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START: __fallthrough;
2322
+ case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_END:
2323
+ *ppCheckpoint = NULL;
2324
break;
2325
2326
case BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION:
@@ -2406,7 +2429,7 @@ static HRESULT DoRollbackActions(
2429
IgnoreRollbackError(hr, "Failed to rollback dependency action.");
2430
break;
2431
2409
- case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY:
2432
+ case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START:
2433
ExitFunction1(hr = S_OK);
2434
2435
case BURN_EXECUTE_ACTION_TYPE_UNCACHE_PACKAGE:
src/burn/engine/engine.mc
+14
@@ -991,6 +991,20 @@ Language=English
991
Illegal state: Reboot requested within an MSI transaction, id: %1!ls!
992
.
993
994
+MessageId=388
995
+Severity=Warning
996
+SymbolicName=MSG_APPLY_SKIPPING_NONVITAL_ROLLBACK_BOUNDARY_PACKAGE
997
+Language=English
998
+Skipping package inside non-vital rollback boundary, id: %1!ls!
999
+.
1000
+
1001
+MessageId=389
1002
+Severity=Warning
1003
+SymbolicName=MSG_APPLY_SKIPPING_REST_OF_NONVITAL_ROLLBACK_BOUNDARY
1004
+Language=English
1005
+Skipping the rest of non-vital rollback boundary, id: %1!ls!
1006
+.
1007
+
1008
MessageId=399
1009
Severity=Success
1010
SymbolicName=MSG_APPLY_COMPLETE
src/burn/engine/plan.cpp
+20
-4
@@ -1724,14 +1724,14 @@ extern "C" HRESULT PlanRollbackBoundaryBegin(
1724
hr = PlanAppendExecuteAction(pPlan, &pExecuteAction);
1725
ExitOnFailure(hr, "Failed to append rollback boundary begin action.");
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;
1729
1730
// Add begin rollback boundary to rollback plan.
1731
hr = PlanAppendRollbackAction(pPlan, &pExecuteAction);
1732
ExitOnFailure(hr, "Failed to append rollback boundary begin action.");
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;
1736
1737
hr = UserExperienceOnPlanRollbackBoundary(pUX, pRollbackBoundary->sczId, &pRollbackBoundary->fTransaction);
@@ -1786,6 +1786,18 @@ extern "C" HRESULT PlanRollbackBoundaryComplete(
1786
// Add checkpoints.
1787
hr = PlanExecuteCheckpoint(pPlan);
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
+
1801
LExit:
1802
return hr;
1803
}
@@ -2616,8 +2628,12 @@ static void ExecuteActionLog(
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);
2629
break;
2630
2619
- case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY:
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");
2631
+ case BURN_EXECUTE_ACTION_TYPE_ROLLBACK_BOUNDARY_START:
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);
2637
break;
2638
2639
case BURN_EXECUTE_ACTION_TYPE_WAIT_CACHE_PACKAGE:
src/burn/engine/plan.h
+2
-1
@@ -56,7 +56,8 @@ enum BURN_EXECUTE_ACTION_TYPE
56
BURN_EXECUTE_ACTION_TYPE_MSU_PACKAGE,
57
BURN_EXECUTE_ACTION_TYPE_PACKAGE_PROVIDER,
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,
61
BURN_EXECUTE_ACTION_TYPE_BEGIN_MSI_TRANSACTION,
62
BURN_EXECUTE_ACTION_TYPE_COMMIT_MSI_TRANSACTION,
63
};
src/burn/test/BurnUnitTest/PlanTest.cpp
+62
-26
@@ -81,7 +81,7 @@ namespace Bootstrapper
81
fRollback = FALSE;
82
dwIndex = 0;
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++);
86
ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
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);
93
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);
97
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
98
ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
99
dwExecuteCheckpointId += 1; // cache checkpoints
@@ -115,13 +116,14 @@ namespace Bootstrapper
116
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
117
ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
118
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
119
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
120
ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
121
Assert::Equal(dwIndex, pPlan->cExecuteActions);
122
123
fRollback = TRUE;
124
dwIndex = 0;
125
dwExecuteCheckpointId = 2;
124
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
126
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
127
ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
128
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
129
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -132,7 +134,8 @@ namespace Bootstrapper
134
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
135
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);
139
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
140
ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageB");
141
dwExecuteCheckpointId += 1; // cache checkpoints
@@ -151,6 +154,7 @@ namespace Bootstrapper
154
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
155
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
156
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
157
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
158
ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
159
Assert::Equal(dwIndex, pPlan->cRollbackActions);
160
@@ -202,7 +206,7 @@ namespace Bootstrapper
206
fRollback = FALSE;
207
dwIndex = 0;
208
DWORD dwExecuteCheckpointId = 1;
205
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
209
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
210
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
211
ValidateExecuteBeginMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
212
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -219,7 +223,8 @@ namespace Bootstrapper
223
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
224
ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
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);
228
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
229
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
230
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -228,12 +233,13 @@ namespace Bootstrapper
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);
234
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
235
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
236
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
237
Assert::Equal(dwIndex, pPlan->cExecuteActions);
238
239
fRollback = TRUE;
240
dwIndex = 0;
241
dwExecuteCheckpointId = 1;
236
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
242
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ", TRUE, TRUE);
243
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
244
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
245
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -246,7 +252,8 @@ namespace Bootstrapper
252
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
253
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);
257
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
258
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
259
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -255,6 +262,7 @@ namespace Bootstrapper
262
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
263
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
264
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
265
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
266
Assert::Equal(dwIndex, pPlan->cRollbackActions);
267
268
Assert::Equal(3ul, pPlan->cExecutePackagesTotal);
@@ -319,7 +327,7 @@ namespace Bootstrapper
327
fRollback = FALSE;
328
dwIndex = 0;
329
DWORD dwExecuteCheckpointId = 2;
322
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
330
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
331
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
332
ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
333
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -330,12 +338,13 @@ namespace Bootstrapper
338
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
339
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
340
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
341
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
342
Assert::Equal(dwIndex, pPlan->cExecuteActions);
343
344
fRollback = TRUE;
345
dwIndex = 0;
346
dwExecuteCheckpointId = 2;
338
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
347
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
348
ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
349
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
350
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -346,6 +355,7 @@ namespace Bootstrapper
355
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
356
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
357
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
358
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
359
Assert::Equal(dwIndex, pPlan->cRollbackActions);
360
361
Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
@@ -401,22 +411,24 @@ namespace Bootstrapper
411
fRollback = FALSE;
412
dwIndex = 0;
413
DWORD dwExecuteCheckpointId = 2;
404
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
414
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
415
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
416
ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
417
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
418
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
419
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
420
Assert::Equal(dwIndex, pPlan->cExecuteActions);
421
422
fRollback = TRUE;
423
dwIndex = 0;
424
dwExecuteCheckpointId = 2;
414
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
425
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
426
ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
427
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
428
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
429
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
430
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
431
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
432
Assert::Equal(dwIndex, pPlan->cRollbackActions);
433
434
Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -472,7 +484,7 @@ namespace Bootstrapper
484
fRollback = FALSE;
485
dwIndex = 0;
486
DWORD dwExecuteCheckpointId = 2;
475
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
487
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
488
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
489
ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
490
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -483,13 +495,14 @@ namespace Bootstrapper
495
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
496
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
497
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
498
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
499
ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
500
Assert::Equal(dwIndex, pPlan->cExecuteActions);
501
502
fRollback = TRUE;
503
dwIndex = 0;
504
dwExecuteCheckpointId = 2;
492
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
505
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
506
ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
507
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
508
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
@@ -500,6 +513,7 @@ namespace Bootstrapper
513
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
514
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
515
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
516
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
517
ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
518
Assert::Equal(dwIndex, pPlan->cRollbackActions);
519
@@ -551,15 +565,17 @@ namespace Bootstrapper
565
fRollback = FALSE;
566
dwIndex = 0;
567
DWORD dwExecuteCheckpointId = 1;
554
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
568
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
569
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
570
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
571
Assert::Equal(dwIndex, pPlan->cExecuteActions);
572
573
fRollback = TRUE;
574
dwIndex = 0;
575
dwExecuteCheckpointId = 1;
561
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
576
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
577
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
578
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
579
Assert::Equal(dwIndex, pPlan->cRollbackActions);
580
581
Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -609,7 +625,7 @@ namespace Bootstrapper
625
fRollback = FALSE;
626
dwIndex = 0;
627
DWORD dwExecuteCheckpointId = 1;
612
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
628
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
629
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
630
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
631
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -618,12 +634,13 @@ namespace Bootstrapper
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);
635
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
636
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
637
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
638
Assert::Equal(dwIndex, pPlan->cExecuteActions);
639
640
fRollback = TRUE;
641
dwIndex = 0;
642
dwExecuteCheckpointId = 1;
626
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
643
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
644
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
645
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
646
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -632,6 +649,7 @@ namespace Bootstrapper
649
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
650
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
651
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
652
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
653
Assert::Equal(dwIndex, pPlan->cRollbackActions);
654
655
Assert::Equal(1ul, pPlan->cExecutePackagesTotal);
@@ -682,21 +700,23 @@ namespace Bootstrapper
700
fRollback = FALSE;
701
dwIndex = 0;
702
DWORD dwExecuteCheckpointId = 1;
685
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
703
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
704
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
705
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
706
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
707
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
708
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
709
Assert::Equal(dwIndex, pPlan->cExecuteActions);
710
711
fRollback = TRUE;
712
dwIndex = 0;
713
dwExecuteCheckpointId = 1;
695
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
714
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
715
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
716
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
717
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
718
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
719
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
720
Assert::Equal(dwIndex, pPlan->cRollbackActions);
721
722
Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
@@ -756,7 +776,7 @@ namespace Bootstrapper
776
dwIndex = 0;
777
DWORD dwExecuteCheckpointId = 2;
778
BURN_EXECUTE_ACTION* pExecuteAction = NULL;
759
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
779
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
780
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
781
dwExecuteCheckpointId += 1; // cache checkpoints
782
ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"NetFx48Web");
@@ -780,12 +800,13 @@ namespace Bootstrapper
800
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
801
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
802
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
803
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
804
Assert::Equal(dwIndex, pPlan->cExecuteActions);
805
806
fRollback = TRUE;
807
dwIndex = 0;
808
dwExecuteCheckpointId = 2;
788
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
809
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
810
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
811
dwExecuteCheckpointId += 1; // cache checkpoints
812
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -806,6 +827,7 @@ namespace Bootstrapper
827
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
828
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
829
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
830
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
831
Assert::Equal(dwIndex, pPlan->cRollbackActions);
832
833
Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
@@ -857,7 +879,7 @@ namespace Bootstrapper
879
dwIndex = 0;
880
DWORD dwExecuteCheckpointId = 1;
881
BURN_EXECUTE_ACTION* pExecuteAction = NULL;
860
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
882
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
883
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
884
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER);
885
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -873,12 +895,13 @@ namespace Bootstrapper
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);
896
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
897
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
898
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
899
Assert::Equal(dwIndex, pPlan->cExecuteActions);
900
901
fRollback = TRUE;
902
dwIndex = 0;
903
dwExecuteCheckpointId = 1;
881
- ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
904
+ ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
905
ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER);
906
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
907
ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER);
@@ -894,6 +917,7 @@ namespace Bootstrapper
917
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
918
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
919
ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
920
+ ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++);
921
Assert::Equal(dwIndex, pPlan->cRollbackActions);
922
923
Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
@@ -1402,7 +1426,7 @@ namespace Bootstrapper
1426
Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1427
}
1428
1405
- void ValidateExecuteRollbackBoundary(
1429
+ void ValidateExecuteRollbackBoundaryStart(
1430
__in BURN_PLAN* pPlan,
1431
__in BOOL fRollback,
1432
__in DWORD dwIndex,
@@ -1412,13 +1436,25 @@ namespace Bootstrapper
1436
)
1437
{
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);
1440
NativeAssert::StringEqual(wzId, pAction->rollbackBoundary.pRollbackBoundary->sczId);
1441
Assert::Equal<BOOL>(fVital, pAction->rollbackBoundary.pRollbackBoundary->fVital);
1442
Assert::Equal<BOOL>(fTransaction, pAction->rollbackBoundary.pRollbackBoundary->fTransaction);
1443
Assert::Equal<BOOL>(FALSE, pAction->fDeleted);
1444
}
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
+
1458
void ValidateExecuteUncachePackage(
1459
__in BURN_PLAN* pPlan,
1460
__in BOOL fRollback,
src/test/burn/WixToolsetTest.BurnE2E/RollbackBoundaryTests.cs
+1
-1
@@ -22,7 +22,7 @@ namespace WixToolsetTest.BurnE2E
22
/// install package B
23
/// unregister since no non-permanent packages should be installed or cached.
24
/// </summary>
25
- [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6309")]
25
+ [Fact]
26
public void NonVitalRollbackBoundarySkipsToNextRollbackBoundary()
27
{
28
var packageA = this.CreatePackageInstaller("PackageA");