diff options
| author | Sean Hall <r.sean.hall@gmail.com> | 2021-02-02 18:09:58 -0600 |
|---|---|---|
| committer | Sean Hall <r.sean.hall@gmail.com> | 2021-02-04 22:16:10 -0600 |
| commit | fd8c2b0899bfbce07386af245c04eb21dc01cbdf (patch) | |
| tree | 33d928124b0028729916189ddb9f239a9574c75d /src/test/BurnUnitTest/PlanTest.cpp | |
| parent | 39725a1a6d1c72a6748bd3c306af32bcae6dbf8f (diff) | |
| download | wix-fd8c2b0899bfbce07386af245c04eb21dc01cbdf.tar.gz wix-fd8c2b0899bfbce07386af245c04eb21dc01cbdf.tar.bz2 wix-fd8c2b0899bfbce07386af245c04eb21dc01cbdf.zip | |
Update the logic for determining when the bundle should be registered.
The basic rule is that if a non-permanent package is present at the end of the chain, then the bundle should be registered. If no non-permanent packages are present at the end of the chain, then the bundle should not be registered. This required tracking what actually happened with each package during Apply.
Include cache status in registration calculation.
Include dependency ref-counting when determining whether the bundle should be registered.
Diffstat (limited to 'src/test/BurnUnitTest/PlanTest.cpp')
| -rw-r--r-- | src/test/BurnUnitTest/PlanTest.cpp | 260 |
1 files changed, 201 insertions, 59 deletions
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, |
