diff options
Diffstat (limited to 'src/test/BurnUnitTest/PlanTest.cpp')
| -rw-r--r-- | src/test/BurnUnitTest/PlanTest.cpp | 303 |
1 files changed, 301 insertions, 2 deletions
diff --git a/src/test/BurnUnitTest/PlanTest.cpp b/src/test/BurnUnitTest/PlanTest.cpp index 42c11968..820f88c2 100644 --- a/src/test/BurnUnitTest/PlanTest.cpp +++ b/src/test/BurnUnitTest/PlanTest.cpp | |||
| @@ -11,6 +11,7 @@ static HRESULT WINAPI PlanTestBAProc( | |||
| 11 | 11 | ||
| 12 | static LPCWSTR wzMsiTransactionManifestFileName = L"MsiTransaction_BundleAv1_manifest.xml"; | 12 | static LPCWSTR wzMsiTransactionManifestFileName = L"MsiTransaction_BundleAv1_manifest.xml"; |
| 13 | static LPCWSTR wzSingleMsiManifestFileName = L"BasicFunctionality_BundleA_manifest.xml"; | 13 | static LPCWSTR wzSingleMsiManifestFileName = L"BasicFunctionality_BundleA_manifest.xml"; |
| 14 | static LPCWSTR wzSlipstreamManifestFileName = L"Slipstream_BundleA_manifest.xml"; | ||
| 14 | 15 | ||
| 15 | namespace Microsoft | 16 | namespace Microsoft |
| 16 | { | 17 | { |
| @@ -650,6 +651,210 @@ namespace Bootstrapper | |||
| 650 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_IGNORED, BURN_PACKAGE_REGISTRATION_STATE_IGNORED); | 651 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_IGNORED, BURN_PACKAGE_REGISTRATION_STATE_IGNORED); |
| 651 | } | 652 | } |
| 652 | 653 | ||
| 654 | [Fact] | ||
| 655 | void SlipstreamInstallTest() | ||
| 656 | { | ||
| 657 | HRESULT hr = S_OK; | ||
| 658 | BURN_ENGINE_STATE engineState = { }; | ||
| 659 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
| 660 | BURN_PLAN* pPlan = &engineState.plan; | ||
| 661 | |||
| 662 | InitializeEngineStateForCorePlan(wzSlipstreamManifestFileName, pEngineState); | ||
| 663 | DetectPermanentPackagesAsPresentAndCached(pEngineState); | ||
| 664 | PlanTestDetectPatchInitialize(pEngineState); | ||
| 665 | |||
| 666 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_INSTALL); | ||
| 667 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
| 668 | |||
| 669 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_INSTALL, pPlan->action); | ||
| 670 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
| 671 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
| 672 | |||
| 673 | BOOL fRollback = FALSE; | ||
| 674 | DWORD dwIndex = 0; | ||
| 675 | DWORD dwPackageStart = 0; | ||
| 676 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 1); | ||
| 677 | dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PatchA", 4, 1, 20480, FALSE); | ||
| 678 | ValidateCacheAcquirePayload(pPlan, fRollback, dwIndex++, L"PatchA", L"PatchA", FALSE); | ||
| 679 | ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PatchA", L"PatchA", TRUE, FALSE, dwPackageStart); | ||
| 680 | ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PatchA", FALSE); | ||
| 681 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE); | ||
| 682 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 2); | ||
| 683 | dwPackageStart = ValidateCachePackageStart(pPlan, fRollback, dwIndex++, L"PackageA", 10, 1, 32768, FALSE); | ||
| 684 | ValidateCacheAcquirePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", FALSE); | ||
| 685 | ValidateCacheCachePayload(pPlan, fRollback, dwIndex++, L"PackageA", L"PackageA", TRUE, FALSE, dwPackageStart); | ||
| 686 | ValidateCachePackageStop(pPlan, fRollback, dwIndex++, L"PackageA", FALSE); | ||
| 687 | ValidateCacheSignalSyncpoint(pPlan, fRollback, dwIndex++, FALSE); | ||
| 688 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
| 689 | |||
| 690 | fRollback = TRUE; | ||
| 691 | dwIndex = 0; | ||
| 692 | ValidateCacheCheckpoint(pPlan, fRollback, dwIndex++, 2); | ||
| 693 | ValidateCacheRollbackPackage(pPlan, fRollback, dwIndex++, L"PackageA", FALSE); | ||
| 694 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
| 695 | |||
| 696 | Assert::Equal(3055111ull, pPlan->qwEstimatedSize); | ||
| 697 | Assert::Equal(53248ull, pPlan->qwCacheSizeTotal); | ||
| 698 | |||
| 699 | fRollback = FALSE; | ||
| 700 | dwIndex = 0; | ||
| 701 | DWORD dwExecuteCheckpointId = 3; | ||
| 702 | BURN_EXECUTE_ACTION* pExecuteAction = NULL; | ||
| 703 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 704 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[11].syncpoint.hEvent); | ||
| 705 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 706 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 707 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 708 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 709 | ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); | ||
| 710 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 711 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 712 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 713 | ValidateExecuteWaitSyncpoint(pPlan, fRollback, dwIndex++, pPlan->rgCacheActions[5].syncpoint.hEvent); | ||
| 714 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 715 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 716 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 717 | pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); | ||
| 718 | ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); | ||
| 719 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 720 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 721 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 722 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 723 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
| 724 | |||
| 725 | fRollback = TRUE; | ||
| 726 | dwIndex = 0; | ||
| 727 | dwExecuteCheckpointId = 3; | ||
| 728 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 729 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PackageA"); | ||
| 730 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 731 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 732 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 733 | ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); | ||
| 734 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 735 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 736 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 737 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 738 | ValidateExecuteUncachePackage(pPlan, fRollback, dwIndex++, L"PatchA"); | ||
| 739 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 740 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 741 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 742 | pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); | ||
| 743 | ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); | ||
| 744 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 745 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 746 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 747 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 748 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
| 749 | |||
| 750 | Assert::Equal(2ul, pPlan->cExecutePackagesTotal); | ||
| 751 | Assert::Equal(4ul, pPlan->cOverallProgressTicksTotal); | ||
| 752 | |||
| 753 | dwIndex = 0; | ||
| 754 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
| 755 | |||
| 756 | UINT uIndex = 0; | ||
| 757 | ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL); | ||
| 758 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
| 759 | |||
| 760 | Assert::Equal(3ul, pEngineState->packages.cPackages); | ||
| 761 | ValidatePermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"NetFx48Web"); | ||
| 762 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_PRESENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT); | ||
| 763 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[2], L"PatchA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_PRESENT); | ||
| 764 | } | ||
| 765 | |||
| 766 | [Fact] | ||
| 767 | void SlipstreamUninstallTest() | ||
| 768 | { | ||
| 769 | HRESULT hr = S_OK; | ||
| 770 | BURN_ENGINE_STATE engineState = { }; | ||
| 771 | BURN_ENGINE_STATE* pEngineState = &engineState; | ||
| 772 | BURN_PLAN* pPlan = &engineState.plan; | ||
| 773 | |||
| 774 | InitializeEngineStateForCorePlan(wzSlipstreamManifestFileName, pEngineState); | ||
| 775 | DetectPackagesAsPresentAndCached(pEngineState); | ||
| 776 | |||
| 777 | hr = CorePlan(pEngineState, BOOTSTRAPPER_ACTION_UNINSTALL); | ||
| 778 | NativeAssert::Succeeded(hr, "CorePlan failed"); | ||
| 779 | |||
| 780 | Assert::Equal<DWORD>(BOOTSTRAPPER_ACTION_UNINSTALL, pPlan->action); | ||
| 781 | Assert::Equal<BOOL>(TRUE, pPlan->fPerMachine); | ||
| 782 | Assert::Equal<BOOL>(FALSE, pPlan->fDisableRollback); | ||
| 783 | |||
| 784 | BOOL fRollback = FALSE; | ||
| 785 | DWORD dwIndex = 0; | ||
| 786 | Assert::Equal(dwIndex, pPlan->cCacheActions); | ||
| 787 | |||
| 788 | fRollback = TRUE; | ||
| 789 | dwIndex = 0; | ||
| 790 | Assert::Equal(dwIndex, pPlan->cRollbackCacheActions); | ||
| 791 | |||
| 792 | Assert::Equal(0ull, pPlan->qwEstimatedSize); | ||
| 793 | Assert::Equal(0ull, pPlan->qwCacheSizeTotal); | ||
| 794 | |||
| 795 | fRollback = FALSE; | ||
| 796 | dwIndex = 0; | ||
| 797 | DWORD dwExecuteCheckpointId = 1; | ||
| 798 | BURN_EXECUTE_ACTION* pExecuteAction = NULL; | ||
| 799 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 800 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 801 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 802 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 803 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 804 | pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); | ||
| 805 | ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); | ||
| 806 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 807 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 808 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 809 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 810 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_UNREGISTER); | ||
| 811 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 812 | ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_UNINSTALL, BURN_MSI_PROPERTY_UNINSTALL, INSTALLUILEVEL_NONE, FALSE, 0); | ||
| 813 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 814 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 815 | Assert::Equal(dwIndex, pPlan->cExecuteActions); | ||
| 816 | |||
| 817 | fRollback = TRUE; | ||
| 818 | dwIndex = 0; | ||
| 819 | dwExecuteCheckpointId = 1; | ||
| 820 | ValidateExecuteRollbackBoundary(pPlan, fRollback, dwIndex++, L"WixDefaultBoundary", TRUE, FALSE); | ||
| 821 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PatchA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 822 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 823 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PatchA", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 824 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 825 | pExecuteAction = ValidateDeletedExecuteMspTarget(pPlan, fRollback, dwIndex++, L"PatchA", BOOTSTRAPPER_ACTION_STATE_INSTALL, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", TRUE, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, TRUE); | ||
| 826 | ValidateExecuteMspTargetPatch(pExecuteAction, 0, L"PatchA"); | ||
| 827 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 828 | ValidateExecutePackageDependency(pPlan, fRollback, dwIndex++, L"PackageA", L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 829 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 830 | ValidateExecutePackageProvider(pPlan, fRollback, dwIndex++, L"PackageA", BURN_DEPENDENCY_ACTION_REGISTER); | ||
| 831 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 832 | ValidateExecuteMsiPackage(pPlan, fRollback, dwIndex++, L"PackageA", BOOTSTRAPPER_ACTION_STATE_INSTALL, BURN_MSI_PROPERTY_INSTALL, INSTALLUILEVEL_NONE, FALSE, 0); | ||
| 833 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 834 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 835 | ValidateExecuteCheckpoint(pPlan, fRollback, dwIndex++, dwExecuteCheckpointId++); | ||
| 836 | Assert::Equal(dwIndex, pPlan->cRollbackActions); | ||
| 837 | |||
| 838 | Assert::Equal(2ul, pPlan->cExecutePackagesTotal); | ||
| 839 | Assert::Equal(2ul, pPlan->cOverallProgressTicksTotal); | ||
| 840 | |||
| 841 | dwIndex = 0; | ||
| 842 | ValidateCleanAction(pPlan, dwIndex++, L"PatchA"); | ||
| 843 | ValidateCleanAction(pPlan, dwIndex++, L"PackageA"); | ||
| 844 | Assert::Equal(dwIndex, pPlan->cCleanActions); | ||
| 845 | |||
| 846 | UINT uIndex = 0; | ||
| 847 | ValidatePlannedProvider(pPlan, uIndex++, L"{22D1DDBA-284D-40A7-BD14-95EA07906F21}", NULL); | ||
| 848 | ValidatePlannedProvider(pPlan, uIndex++, L"{0A5113E3-06A5-4CE0-8E83-9EB42F6764A6}", NULL); | ||
| 849 | ValidatePlannedProvider(pPlan, uIndex++, L"{5FF7F534-3FFC-41E0-80CD-E6361E5E7B7B}", NULL); | ||
| 850 | Assert::Equal(uIndex, pPlan->cPlannedProviders); | ||
| 851 | |||
| 852 | Assert::Equal(3ul, pEngineState->packages.cPackages); | ||
| 853 | ValidatePermanentPackageExpectedStates(&pEngineState->packages.rgPackages[0], L"NetFx48Web"); | ||
| 854 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[1], L"PackageA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT); | ||
| 855 | ValidateNonPermanentPackageExpectedStates(&pEngineState->packages.rgPackages[2], L"PatchA", BURN_PACKAGE_REGISTRATION_STATE_ABSENT, BURN_PACKAGE_REGISTRATION_STATE_ABSENT); | ||
| 856 | } | ||
| 857 | |||
| 653 | private: | 858 | private: |
| 654 | // This doesn't initialize everything, just enough for CorePlan to work. | 859 | // This doesn't initialize everything, just enough for CorePlan to work. |
| 655 | void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState) | 860 | void InitializeEngineStateForCorePlan(LPCWSTR wzManifestFileName, BURN_ENGINE_STATE* pEngineState) |
| @@ -700,6 +905,30 @@ namespace Bootstrapper | |||
| 700 | pEngineState->fDetected = TRUE; | 905 | pEngineState->fDetected = TRUE; |
| 701 | } | 906 | } |
| 702 | 907 | ||
| 908 | void PlanTestDetectPatchInitialize(BURN_ENGINE_STATE* pEngineState) | ||
| 909 | { | ||
| 910 | HRESULT hr = MsiEngineDetectInitialize(&pEngineState->packages); | ||
| 911 | NativeAssert::Succeeded(hr, "MsiEngineDetectInitialize failed"); | ||
| 912 | |||
| 913 | for (DWORD i = 0; i < pEngineState->packages.cPackages; ++i) | ||
| 914 | { | ||
| 915 | BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; | ||
| 916 | |||
| 917 | if (BURN_PACKAGE_TYPE_MSP == pPackage->type) | ||
| 918 | { | ||
| 919 | for (DWORD j = 0; j < pPackage->Msp.cTargetProductCodes; ++j) | ||
| 920 | { | ||
| 921 | BURN_MSPTARGETPRODUCT* pTargetProduct = pPackage->Msp.rgTargetProducts + j; | ||
| 922 | |||
| 923 | if (BOOTSTRAPPER_PACKAGE_STATE_UNKNOWN == pTargetProduct->patchPackageState) | ||
| 924 | { | ||
| 925 | pTargetProduct->patchPackageState = BOOTSTRAPPER_PACKAGE_STATE_ABSENT; | ||
| 926 | } | ||
| 927 | } | ||
| 928 | } | ||
| 929 | } | ||
| 930 | } | ||
| 931 | |||
| 703 | void DetectAttachedContainerAsAttached(BURN_ENGINE_STATE* pEngineState) | 932 | void DetectAttachedContainerAsAttached(BURN_ENGINE_STATE* pEngineState) |
| 704 | { | 933 | { |
| 705 | for (DWORD i = 0; i < pEngineState->containers.cContainers; ++i) | 934 | for (DWORD i = 0; i < pEngineState->containers.cContainers; ++i) |
| @@ -773,6 +1002,21 @@ namespace Bootstrapper | |||
| 773 | BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; | 1002 | BURN_PACKAGE* pPackage = pEngineState->packages.rgPackages + i; |
| 774 | DetectPackageAsPresentAndCached(pPackage); | 1003 | DetectPackageAsPresentAndCached(pPackage); |
| 775 | DetectPackageDependent(pPackage, pEngineState->registration.sczId); | 1004 | DetectPackageDependent(pPackage, pEngineState->registration.sczId); |
| 1005 | |||
| 1006 | if (BURN_PACKAGE_TYPE_MSI == pPackage->type) | ||
| 1007 | { | ||
| 1008 | for (DWORD j = 0; j < pPackage->Msi.cSlipstreamMspPackages; ++j) | ||
| 1009 | { | ||
| 1010 | pPackage->currentState = BOOTSTRAPPER_PACKAGE_STATE_SUPERSEDED; | ||
| 1011 | |||
| 1012 | BURN_PACKAGE* pMspPackage = pPackage->Msi.rgSlipstreamMsps[j].pMspPackage; | ||
| 1013 | MspEngineAddDetectedTargetProduct(&pEngineState->packages, pMspPackage, j, pPackage->Msi.sczProductCode, pPackage->fPerMachine ? MSIINSTALLCONTEXT_MACHINE : MSIINSTALLCONTEXT_USERUNMANAGED); | ||
| 1014 | |||
| 1015 | BURN_MSPTARGETPRODUCT* pTargetProduct = pMspPackage->Msp.rgTargetProducts + (pMspPackage->Msp.cTargetProductCodes - 1); | ||
| 1016 | pTargetProduct->patchPackageState = BOOTSTRAPPER_PACKAGE_STATE_PRESENT; | ||
| 1017 | pTargetProduct->registrationState = BURN_PACKAGE_REGISTRATION_STATE_PRESENT; | ||
| 1018 | } | ||
| 1019 | } | ||
| 776 | } | 1020 | } |
| 777 | } | 1021 | } |
| 778 | 1022 | ||
| @@ -862,7 +1106,23 @@ namespace Bootstrapper | |||
| 862 | { | 1106 | { |
| 863 | BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex); | 1107 | BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex); |
| 864 | Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_ACQUIRE_CONTAINER, pAction->type); | 1108 | Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_ACQUIRE_CONTAINER, pAction->type); |
| 865 | NativeAssert::StringEqual(wzContainerId, pAction->extractContainer.pContainer->sczId); | 1109 | NativeAssert::StringEqual(wzContainerId, pAction->resolveContainer.pContainer->sczId); |
| 1110 | Assert::Equal<BOOL>(fSkipUntilRetried, pAction->fSkipUntilRetried); | ||
| 1111 | } | ||
| 1112 | |||
| 1113 | void ValidateCacheAcquirePayload( | ||
| 1114 | __in BURN_PLAN* pPlan, | ||
| 1115 | __in BOOL fRollback, | ||
| 1116 | __in DWORD dwIndex, | ||
| 1117 | __in LPCWSTR wzPackageId, | ||
| 1118 | __in LPCWSTR wzPayloadId, | ||
| 1119 | __in BOOL fSkipUntilRetried | ||
| 1120 | ) | ||
| 1121 | { | ||
| 1122 | BURN_CACHE_ACTION* pAction = ValidateCacheActionExists(pPlan, fRollback, dwIndex); | ||
| 1123 | Assert::Equal<DWORD>(BURN_CACHE_ACTION_TYPE_ACQUIRE_PAYLOAD, pAction->type); | ||
| 1124 | NativeAssert::StringEqual(wzPackageId, pAction->resolvePayload.pPackage->sczId); | ||
| 1125 | NativeAssert::StringEqual(wzPayloadId, pAction->resolvePayload.pPayload->sczKey); | ||
| 866 | Assert::Equal<BOOL>(fSkipUntilRetried, pAction->fSkipUntilRetried); | 1126 | Assert::Equal<BOOL>(fSkipUntilRetried, pAction->fSkipUntilRetried); |
| 867 | } | 1127 | } |
| 868 | 1128 | ||
| @@ -1063,7 +1323,7 @@ namespace Bootstrapper | |||
| 1063 | __in BURN_PLAN* pPlan, | 1323 | __in BURN_PLAN* pPlan, |
| 1064 | __in BOOL fRollback, | 1324 | __in BOOL fRollback, |
| 1065 | __in DWORD dwIndex, | 1325 | __in DWORD dwIndex, |
| 1066 | __in LPCWSTR wzPackageId, | 1326 | __in_z LPCWSTR wzPackageId, |
| 1067 | __in BOOTSTRAPPER_ACTION_STATE action, | 1327 | __in BOOTSTRAPPER_ACTION_STATE action, |
| 1068 | __in BURN_MSI_PROPERTY actionMsiProperty, | 1328 | __in BURN_MSI_PROPERTY actionMsiProperty, |
| 1069 | __in DWORD uiLevel, | 1329 | __in DWORD uiLevel, |
| @@ -1083,6 +1343,45 @@ namespace Bootstrapper | |||
| 1083 | Assert::Equal<BOOL>(FALSE, pAction->fDeleted); | 1343 | Assert::Equal<BOOL>(FALSE, pAction->fDeleted); |
| 1084 | } | 1344 | } |
| 1085 | 1345 | ||
| 1346 | BURN_EXECUTE_ACTION* ValidateDeletedExecuteMspTarget( | ||
| 1347 | __in BURN_PLAN* pPlan, | ||
| 1348 | __in BOOL fRollback, | ||
| 1349 | __in DWORD dwIndex, | ||
| 1350 | __in_z LPCWSTR wzPackageId, | ||
| 1351 | __in BOOTSTRAPPER_ACTION_STATE action, | ||
| 1352 | __in_z LPCWSTR wzTargetProductCode, | ||
| 1353 | __in BOOL fPerMachineTarget, | ||
| 1354 | __in BURN_MSI_PROPERTY actionMsiProperty, | ||
| 1355 | __in DWORD uiLevel, | ||
| 1356 | __in BOOL fDisableExternalUiHandler, | ||
| 1357 | __in BOOL fDeleted | ||
| 1358 | ) | ||
| 1359 | { | ||
| 1360 | BURN_EXECUTE_ACTION* pAction = ValidateExecuteActionExists(pPlan, fRollback, dwIndex); | ||
| 1361 | Assert::Equal<DWORD>(BURN_EXECUTE_ACTION_TYPE_MSP_TARGET, pAction->type); | ||
| 1362 | NativeAssert::StringEqual(wzPackageId, pAction->mspTarget.pPackage->sczId); | ||
| 1363 | Assert::Equal<DWORD>(action, pAction->mspTarget.action); | ||
| 1364 | NativeAssert::StringEqual(wzTargetProductCode, pAction->mspTarget.sczTargetProductCode); | ||
| 1365 | Assert::Equal<BOOL>(fPerMachineTarget, pAction->mspTarget.fPerMachineTarget); | ||
| 1366 | Assert::Equal<DWORD>(actionMsiProperty, pAction->mspTarget.actionMsiProperty); | ||
| 1367 | Assert::Equal<DWORD>(uiLevel, pAction->mspTarget.uiLevel); | ||
| 1368 | Assert::Equal<BOOL>(fDisableExternalUiHandler, pAction->mspTarget.fDisableExternalUiHandler); | ||
| 1369 | NativeAssert::NotNull(pAction->mspTarget.sczLogPath); | ||
| 1370 | Assert::Equal<BOOL>(fDeleted, pAction->fDeleted); | ||
| 1371 | return pAction; | ||
| 1372 | } | ||
| 1373 | |||
| 1374 | void ValidateExecuteMspTargetPatch( | ||
| 1375 | __in BURN_EXECUTE_ACTION* pAction, | ||
| 1376 | __in DWORD dwIndex, | ||
| 1377 | __in_z LPCWSTR wzPackageId | ||
| 1378 | ) | ||
| 1379 | { | ||
| 1380 | Assert::InRange(dwIndex + 1ul, 1ul, pAction->mspTarget.cOrderedPatches); | ||
| 1381 | BURN_ORDERED_PATCHES* pOrderedPatch = pAction->mspTarget.rgOrderedPatches + dwIndex; | ||
| 1382 | NativeAssert::StringEqual(wzPackageId, pOrderedPatch->pPackage->sczId); | ||
| 1383 | } | ||
| 1384 | |||
| 1086 | void ValidateExecutePackageDependency( | 1385 | void ValidateExecutePackageDependency( |
| 1087 | __in BURN_PLAN* pPlan, | 1386 | __in BURN_PLAN* pPlan, |
| 1088 | __in BOOL fRollback, | 1387 | __in BOOL fRollback, |
