diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/BurnUnitTest/BurnTestFixture.h | 2 | ||||
-rw-r--r-- | src/test/BurnUnitTest/PlanTest.cpp | 260 |
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, |