aboutsummaryrefslogtreecommitdiff
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/BurnUnitTest/BurnTestFixture.h2
-rw-r--r--src/test/BurnUnitTest/PlanTest.cpp260
2 files changed, 203 insertions, 59 deletions
diff --git a/src/test/BurnUnitTest/BurnTestFixture.h b/src/test/BurnUnitTest/BurnTestFixture.h
index 6b041641..103972ef 100644
--- a/src/test/BurnUnitTest/BurnTestFixture.h
+++ b/src/test/BurnUnitTest/BurnTestFixture.h
@@ -35,6 +35,8 @@ namespace Bootstrapper
35 35
36 LogInitialize(::GetModuleHandleW(NULL)); 36 LogInitialize(::GetModuleHandleW(NULL));
37 37
38 LogSetLevel(REPORT_DEBUG, FALSE);
39
38 hr = LogOpen(NULL, L"BurnUnitTest", NULL, L"txt", FALSE, FALSE, NULL); 40 hr = LogOpen(NULL, L"BurnUnitTest", NULL, L"txt", FALSE, FALSE, NULL);
39 TestThrowOnFailure(hr, L"Failed to open log."); 41 TestThrowOnFailure(hr, L"Failed to open log.");
40 } 42 }
diff --git a/src/test/BurnUnitTest/PlanTest.cpp b/src/test/BurnUnitTest/PlanTest.cpp
index a65bef4d..a50c64e1 100644
--- a/src/test/BurnUnitTest/PlanTest.cpp
+++ b/src/test/BurnUnitTest/PlanTest.cpp
@@ -50,13 +50,12 @@ namespace Bootstrapper
50 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); 50 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action);
51 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); 51 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
52 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); 52 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
53 Assert::Equal<BOOL>(FALSE, pPlan->fKeepRegistrationDefault);
54 53
55 BOOL fRollback = FALSE; 54 BOOL fRollback = FALSE;
56 DWORD dwIndex = 0; 55 DWORD dwIndex = 0;
57 DWORD dwPackageStart = 0; 56 DWORD dwPackageStart = 0;
58 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); 57 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
59 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", 6, 2, 33743, FALSE); 58 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, 6, 2, 33743, FALSE);
60 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE); 59 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE);
61 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 6); 60 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 6);
62 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart); 61 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart);
@@ -64,7 +63,7 @@ namespace Bootstrapper
64 ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageA", FALSE); 63 ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageA", FALSE);
65 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE); 64 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE);
66 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 9); 65 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 9);
67 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageB", 14, 2, 33743, FALSE); 66 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageB", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, 14, 2, 33743, FALSE);
68 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", TRUE); 67 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", TRUE);
69 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 2); 68 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 2);
70 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageB", L"PackageB", TRUE, FALSE, dwPackageStart); 69 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageB", L"PackageB", TRUE, FALSE, dwPackageStart);
@@ -72,7 +71,7 @@ namespace Bootstrapper
72 ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageB", FALSE); 71 ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageB", FALSE);
73 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE); 72 ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE);
74 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 14); 73 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 14);
75 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageC", 22, 2, 33743, FALSE); 74 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageC", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, 22, 2, 33743, FALSE);
76 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", TRUE); 75 ValidateCacheAcquireContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", TRUE);
77 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 2); 76 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, dwPackageStart, 2);
78 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageC", L"PackageC", TRUE, FALSE, dwPackageStart); 77 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageC", L"PackageC", TRUE, FALSE, dwPackageStart);
@@ -99,9 +98,8 @@ namespace Bootstrapper
99 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 98 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
100 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 99 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
101 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 100 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
102 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 101 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
103 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 102 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
104 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, TRUE);
105 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 103 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
106 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 104 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
107 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 105 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -113,7 +111,7 @@ namespace Bootstrapper
113 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 111 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
114 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 112 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
115 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER); 113 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_REGISTER);
116 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 114 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 115 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
118 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 116 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
119 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 117 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -122,26 +120,25 @@ namespace Bootstrapper
122 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 120 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
123 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 121 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
124 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER); 122 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_REGISTER);
125 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 123 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
126 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 124 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
127 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER); 125 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_REGISTER);
128 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 126 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
129 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 127 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
130 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 128 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
131 ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[23].syncpoint.hEvent); 129 ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[23].syncpoint.hEvent);
132 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL); 130 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
133 Assert::Equal(dwIndex, pPlan->cExecuteActions); 131 Assert::Equal(dwIndex, pPlan->cExecuteActions);
134 132
135 fRollback = TRUE; 133 fRollback = TRUE;
136 dwIndex = 0; 134 dwIndex = 0;
137 dwExecuteCheckpointId = 2; 135 dwExecuteCheckpointId = 2;
138 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 136 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
139 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, FALSE);
140 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 137 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
141 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 138 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
142 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 139 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
143 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 140 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
144 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 141 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
145 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 142 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
146 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 143 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
147 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 144 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -166,7 +163,7 @@ namespace Bootstrapper
166 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 163 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
167 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 164 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
168 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 165 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
169 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); 166 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN, BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
170 Assert::Equal(dwIndex, pPlan->cRollbackActions); 167 Assert::Equal(dwIndex, pPlan->cRollbackActions);
171 168
172 Assert::Equal(4ul, pPlan->cExecutePackagesTotal); 169 Assert::Equal(4ul, pPlan->cExecutePackagesTotal);
@@ -197,7 +194,6 @@ namespace Bootstrapper
197 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); 194 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action);
198 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); 195 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
199 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); 196 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
200 Assert::Equal<BOOL>(TRUE, pPlan->fKeepRegistrationDefault);
201 197
202 BOOL fRollback = FALSE; 198 BOOL fRollback = FALSE;
203 DWORD dwIndex = 0; 199 DWORD dwIndex = 0;
@@ -220,13 +216,13 @@ namespace Bootstrapper
220 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 216 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageC", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
221 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 217 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
222 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER); 218 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageC", BURN_DEPENDENCY_ACTION_UNREGISTER);
223 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 219 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageC", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
224 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 220 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
225 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 221 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
226 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER); 222 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{E6469F05-BDC8-4EB8-B218-67412543EFAA}", BURN_DEPENDENCY_ACTION_UNREGISTER);
227 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 223 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
228 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER); 224 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageB", BURN_DEPENDENCY_ACTION_UNREGISTER);
229 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 225 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageB", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
230 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 226 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
231 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ"); 227 ValidateExecuteCommitMsiTransaction(pPlan, fRollback, dwIndex++, L"rbaOCA08D8ky7uBOK71_6FWz1K3TuQ");
232 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 228 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
@@ -236,8 +232,7 @@ namespace Bootstrapper
236 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 232 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
237 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 233 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
238 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 234 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
239 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 235 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
240 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, FALSE);
241 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 236 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
242 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 237 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
243 Assert::Equal(dwIndex, pPlan->cExecuteActions); 238 Assert::Equal(dwIndex, pPlan->cExecuteActions);
@@ -263,9 +258,8 @@ namespace Bootstrapper
263 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 258 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
264 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 259 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
265 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 260 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
266 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 261 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
267 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 262 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
268 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, TRUE);
269 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 263 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
270 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 264 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
271 Assert::Equal(dwIndex, pPlan->cRollbackActions); 265 Assert::Equal(dwIndex, pPlan->cRollbackActions);
@@ -274,9 +268,9 @@ namespace Bootstrapper
274 Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal); 268 Assert::Equal(3ul, pPlan->cOverallProgressTicksTotal);
275 269
276 dwIndex = 0; 270 dwIndex = 0;
277 ValidateCleanAction(pPlan, dwIndex++, L"PackageC"); 271 ValidateCleanAction(pPlan, dwIndex++, L"PackageC", BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
278 ValidateCleanAction(pPlan, dwIndex++, L"PackageB"); 272 ValidateCleanAction(pPlan, dwIndex++, L"PackageB", BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
279 ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); 273 ValidateCleanAction(pPlan, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
280 Assert::Equal(dwIndex, pPlan->cCleanActions); 274 Assert::Equal(dwIndex, pPlan->cCleanActions);
281 275
282 UINT uIndex = 0; 276 UINT uIndex = 0;
@@ -306,13 +300,12 @@ namespace Bootstrapper
306 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_CACHE, pPlan->action); 300 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_CACHE, pPlan->action);
307 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); 301 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
308 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); 302 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
309 Assert::Equal<BOOL>(FALSE, pPlan->fKeepRegistrationDefault);
310 303
311 BOOL fRollback = FALSE; 304 BOOL fRollback = FALSE;
312 DWORD dwIndex = 0; 305 DWORD dwIndex = 0;
313 DWORD dwPackageStart = 0; 306 DWORD dwPackageStart = 0;
314 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); 307 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
315 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", 5, 2, 33743, FALSE); 308 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, 5, 2, 33743, FALSE);
316 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2); 309 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2);
317 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart); 310 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart);
318 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ", TRUE, FALSE, dwPackageStart); 311 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ", TRUE, FALSE, dwPackageStart);
@@ -378,13 +371,12 @@ namespace Bootstrapper
378 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); 371 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action);
379 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); 372 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
380 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); 373 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
381 Assert::Equal<BOOL>(FALSE, pPlan->fKeepRegistrationDefault);
382 374
383 BOOL fRollback = FALSE; 375 BOOL fRollback = FALSE;
384 DWORD dwIndex = 0; 376 DWORD dwIndex = 0;
385 DWORD dwPackageStart = 0; 377 DWORD dwPackageStart = 0;
386 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); 378 ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1);
387 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", 5, 2, 33743, FALSE); 379 dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, 5, 2, 33743, FALSE);
388 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2); 380 ValidateCacheExtractContainer(pPlan, fRollback, dwIndex++, L"WixAttachedContainer", FALSE, BURN_PLAN_INVALID_ACTION_INDEX, 2);
389 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart); 381 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart);
390 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ", TRUE, FALSE, dwPackageStart); 382 ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"cab9Ins_fTP3wNwq5Gxo41ch5VUPaQ", TRUE, FALSE, dwPackageStart);
@@ -410,32 +402,30 @@ namespace Bootstrapper
410 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 402 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
411 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 403 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
412 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 404 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
413 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 405 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
414 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 406 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
415 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, TRUE);
416 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER); 407 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
417 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 408 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
418 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 409 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
419 ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[6].syncpoint.hEvent); 410 ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[6].syncpoint.hEvent);
420 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL); 411 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, NULL);
421 Assert::Equal(dwIndex, pPlan->cExecuteActions); 412 Assert::Equal(dwIndex, pPlan->cExecuteActions);
422 413
423 fRollback = TRUE; 414 fRollback = TRUE;
424 dwIndex = 0; 415 dwIndex = 0;
425 dwExecuteCheckpointId = 2; 416 dwExecuteCheckpointId = 2;
426 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); 417 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
427 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, FALSE);
428 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); 418 ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA");
429 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 419 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
430 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 420 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
431 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 421 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
432 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 422 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
433 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 423 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
434 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER); 424 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
435 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 425 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
436 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 426 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
437 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 427 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
438 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL); 428 ValidateExecuteExePackage(pPlan, fRollback, dwIndex++, L"{FD9920AD-DBCA-4C6C-8CD5-B47431CE8D21}", BURN_PACKAGE_REGISTRATION_STATE_UNKNOWN, BOOTSTRAPPER_ACTION_STATE_INSTALL, NULL);
439 Assert::Equal(dwIndex, pPlan->cRollbackActions); 429 Assert::Equal(dwIndex, pPlan->cRollbackActions);
440 430
441 Assert::Equal(2ul, pPlan->cExecutePackagesTotal); 431 Assert::Equal(2ul, pPlan->cExecutePackagesTotal);
@@ -450,6 +440,62 @@ namespace Bootstrapper
450 } 440 }
451 441
452 [Fact] 442 [Fact]
443 void SingleMsiInstalledWithNoInstalledPackagesModifyTest()
444 {
445 HRESULT hr = S_OK;
446 BURN_ENGINE_STATE engineState = { };
447 BURN_ENGINE_STATE* pEngineState = &engineState;
448 BURN_PLAN* pPlan = &engineState.plan;
449
450 InitializeEngineStateForCorePlan(wzSingleMsiManifestFileName, pEngineState);
451 PlanTestDetect(pEngineState);
452
453 pEngineState->registration.fInstalled = TRUE;
454
455 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_MODIFY);
456 NativeAssert::Succeeded(hr, "CorePlan failed");
457
458 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_MODIFY, pPlan->action);
459 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
460 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
461
462 BOOL fRollback = FALSE;
463 DWORD dwIndex = 0;
464 Assert::Equal(dwIndex, pPlan->cCacheActions);
465
466 fRollback = TRUE;
467 dwIndex = 0;
468 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
469
470 Assert::Equal(0ull, pPlan->qwEstimatedSize);
471 Assert::Equal(0ull, pPlan->qwCacheSizeTotal);
472
473 fRollback = FALSE;
474 dwIndex = 0;
475 DWORD dwExecuteCheckpointId = 1;
476 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
477 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
478 Assert::Equal(dwIndex, pPlan->cExecuteActions);
479
480 fRollback = TRUE;
481 dwIndex = 0;
482 dwExecuteCheckpointId = 1;
483 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
484 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
485 Assert::Equal(dwIndex, pPlan->cRollbackActions);
486
487 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
488 Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal);
489
490 dwIndex = 0;
491 Assert::Equal(dwIndex, pPlan->cCleanActions);
492
493 UINT uIndex = 0;
494 ValidatePlannedProvider(pPlan, uIndex++, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", NULL);
495 Assert::Equal(uIndex, pPlan->cPlannedProviders);
496 }
497
498 [Fact]
453 void SingleMsiUninstallTest() 499 void SingleMsiUninstallTest()
454 { 500 {
455 HRESULT hr = S_OK; 501 HRESULT hr = S_OK;
@@ -466,7 +512,6 @@ namespace Bootstrapper
466 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); 512 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action);
467 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); 513 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
468 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); 514 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
469 Assert::Equal<BOOL>(TRUE, pPlan->fKeepRegistrationDefault);
470 515
471 BOOL fRollback = FALSE; 516 BOOL fRollback = FALSE;
472 DWORD dwIndex = 0; 517 DWORD dwIndex = 0;
@@ -488,8 +533,7 @@ namespace Bootstrapper
488 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 533 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
489 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); 534 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER);
490 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 535 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
491 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 536 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
492 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, FALSE);
493 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 537 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
494 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 538 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
495 Assert::Equal(dwIndex, pPlan->cExecuteActions); 539 Assert::Equal(dwIndex, pPlan->cExecuteActions);
@@ -502,9 +546,8 @@ namespace Bootstrapper
502 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 546 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
503 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); 547 ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER);
504 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 548 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
505 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); 549 ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0);
506 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 550 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
507 ValidateExecuteRegistration(pPlan, fRollback, dwIndex++, TRUE);
508 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 551 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
509 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); 552 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
510 Assert::Equal(dwIndex, pPlan->cRollbackActions); 553 Assert::Equal(dwIndex, pPlan->cRollbackActions);
@@ -513,7 +556,7 @@ namespace Bootstrapper
513 Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal); 556 Assert::Equal(1ul, pPlan->cOverallProgressTicksTotal);
514 557
515 dwIndex = 0; 558 dwIndex = 0;
516 ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); 559 ValidateCleanAction(pPlan, dwIndex++, L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT);
517 Assert::Equal(dwIndex, pPlan->cCleanActions); 560 Assert::Equal(dwIndex, pPlan->cCleanActions);
518 561
519 UINT uIndex = 0; 562 UINT uIndex = 0;
@@ -522,6 +565,66 @@ namespace Bootstrapper
522 Assert::Equal(uIndex, pPlan->cPlannedProviders); 565 Assert::Equal(uIndex, pPlan->cPlannedProviders);
523 } 566 }
524 567
568 [Fact]
569 void SingleMsiUninstallTestFromUpgradeBundleWithSameExactPackage()
570 {
571 HRESULT hr = S_OK;
572 BURN_ENGINE_STATE engineState = { };
573 BURN_ENGINE_STATE* pEngineState = &engineState;
574 BURN_PLAN* pPlan = &engineState.plan;
575
576 InitializeEngineStateForCorePlan(wzSingleMsiManifestFileName, pEngineState);
577 DetectAsRelatedUpgradeBundle(&engineState, L"{02940F3E-C83E-452D-BFCF-C943777ACEAE}", L"2.0.0.0");
578
579 hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL);
580 NativeAssert::Succeeded(hr, "CorePlan failed");
581
582 Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action);
583 Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine);
584 Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback);
585
586 BOOL fRollback = FALSE;
587 DWORD dwIndex = 0;
588 Assert::Equal(dwIndex, pPlan->cCacheActions);
589
590 fRollback = TRUE;
591 dwIndex = 0;
592 Assert::Equal(dwIndex, pPlan->cRollbackCacheActions);
593
594 Assert::Equal(0ull, pPlan->qwEstimatedSize);
595 Assert::Equal(0ull, pPlan->qwCacheSizeTotal);
596
597 fRollback = FALSE;
598 dwIndex = 0;
599 DWORD dwExecuteCheckpointId = 1;
600 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
601 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
602 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_UNREGISTER);
603 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
604 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
605 Assert::Equal(dwIndex, pPlan->cExecuteActions);
606
607 fRollback = TRUE;
608 dwIndex = 0;
609 dwExecuteCheckpointId = 1;
610 ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE);
611 ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", BURN_DEPENDENCY_ACTION_REGISTER);
612 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
613 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
614 ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++);
615 Assert::Equal(dwIndex, pPlan->cRollbackActions);
616
617 Assert::Equal(0ul, pPlan->cExecutePackagesTotal);
618 Assert::Equal(0ul, pPlan->cOverallProgressTicksTotal);
619
620 dwIndex = 0;
621 Assert::Equal(dwIndex, pPlan->cCleanActions);
622
623 UINT uIndex = 0;
624 ValidatePlannedProvider(pPlan, uIndex++, L"{A6F0CBF7-1578-450C-B9D7-9CF2EEC40002}", NULL);
625 Assert::Equal(uIndex, pPlan->cPlannedProviders);
626 }
627
525 private: 628 private:
526 // This doesn't initialize everything, just enough for CorePlan to work. 629 // This doesn't initialize everything, just enough for CorePlan to work.
527 void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState) 630 void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState)
@@ -586,12 +689,22 @@ namespace Bootstrapper
586 void DetectPackageAsAbsent(BURN_PACKAGE* pPackage) 689 void DetectPackageAsAbsent(BURN_PACKAGE* pPackage)
587 { 690 {
588 pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT; 691 pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT;
692 if (pPackage->fCanAffectRegistration)
693 {
694 pPackage->cacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_ABSENT;
695 pPackage->installRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_ABSENT;
696 }
589 } 697 }
590 698
591 void DetectPackageAsPresentAndCached(BURN_PACKAGE* pPackage) 699 void DetectPackageAsPresentAndCached(BURN_PACKAGE* pPackage)
592 { 700 {
593 pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_PRESENT; 701 pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_PRESENT;
594 pPackage->cache = BURN_CACHE_STATE_COMPLETE; 702 pPackage->cache = BURN_CACHE_STATE_COMPLETE;
703 if (pPackage->fCanAffectRegistration)
704 {
705 pPackage->cacheRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT;
706 pPackage->installRegistrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT;
707 }
595 708
596 for (DWORD i = 0; i < pPackage->cPayloads; ++i) 709 for (DWORD i = 0; i < pPackage->cPayloads; ++i)
597 { 710 {
@@ -599,6 +712,19 @@ namespace Bootstrapper
599 } 712 }
600 } 713 }
601 714
715 void DetectPackageDependent(BURN_PACKAGE* pPackage, LPCWSTR wzId)
716 {
717 HRESULT hr = S_OK;
718
719 for (DWORD i = 0; i < pPackage->cDependencyProviders; ++i)
720 {
721 BURN_DEPENDENCY_PROVIDER* pProvider = pPackage->rgDependencyProviders + i;
722
723 hr = DepDependencyArrayAlloc(&pProvider->rgDependents, &pProvider->cDependents, wzId, NULL);
724 NativeAssert::Succeeded(hr, "Failed to add package dependent");
725 }
726 }
727
602 void DetectPackagesAsAbsent(BURN_ENGINE_STATE* pEngineState) 728 void DetectPackagesAsAbsent(BURN_ENGINE_STATE* pEngineState)
603 { 729 {
604 PlanTestDetect(pEngineState); 730 PlanTestDetect(pEngineState);
@@ -620,6 +746,7 @@ namespace Bootstrapper
620 { 746 {
621 BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; 747 BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i;
622 DetectPackageAsPresentAndCached(pPackage); 748 DetectPackageAsPresentAndCached(pPackage);
749 DetectPackageDependent(pPackage, pEngineState->registration.sczId);
623 } 750 }
624 } 751 }
625 752
@@ -639,11 +766,12 @@ namespace Bootstrapper
639 else 766 else
640 { 767 {
641 DetectPackageAsPresentAndCached(pPackage); 768 DetectPackageAsPresentAndCached(pPackage);
769 DetectPackageDependent(pPackage, pEngineState->registration.sczId);
642 } 770 }
643 } 771 }
644 } 772 }
645 773
646 HRESULT DetectUpgradeBundle( 774 void DetectUpgradeBundle(
647 __in BURN_ENGINE_STATE* pEngineState, 775 __in BURN_ENGINE_STATE* pEngineState,
648 __in LPCWSTR wzId, 776 __in LPCWSTR wzId,
649 __in LPCWSTR wzVersion 777 __in LPCWSTR wzVersion
@@ -654,30 +782,48 @@ namespace Bootstrapper
654 BURN_DEPENDENCY_PROVIDER dependencyProvider = { }; 782 BURN_DEPENDENCY_PROVIDER dependencyProvider = { };
655 783
656 hr = StrAllocString(&dependencyProvider.sczKey, wzId, 0); 784 hr = StrAllocString(&dependencyProvider.sczKey, wzId, 0);
657 ExitOnFailure(hr, "Failed to copy provider key"); 785 NativeAssert::Succeeded(hr, "Failed to copy provider key");
658 786
659 dependencyProvider.fImported = TRUE; 787 dependencyProvider.fImported = TRUE;
660 788
661 hr = StrAllocString(&dependencyProvider.sczVersion, wzVersion, 0); 789 hr = StrAllocString(&dependencyProvider.sczVersion, wzVersion, 0);
662 ExitOnFailure(hr, "Failed to copy version"); 790 NativeAssert::Succeeded(hr, "Failed to copy version");
663 791
664 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pRelatedBundles->rgRelatedBundles), pRelatedBundles->cRelatedBundles + 1, sizeof(BURN_RELATED_BUNDLE), 5); 792 hr = MemEnsureArraySize(reinterpret_cast<LPVOID*>(&pRelatedBundles->rgRelatedBundles), pRelatedBundles->cRelatedBundles + 1, sizeof(BURN_RELATED_BUNDLE), 5);
665 ExitOnFailure(hr, "Failed to ensure there is space for related bundles."); 793 NativeAssert::Succeeded(hr, "Failed to ensure there is space for related bundles.");
666 794
667 BURN_RELATED_BUNDLE* pRelatedBundle = pRelatedBundles->rgRelatedBundles + pRelatedBundles->cRelatedBundles; 795 BURN_RELATED_BUNDLE* pRelatedBundle = pRelatedBundles->rgRelatedBundles + pRelatedBundles->cRelatedBundles;
668 796
669 hr = VerParseVersion(wzVersion, 0, FALSE, &pRelatedBundle->pVersion); 797 hr = VerParseVersion(wzVersion, 0, FALSE, &pRelatedBundle->pVersion);
670 ExitOnFailure(hr, "Failed to parse pseudo bundle version: %ls", wzVersion); 798 NativeAssert::Succeeded(hr, "Failed to parse pseudo bundle version: %ls", wzVersion);
671 799
672 pRelatedBundle->relationType = BOOTSTRAPPER_RELATION_UPGRADE; 800 pRelatedBundle->relationType = BOOTSTRAPPER_RELATION_UPGRADE;
673 801
674 hr = PseudoBundleInitialize(0, &pRelatedBundle->package, TRUE, wzId, pRelatedBundle->relationType, BOOTSTRAPPER_PACKAGE_STATE_PRESENT, NULL, NULL, NULL, 0, FALSE, L"-quiet", L"-repair -quiet", L"-uninstall -quiet", &dependencyProvider, NULL, 0); 802 hr = PseudoBundleInitialize(0, &pRelatedBundle->package, TRUE, wzId, pRelatedBundle->relationType, BOOTSTRAPPER_PACKAGE_STATE_PRESENT, NULL, NULL, NULL, 0, FALSE, L"-quiet", L"-repair -quiet", L"-uninstall -quiet", &dependencyProvider, NULL, 0);
675 ExitOnFailure(hr, "Failed to initialize related bundle to represent bundle: %ls", wzId); 803 NativeAssert::Succeeded(hr, "Failed to initialize related bundle to represent bundle: %ls", wzId);
676 804
677 ++pRelatedBundles->cRelatedBundles; 805 ++pRelatedBundles->cRelatedBundles;
806 }
807
808 void DetectAsRelatedUpgradeBundle(
809 __in BURN_ENGINE_STATE* pEngineState,
810 __in LPCWSTR wzId,
811 __in LPCWSTR wzVersion
812 )
813 {
814 HRESULT hr = StrAllocString(&pEngineState->registration.sczAncestors, wzId, 0);
815 NativeAssert::Succeeded(hr, "Failed to set registration's ancestors");
816
817 pEngineState->command.relationType = BOOTSTRAPPER_RELATION_UPGRADE;
678 818
679 LExit: 819 DetectPackagesAsPresentAndCached(pEngineState);
680 return hr; 820 DetectUpgradeBundle(pEngineState, wzId, wzVersion);
821
822 for (DWORD i = 0; i < pEngineState->packages.cPackages; ++i)
823 {
824 BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i;
825 DetectPackageDependent(pPackage, wzId);
826 }
681 } 827 }
682 828
683 void ValidateCacheAcquireContainer( 829 void ValidateCacheAcquireContainer(
@@ -755,6 +901,7 @@ namespace Bootstrapper
755 __in BOOL fRollback, 901 __in BOOL fRollback,
756 __in DWORD dwIndex, 902 __in DWORD dwIndex,
757 __in LPCWSTR wzPackageId, 903 __in LPCWSTR wzPackageId,
904 __in BURN_PACKAGE_REGISTRATION_STATE expectedCacheRegistrationState,
758 __in DWORD iPackageCompleteAction, 905 __in DWORD iPackageCompleteAction,
759 __in DWORD cCachePayloads, 906 __in DWORD cCachePayloads,
760 __in DWORD64 qwCachePayloadSizeTotal, 907 __in DWORD64 qwCachePayloadSizeTotal,
@@ -764,6 +911,7 @@ namespace Bootstrapper
764 BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex); 911 BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex);
765 Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_PACKAGE_START, pAction->type); 912 Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_PACKAGE_START, pAction->type);
766 NativeAssert::StringEqual(wzPackageId, pAction->packageStart.pPackage->sczId); 913 NativeAssert::StringEqual(wzPackageId, pAction->packageStart.pPackage->sczId);
914 Assert::Equal<DWORD>(expectedCacheRegistrationState, pAction->packageStart.pPackage->expectedCacheRegistrationState);
767 Assert::Equal(iPackageCompleteAction, pAction->packageStart.iPackageCompleteAction); 915 Assert::Equal(iPackageCompleteAction, pAction->packageStart.iPackageCompleteAction);
768 Assert::Equal(cCachePayloads, pAction->packageStart.cCachePayloads); 916 Assert::Equal(cCachePayloads, pAction->packageStart.cCachePayloads);
769 Assert::Equal(qwCachePayloadSizeTotal, pAction->packageStart.qwCachePayloadSizeTotal); 917 Assert::Equal(qwCachePayloadSizeTotal, pAction->packageStart.qwCachePayloadSizeTotal);
@@ -815,7 +963,8 @@ namespace Bootstrapper
815 void ValidateCleanAction( 963 void ValidateCleanAction(
816 __in BURN_PLAN* pPlan, 964 __in BURN_PLAN* pPlan,
817 __in DWORD dwIndex, 965 __in DWORD dwIndex,
818 __in LPCWSTR wzPackageId 966 __in LPCWSTR wzPackageId,
967 __in BURN_PACKAGE_REGISTRATION_STATE expectedCacheRegistrationState
819 ) 968 )
820 { 969 {
821 Assert::InRange(dwIndex + 1ul, 1ul, pPlan->cCleanActions); 970 Assert::InRange(dwIndex + 1ul, 1ul, pPlan->cCleanActions);
@@ -823,6 +972,7 @@ namespace Bootstrapper
823 BURN_CLEAN_ACTION* pCleanAction = pPlan->rgCleanActions + dwIndex; 972 BURN_CLEAN_ACTION* pCleanAction = pPlan->rgCleanActions + dwIndex;
824 Assert::NotEqual((DWORD_PTR)0, (DWORD_PTR)pCleanAction->pPackage); 973 Assert::NotEqual((DWORD_PTR)0, (DWORD_PTR)pCleanAction->pPackage);
825 NativeAssert::StringEqual(wzPackageId, pCleanAction->pPackage->sczId); 974 NativeAssert::StringEqual(wzPackageId, pCleanAction->pPackage->sczId);
975 Assert::Equal<DWORD>(expectedCacheRegistrationState, pCleanAction->pPackage->expectedCacheRegistrationState);
826 } 976 }
827 977
828 BURN_EXECUTE_ACTION* ValidateExecuteActionExists(BURN_PLAN* pPlan, BOOL fRollback, DWORD dwIndex) 978 BURN_EXECUTE_ACTION* ValidateExecuteActionExists(BURN_PLAN* pPlan, BOOL fRollback, DWORD dwIndex)
@@ -872,6 +1022,7 @@ namespace Bootstrapper
872 __in BOOL fRollback, 1022 __in BOOL fRollback,
873 __in DWORD dwIndex, 1023 __in DWORD dwIndex,
874 __in LPCWSTR wzPackageId, 1024 __in LPCWSTR wzPackageId,
1025 __in BURN_PACKAGE_REGISTRATION_STATE expectedInstallRegistrationState,
875 __in BOOTSTRAPPER_ACTION_STATE action, 1026 __in BOOTSTRAPPER_ACTION_STATE action,
876 __in LPCWSTR wzIgnoreDependencies 1027 __in LPCWSTR wzIgnoreDependencies
877 ) 1028 )
@@ -879,6 +1030,7 @@ namespace Bootstrapper
879 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex); 1030 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
880 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE, pAction->type); 1031 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_EXE_PACKAGE, pAction->type);
881 NativeAssert::StringEqual(wzPackageId, pAction->exePackage.pPackage->sczId); 1032 NativeAssert::StringEqual(wzPackageId, pAction->exePackage.pPackage->sczId);
1033 Assert::Equal<DWORD>(expectedInstallRegistrationState, pAction->exePackage.pPackage->expectedInstallRegistrationState);
882 Assert::Equal<DWORD>(action, pAction->exePackage.action); 1034 Assert::Equal<DWORD>(action, pAction->exePackage.action);
883 NativeAssert::StringEqual(wzIgnoreDependencies, pAction->exePackage.sczIgnoreDependencies); 1035 NativeAssert::StringEqual(wzIgnoreDependencies, pAction->exePackage.sczIgnoreDependencies);
884 } 1036 }
@@ -888,6 +1040,7 @@ namespace Bootstrapper
888 __in BOOL fRollback, 1040 __in BOOL fRollback,
889 __in DWORD dwIndex, 1041 __in DWORD dwIndex,
890 __in LPCWSTR wzPackageId, 1042 __in LPCWSTR wzPackageId,
1043 __in BURN_PACKAGE_REGISTRATION_STATE expectedInstallRegistrationState,
891 __in BOOTSTRAPPER_ACTION_STATE action, 1044 __in BOOTSTRAPPER_ACTION_STATE action,
892 __in BURN_MSI_PROPERTY actionMsiProperty, 1045 __in BURN_MSI_PROPERTY actionMsiProperty,
893 __in DWORD uiLevel, 1046 __in DWORD uiLevel,
@@ -898,6 +1051,7 @@ namespace Bootstrapper
898 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex); 1051 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
899 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE, pAction->type); 1052 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_MSI_PACKAGE, pAction->type);
900 NativeAssert::StringEqual(wzPackageId, pAction->msiPackage.pPackage->sczId); 1053 NativeAssert::StringEqual(wzPackageId, pAction->msiPackage.pPackage->sczId);
1054 Assert::Equal<DWORD>(expectedInstallRegistrationState, pAction->msiPackage.pPackage->expectedInstallRegistrationState);
901 Assert::Equal<DWORD>(action, pAction->msiPackage.action); 1055 Assert::Equal<DWORD>(action, pAction->msiPackage.action);
902 Assert::Equal<DWORD>(actionMsiProperty, pAction->msiPackage.actionMsiProperty); 1056 Assert::Equal<DWORD>(actionMsiProperty, pAction->msiPackage.actionMsiProperty);
903 Assert::Equal<DWORD>(uiLevel, pAction->msiPackage.uiLevel); 1057 Assert::Equal<DWORD>(uiLevel, pAction->msiPackage.uiLevel);
@@ -936,18 +1090,6 @@ namespace Bootstrapper
936 Assert::Equal<DWORD>(action, pAction->packageProvider.action); 1090 Assert::Equal<DWORD>(action, pAction->packageProvider.action);
937 } 1091 }
938 1092
939 void ValidateExecuteRegistration(
940 __in BURN_PLAN* pPlan,
941 __in BOOL fRollback,
942 __in DWORD dwIndex,
943 __in BOOL fKeep
944 )
945 {
946 BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex);
947 Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_REGISTRATION, pAction->type);
948 Assert::Equal<BOOL>(fKeep, pAction->registration.fKeep);
949 }
950
951 void ValidateExecuteRollbackBoundary( 1093 void ValidateExecuteRollbackBoundary(
952 __in BURN_PLAN* pPlan, 1094 __in BURN_PLAN* pPlan,
953 __in BOOL fRollback, 1095 __in BOOL fRollback,