diff options
Diffstat (limited to 'src/burn/test/BurnUnitTest/PlanTest.cpp')
| -rw-r--r-- | src/burn/test/BurnUnitTest/PlanTest.cpp | 123 |
1 files changed, 121 insertions, 2 deletions
diff --git a/src/burn/test/BurnUnitTest/PlanTest.cpp b/src/burn/test/BurnUnitTest/PlanTest.cpp index 37027ada..7998f837 100644 --- a/src/burn/test/BurnUnitTest/PlanTest.cpp +++ b/src/burn/test/BurnUnitTest/PlanTest.cpp | |||
| @@ -654,10 +654,10 @@ namespace Bootstrapper | |||
| 654 | fRollback = FALSE; | 654 | fRollback = FALSE; |
| 655 | dwIndex = 0; | 655 | dwIndex = 0; |
| 656 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | 656 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); |
| 657 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA", TRUE, BURN_CACHE_PACKAGE_TYPE_REQUIRED, BURN_CACHE_PACKAGE_TYPE_REQUIRED); | 657 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA", TRUE, BURN_CACHE_PACKAGE_TYPE_REQUIRED, BURN_CACHE_PACKAGE_TYPE_OPTIONAL); |
| 658 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageA"); | 658 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageA"); |
| 659 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 6); | 659 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 6); |
| 660 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageB", TRUE, BURN_CACHE_PACKAGE_TYPE_REQUIRED, BURN_CACHE_PACKAGE_TYPE_REQUIRED); | 660 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageB", TRUE, BURN_CACHE_PACKAGE_TYPE_REQUIRED, BURN_CACHE_PACKAGE_TYPE_OPTIONAL); |
| 661 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageB"); | 661 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageB"); |
| 662 | Assert::Equal(dwIndex, pPlan->cCacheActions); | 662 | Assert::Equal(dwIndex, pPlan->cCacheActions); |
| 663 | 663 | ||
| @@ -825,6 +825,125 @@ namespace Bootstrapper | |||
| 825 | } | 825 | } |
| 826 | 826 | ||
| 827 | [Fact] | 827 | [Fact] |
| 828 | void MultipleBundlePackageUninstallTest() | ||
| 829 | { | ||
| 830 | HRESULT hr = S_OK; | ||
| 831 | BURN_ENGINE_STATE engineState = { }; | ||
| 832 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
| 833 | BURN_PLAN* pPlan = &engineState.plan; | ||
| 834 | |||
| 835 | InitializeEngineStateForCorePlan(wzMultipleBundlePackageManifestFileName, pEngineState); | ||
| 836 | DetectAttachedContainerAsAttached(pEngineState); | ||
| 837 | DetectPackagesAsPresentAndCached(pEngineState); | ||
| 838 | |||
| 839 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL); | ||
| 840 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
| 841 | |||
| 842 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | ||
| 843 | NativeAssert::StringEqual(L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", pPlan->wzBundleId); | ||
| 844 | NativeAssert::StringEqual(L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", pPlan->wzBundleProviderKey); | ||
| 845 | Assert::Equal<BOOL>(FALSE, pPlan->fEnabledForwardCompatibleBundle); | ||
| 846 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
| 847 | Assert::Equal<BOOL>(TRUE, pPlan->fCanAffectMachineState); | ||
| 848 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
| 849 | Assert::Equal<BOOL>(FALSE, pPlan->fDisallowRemoval); | ||
| 850 | Assert::Equal<BOOL>(FALSE, pPlan->fDowngrade); | ||
| 851 | Assert::Equal<DWORD>(BURN_REGISTRATION_ACTION_OPERATIONS_CACHE_BUNDLE | BURN_REGISTRATION_ACTION_OPERATIONS_WRITE_PROVIDER_KEY, pPlan->dwRegistrationOperations); | ||
| 852 | |||
| 853 | BOOL fRollback = FALSE; | ||
| 854 | DWORD dwIndex = 0; | ||
| 855 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, FALSE, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 856 | Assert::Equal(dwIndex, pPlan->cRegistrationActions); | ||
| 857 | |||
| 858 | fRollback = TRUE; | ||
| 859 | dwIndex = 0; | ||
| 860 | ValidateDependentRegistrationAction(pPlan, fRollback, dwIndex++, TRUE, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 861 | Assert::Equal(dwIndex, pPlan->cRollbackRegistrationActions); | ||
| 862 | |||
| 863 | fRollback = FALSE; | ||
| 864 | dwIndex = 0; | ||
| 865 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | ||
| 866 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageB", FALSE, BURN_CACHE_PACKAGE_TYPE_OPTIONAL, BURN_CACHE_PACKAGE_TYPE_REQUIRED); | ||
| 867 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageB"); | ||
| 868 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 6); | ||
| 869 | ValidateCachePackage(pPlan, fRollback, dwIndex++, L"PackageA", FALSE, BURN_CACHE_PACKAGE_TYPE_OPTIONAL, BURN_CACHE_PACKAGE_TYPE_REQUIRED); | ||
| 870 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, L"PackageA"); | ||
| 871 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
| 872 | |||
| 873 | fRollback = TRUE; | ||
| 874 | dwIndex = 0; | ||
| 875 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
| 876 | |||
| 877 | Assert::Equal(78462280ull, pPlan->qwCacheSizeTotal); | ||
| 878 | |||
| 879 | fRollback = FALSE; | ||
| 880 | dwIndex = 0; | ||
| 881 | DWORD dwExecuteCheckpointId = 2; | ||
| 882 | ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 883 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 884 | ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageB"); | ||
| 885 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 886 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", unregisterActions1, 1); | ||
| 887 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 888 | ValidateExecuteBundlePackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 889 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 890 | dwExecuteCheckpointId += 1; // cache checkpoints | ||
| 891 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 892 | ValidateExecuteWaitCachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | ||
| 893 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 894 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", unregisterActions1, 1); | ||
| 895 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 896 | ValidateExecuteBundlePackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 897 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 898 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 899 | ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); | ||
| 900 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
| 901 | |||
| 902 | fRollback = TRUE; | ||
| 903 | dwIndex = 0; | ||
| 904 | dwExecuteCheckpointId = 2; | ||
| 905 | ValidateExecuteRollbackBoundaryStart(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 906 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 907 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageB", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", registerActions1, 1); | ||
| 908 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 909 | ValidateExecuteBundlePackage(pPlan, fRollback, dwIndex++, L"PackageB", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 910 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 911 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 912 | dwExecuteCheckpointId += 1; // cache checkpoints | ||
| 913 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 914 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", registerActions1, 1); | ||
| 915 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 916 | ValidateExecuteBundlePackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}"); | ||
| 917 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 918 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 919 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 920 | ValidateExecuteRollbackBoundaryEnd(pPlan, fRollback, dwIndex++); | ||
| 921 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
| 922 | |||
| 923 | Assert::Equal(2ul, pPlan->cExecutePackagesTotal); | ||
| 924 | Assert::Equal(4ul, pPlan->cOverallProgressTicksTotal); | ||
| 925 | |||
| 926 | dwIndex = 0; | ||
| 927 | Assert::Equal(dwIndex, pPlan->cRestoreRelatedBundleActions); | ||
| 928 | |||
| 929 | dwIndex = 0; | ||
| 930 | ValidateCleanAction(pPlan, dwIndex++, L"PackageB"); | ||
| 931 | ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); | ||
| 932 | ValidateCleanAction(pPlan, dwIndex++, L"NetFx48Web"); | ||
| 933 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
| 934 | |||
| 935 | UINT uIndex = 0; | ||
| 936 | ValidatePlannedProvider(pPlan, uIndex++, L"{35192ED0-C70A-49B2-9D12-3B1FA39B5E6F}", NULL); | ||
| 937 | ValidatePlannedProvider(pPlan, uIndex++, L"{7506235A-7C59-4750-82C7-EB460A87ED3A}", NULL); | ||
| 938 | ValidatePlannedProvider(pPlan, uIndex++, L"{B39CEE4D-CCD7-4797-BE3A-6613BD1DC4BE}", NULL); | ||
| 939 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
| 940 | |||
| 941 | Assert::Equal(3ul, pEngineState->packages.cPackages); | ||
| 942 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT); | ||
| 943 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[2], L"PackageB", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT); | ||
| 944 | } | ||
| 945 | |||
| 946 | [Fact] | ||
| 828 | void OrphanCompatiblePackageTest() | 947 | void OrphanCompatiblePackageTest() |
| 829 | { | 948 | { |
| 830 | HRESULT hr = S_OK; | 949 | HRESULT hr = S_OK; |
