From af019d2b6d7b67df34355c038290d45366001ea9 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Fri, 21 Jan 2022 16:25:38 -0600 Subject: Add failing dependency E2E tests. --- .../DependencyTests/BundleKv1/BundleKv1.wixproj | 2 +- .../DependencyTests/BundleKv1/BundleKv1.wxs | 2 +- .../DependencyTests/BundleKv2/BundleKv2.wixproj | 2 +- .../DependencyTests/BundleKv2/BundleKv2.wxs | 2 +- .../DependencyTests/BundleM/BundleM.wixproj | 20 +++ .../TestData/DependencyTests/BundleM/BundleM.wxs | 10 ++ .../DependencyTests/BundleNv1/BundleN.props | 10 ++ .../DependencyTests/BundleNv1/BundleNv1.wixproj | 13 ++ .../DependencyTests/BundleNv1/BundleNv1.wxs | 11 ++ .../BundleNv1_0_1/BundleNv1_0_1.wixproj | 17 ++ .../BundleNv1_0_1/BundleNv1_0_1.wxs | 12 ++ .../DependencyTests/BundleNv2/BundleNv2.wixproj | 17 ++ .../DependencyTests/BundleNv2/BundleNv2.wxs | 12 ++ .../DependencyTests/PackageC/PackageC.wixproj | 1 - .../DependencyTests/PackageF/PackageF.wixproj | 9 - .../DependencyTests/PackageFv1/PackageF.props | 10 ++ .../DependencyTests/PackageFv1/PackageFv1.props | 7 + .../DependencyTests/PackageFv1/PackageFv1.wixproj | 4 + .../PackageFv1_0_1/PackageFv1_0_1.wixproj | 7 + .../DependencyTests/PackageFv2/PackageFv2.wixproj | 7 + .../DependencyTests/PackageGv1/PackageG.props | 10 ++ .../DependencyTests/PackageGv1/PackageGv1.props | 7 + .../DependencyTests/PackageGv1/PackageGv1.wixproj | 4 + .../PackageGv1_0_1/PackageGv1_0_1.wixproj | 7 + .../DependencyTests/PackageGv2/PackageGv2.wixproj | 7 + src/test/burn/WixTestTools/BundleVerifier.cs | 17 ++ .../burn/WixToolsetTest.BurnE2E/DependencyTests.cs | 199 ++++++++++++++++++++- 27 files changed, 407 insertions(+), 19 deletions(-) create mode 100644 src/test/burn/TestData/DependencyTests/BundleM/BundleM.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/BundleM/BundleM.wxs create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv1/BundleN.props create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wxs create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wxs create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wxs delete mode 100644 src/test/burn/TestData/DependencyTests/PackageF/PackageF.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageFv1/PackageF.props create mode 100644 src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.props create mode 100644 src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageFv1_0_1/PackageFv1_0_1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageFv2/PackageFv2.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageGv1/PackageG.props create mode 100644 src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.props create mode 100644 src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageGv1_0_1/PackageGv1_0_1.wixproj create mode 100644 src/test/burn/TestData/DependencyTests/PackageGv2/PackageGv2.wixproj (limited to 'src') diff --git a/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wixproj b/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wixproj index f0b03f2d..ff9db038 100644 --- a/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wixproj +++ b/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wixproj @@ -2,7 +2,7 @@ - + diff --git a/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wxs b/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wxs index c4a85814..3f6d28b4 100644 --- a/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wxs +++ b/src/test/burn/TestData/DependencyTests/BundleKv1/BundleKv1.wxs @@ -4,7 +4,7 @@ - + diff --git a/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wixproj b/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wixproj index a00ff3b5..9f55fa9a 100644 --- a/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wixproj +++ b/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wixproj @@ -5,7 +5,7 @@ 2.0.0.0 - + diff --git a/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wxs b/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wxs index c4a85814..3f6d28b4 100644 --- a/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wxs +++ b/src/test/burn/TestData/DependencyTests/BundleKv2/BundleKv2.wxs @@ -4,7 +4,7 @@ - + diff --git a/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wixproj b/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wixproj new file mode 100644 index 00000000..3aee3643 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wixproj @@ -0,0 +1,20 @@ + + + + Bundle + {D106D5F7-CA25-4AC4-8EE9-A9CF8C2C7941} + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wxs b/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wxs new file mode 100644 index 00000000..c34f190e --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleM/BundleM.wxs @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/src/test/burn/TestData/DependencyTests/BundleNv1/BundleN.props b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleN.props new file mode 100644 index 00000000..c3e6f9fb --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleN.props @@ -0,0 +1,10 @@ + + + + Bundle + {8F2B8413-CBA1-4284-BA4F-0005FE35E7B9} + + + + + diff --git a/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wixproj b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wixproj new file mode 100644 index 00000000..3bcd8c0c --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wixproj @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wxs b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wxs new file mode 100644 index 00000000..19fd3bf8 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv1/BundleNv1.wxs @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wixproj b/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wixproj new file mode 100644 index 00000000..68a0d0d3 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wixproj @@ -0,0 +1,17 @@ + + + + + 1.0.1.0 + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wxs b/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wxs new file mode 100644 index 00000000..b913272f --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv1_0_1/BundleNv1_0_1.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wixproj b/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wixproj new file mode 100644 index 00000000..a66c39f8 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wixproj @@ -0,0 +1,17 @@ + + + + + 2.0.0.0 + + + + + + + + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wxs b/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wxs new file mode 100644 index 00000000..5727ca06 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/BundleNv2/BundleNv2.wxs @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/src/test/burn/TestData/DependencyTests/PackageC/PackageC.wixproj b/src/test/burn/TestData/DependencyTests/PackageC/PackageC.wixproj index 4eb2d00b..fde6aa67 100644 --- a/src/test/burn/TestData/DependencyTests/PackageC/PackageC.wixproj +++ b/src/test/burn/TestData/DependencyTests/PackageC/PackageC.wixproj @@ -7,7 +7,6 @@ - \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageF/PackageF.wixproj b/src/test/burn/TestData/DependencyTests/PackageF/PackageF.wixproj deleted file mode 100644 index 25b610ac..00000000 --- a/src/test/burn/TestData/DependencyTests/PackageF/PackageF.wixproj +++ /dev/null @@ -1,9 +0,0 @@ - - - - {069AECC6-84DC-4FA4-B506-CD3A9A76F2F4} - - - - - \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageFv1/PackageF.props b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageF.props new file mode 100644 index 00000000..4ad7b3ce --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageF.props @@ -0,0 +1,10 @@ + + + + PackageF + {069AECC6-84DC-4FA4-B506-CD3A9A76F2F4} + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.props b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.props new file mode 100644 index 00000000..e273a60e --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.props @@ -0,0 +1,7 @@ + + + + + {9FD1A4DA-B62B-48F2-851F-7CE01AC10009} + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.wixproj b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.wixproj new file mode 100644 index 00000000..9a472476 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageFv1/PackageFv1.wixproj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageFv1_0_1/PackageFv1_0_1.wixproj b/src/test/burn/TestData/DependencyTests/PackageFv1_0_1/PackageFv1_0_1.wixproj new file mode 100644 index 00000000..a92682bf --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageFv1_0_1/PackageFv1_0_1.wixproj @@ -0,0 +1,7 @@ + + + + + 1.0.1.0 + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageFv2/PackageFv2.wixproj b/src/test/burn/TestData/DependencyTests/PackageFv2/PackageFv2.wixproj new file mode 100644 index 00000000..f9ca3be0 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageFv2/PackageFv2.wixproj @@ -0,0 +1,7 @@ + + + + + 2.0.0.0 + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageGv1/PackageG.props b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageG.props new file mode 100644 index 00000000..79b18136 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageG.props @@ -0,0 +1,10 @@ + + + + PackageG + {CFBC162E-8D89-40A7-8E07-7B46E3B27C26} + + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.props b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.props new file mode 100644 index 00000000..83b5992d --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.props @@ -0,0 +1,7 @@ + + + + + {56169850-B98A-4D9B-AF5D-8974B6807FE9} + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.wixproj b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.wixproj new file mode 100644 index 00000000..7d5e9fab --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageGv1/PackageGv1.wixproj @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageGv1_0_1/PackageGv1_0_1.wixproj b/src/test/burn/TestData/DependencyTests/PackageGv1_0_1/PackageGv1_0_1.wixproj new file mode 100644 index 00000000..3af8e1d0 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageGv1_0_1/PackageGv1_0_1.wixproj @@ -0,0 +1,7 @@ + + + + + 1.0.1.0 + + \ No newline at end of file diff --git a/src/test/burn/TestData/DependencyTests/PackageGv2/PackageGv2.wixproj b/src/test/burn/TestData/DependencyTests/PackageGv2/PackageGv2.wixproj new file mode 100644 index 00000000..6ffe6e55 --- /dev/null +++ b/src/test/burn/TestData/DependencyTests/PackageGv2/PackageGv2.wixproj @@ -0,0 +1,7 @@ + + + + + 2.0.0.0 + + \ No newline at end of file diff --git a/src/test/burn/WixTestTools/BundleVerifier.cs b/src/test/burn/WixTestTools/BundleVerifier.cs index db14c228..e0edb081 100644 --- a/src/test/burn/WixTestTools/BundleVerifier.cs +++ b/src/test/burn/WixTestTools/BundleVerifier.cs @@ -14,6 +14,7 @@ namespace WixTestTools public partial class BundleInstaller { + public const string DependencyRegistryRoot = "Software\\Classes\\Installer\\Dependencies"; public const string FULL_BURN_POLICY_REGISTRY_PATH = "SOFTWARE\\WOW6432Node\\Policies\\WiX\\Burn"; public const string PACKAGE_CACHE_FOLDER_NAME = "Package Cache"; @@ -134,6 +135,22 @@ namespace WixTestTools Assert.Equal(cached, Directory.Exists(cachePath)); } + public void VerifyPackageProviderRemoved(string packageId) + { + using var wixOutput = WixOutput.Read(this.BundlePdb); + var intermediate = Intermediate.Load(wixOutput); + var section = intermediate.Sections.Single(); + var packageSymbol = section.Symbols.OfType().Single(p => p.Id.Id == packageId); + var providerSymbol = section.Symbols.OfType().Single(p => p.ParentRef == packageId); + var registryRoot = packageSymbol.PerMachine == YesNoDefaultType.Yes ? Registry.LocalMachine : Registry.CurrentUser; + var subkeyPath = Path.Combine(DependencyRegistryRoot, providerSymbol.ProviderKey); + using var registryKey = registryRoot.OpenSubKey(subkeyPath); + if (registryKey != null) + { + WixAssert.StringEqual(null, subkeyPath); + } + } + public void VerifyExeTestRegistryRootDeleted(string name, bool x64 = false) { using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(x64, name); diff --git a/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs index e95e141c..e0b402ff 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/DependencyTests.cs @@ -15,29 +15,29 @@ namespace WixToolsetTest.BurnE2E [Fact] public void CanKeepSameExactPackageAfterUpgradingBundle() { - var packageF = this.CreatePackageInstaller("PackageF"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); var bundleKv1 = this.CreateBundleInstaller("BundleKv1"); var bundleKv2 = this.CreateBundleInstaller("BundleKv2"); - packageF.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); bundleKv1.Install(); bundleKv1.VerifyRegisteredAndInPackageCache(); - packageF.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); bundleKv2.Install(); bundleKv2.VerifyRegisteredAndInPackageCache(); bundleKv1.VerifyUnregisteredAndRemovedFromPackageCache(); - packageF.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); bundleKv2.VerifyPackageIsCached("PackageF"); bundleKv2.Uninstall(); bundleKv2.VerifyUnregisteredAndRemovedFromPackageCache(); - packageF.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); } [Fact (Skip = "https://github.com/wixtoolset/issues/issues/6401")] @@ -539,6 +539,152 @@ namespace WixToolsetTest.BurnE2E } } + [Fact(Skip = "https://github.com/wixtoolset/issues/issues/3421")] + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMajorUpdateMsi() + { + var packageAv1 = this.CreatePackageInstaller("PackageAv1"); + var packageC = this.CreatePackageInstaller("PackageC"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); + var packageFv2 = this.CreatePackageInstaller("PackageFv2"); + var packageGv1 = this.CreatePackageInstaller("PackageGv1"); + var packageGv2 = this.CreatePackageInstaller("PackageGv2"); + var bundleM = this.CreateBundleInstaller("BundleM"); + var bundleNv1 = this.CreateBundleInstaller("BundleNv1"); + var bundleNv2 = this.CreateBundleInstaller("BundleNv2"); + var testBAController = this.CreateTestBAController(); + + packageAv1.VerifyInstalled(false); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleM.Install(); + bundleM.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleNv1.Install(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + // Make PackageC fail. + testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); + + bundleNv2.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + bundleNv2.VerifyUnregisteredAndRemovedFromPackageCache(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + bundleM.Uninstall(); + bundleM.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + bundleNv1.Uninstall(); + bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + } + + [Fact(Skip = "https://github.com/wixtoolset/issues/issues/6510")] + public void DoesntLoseDependenciesOnFailedMajorUpgradeBundleFromMinorUpdateMsi() + { + var packageAv1 = this.CreatePackageInstaller("PackageAv1"); + var packageC = this.CreatePackageInstaller("PackageC"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); + var packageFv101 = this.CreatePackageInstaller("PackageFv1_0_1"); + var packageGv1 = this.CreatePackageInstaller("PackageGv1"); + var packageGv101 = this.CreatePackageInstaller("PackageGv1_0_1"); + var bundleM = this.CreateBundleInstaller("BundleM"); + var bundleNv1 = this.CreateBundleInstaller("BundleNv1"); + var bundleNv101 = this.CreateBundleInstaller("BundleNv1_0_1"); + var testBAController = this.CreateTestBAController(); + + packageAv1.VerifyInstalled(false); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + + bundleM.Install(); + bundleM.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalledWithVersion(true); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + + bundleNv1.Install(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageAv1.VerifyInstalled(true); + packageFv1.VerifyInstalledWithVersion(true); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(true); + packageGv101.VerifyInstalledWithVersion(false); + + // Make PackageC fail. + testBAController.SetPackageCancelExecuteAtProgress("PackageC", 10); + + // Verify https://github.com/wixtoolset/issues/issues/6510 - Dependency provider removed on rollback even though package is not rolled back + bundleNv101.Install((int)MSIExec.MSIExecReturnCode.ERROR_INSTALL_USEREXIT); + bundleNv101.VerifyUnregisteredAndRemovedFromPackageCache(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + // The expected values will change after implementing https://github.com/wixtoolset/issues/issues/6535 and https://github.com/wixtoolset/issues/issues/3421 + packageAv1.VerifyInstalled(true); + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(true); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(true); + + bundleM.Uninstall(); + bundleM.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(true); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(true); + + bundleNv1.Uninstall(); + bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageAv1.VerifyInstalled(false); + packageFv1.VerifyInstalledWithVersion(false); + packageFv101.VerifyInstalledWithVersion(false); + packageGv1.VerifyInstalledWithVersion(false); + packageGv101.VerifyInstalledWithVersion(false); + } + [Fact] public void DoesntRegisterDependencyOnPackageNotSelectedForInstall() { @@ -711,6 +857,49 @@ namespace WixToolsetTest.BurnE2E bundleA.VerifyExeTestRegistryRootDeleted(testRegistryValueExe); } + [Fact(Skip = "https://github.com/wixtoolset/issues/issues/3850")] + public void RemovesDependencyProviderFromUpgradedPackageDuringUninstall() + { + var packageC = this.CreatePackageInstaller("PackageC"); + var packageFv1 = this.CreatePackageInstaller("PackageFv1"); + var packageFv2 = this.CreatePackageInstaller("PackageFv2"); + var packageGv1 = this.CreatePackageInstaller("PackageGv1"); + var packageGv2 = this.CreatePackageInstaller("PackageGv2"); + var bundleNv1 = this.CreateBundleInstaller("BundleNv1"); + var bundleNv2 = this.CreateBundleInstaller("BundleNv2"); + + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(false); + + bundleNv1.Install(); + bundleNv1.VerifyRegisteredAndInPackageCache(); + + packageC.VerifyInstalled(false); + packageFv1.VerifyInstalled(true); + packageFv2.VerifyInstalled(false); + packageGv1.VerifyInstalled(true); + packageGv2.VerifyInstalled(false); + + // Verify https://github.com/wixtoolset/issues/issues/3850 - Dependency provider not removed on uninstall from upgrade + bundleNv2.Install(); + bundleNv2.VerifyRegisteredAndInPackageCache(); + bundleNv1.VerifyUnregisteredAndRemovedFromPackageCache(); + + packageC.VerifyInstalled(true); + packageFv1.VerifyInstalled(false); + packageFv2.VerifyInstalled(true); + packageGv1.VerifyInstalled(false); + packageGv2.VerifyInstalled(true); + + bundleNv1.VerifyPackageIsCached("PackageF", false); + bundleNv1.VerifyPackageIsCached("PackageG", false); + bundleNv1.VerifyPackageProviderRemoved("PackageF"); + bundleNv1.VerifyPackageProviderRemoved("PackageG"); + } + [Fact] public void SkipsCrossScopeDependencyRegistration() { -- cgit v1.2.3-55-g6feb