From 75f4dce4ea53b82f99932573f27ccfc799d0c5c1 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Mon, 4 Apr 2022 17:38:26 -0500 Subject: Add option for BundlePackage to be hidden in ARP like MsiPackage. Requires support for this feature in the nested bundle. Simplest implementation of 4454 --- .../V3BundlePackageBundle.wixproj | 1 + src/test/burn/WixTestTools/BundleRegistration.cs | 3 ++ src/test/burn/WixTestTools/BundleVerifier.cs | 4 +- .../WixToolsetTest.BurnE2E/BundlePackageTests.cs | 50 ++++++++++++++++++++-- 4 files changed, 53 insertions(+), 5 deletions(-) (limited to 'src/test') diff --git a/src/test/burn/TestData/BundlePackageTests/V3BundlePackageBundle/V3BundlePackageBundle.wixproj b/src/test/burn/TestData/BundlePackageTests/V3BundlePackageBundle/V3BundlePackageBundle.wixproj index d57ac072..a7930a09 100644 --- a/src/test/burn/TestData/BundlePackageTests/V3BundlePackageBundle/V3BundlePackageBundle.wixproj +++ b/src/test/burn/TestData/BundlePackageTests/V3BundlePackageBundle/V3BundlePackageBundle.wixproj @@ -5,6 +5,7 @@ TestBA_x64 {B6CAE45D-A7E5-4302-9FCF-4D05632F9FD7} x64 + 8506 diff --git a/src/test/burn/WixTestTools/BundleRegistration.cs b/src/test/burn/WixTestTools/BundleRegistration.cs index 75660838..3541e7ea 100644 --- a/src/test/burn/WixTestTools/BundleRegistration.cs +++ b/src/test/burn/WixTestTools/BundleRegistration.cs @@ -66,6 +66,8 @@ namespace WixTestTools public string Publisher { get; set; } + public int? SystemComponent { get; set; } + public string QuietUninstallString { get; set; } public string QuietUninstallCommand { get; set; } @@ -125,6 +127,7 @@ namespace WixTestTools registration.Installed = idKey.GetValue(REGISTRY_BUNDLE_INSTALLED) as int?; registration.ModifyPath = idKey.GetValue(REGISTRY_BUNDLE_MODIFY_PATH) as string; registration.Publisher = idKey.GetValue(REGISTRY_BUNDLE_PUBLISHER) as string; + registration.SystemComponent = idKey.GetValue(REGISTRY_BUNDLE_SYSTEM_COMPONENT) as int?; registration.UrlInfoAbout = idKey.GetValue(REGISTRY_BUNDLE_URL_INFO_ABOUT) as string; registration.UrlUpdateInfo = idKey.GetValue(REGISTRY_BUNDLE_URL_UPDATE_INFO) as string; diff --git a/src/test/burn/WixTestTools/BundleVerifier.cs b/src/test/burn/WixTestTools/BundleVerifier.cs index e0edb081..a5dbe0ec 100644 --- a/src/test/burn/WixTestTools/BundleVerifier.cs +++ b/src/test/burn/WixTestTools/BundleVerifier.cs @@ -87,10 +87,12 @@ namespace WixTestTools } } - public string VerifyRegisteredAndInPackageCache() + public string VerifyRegisteredAndInPackageCache(int? expectedSystemComponent = null) { Assert.True(this.TryGetRegistration(out var registration)); + Assert.Equal(expectedSystemComponent, registration.SystemComponent); + Assert.NotNull(registration.CachePath); Assert.True(File.Exists(registration.CachePath)); diff --git a/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs b/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs index 1bb0c0b6..bcdea974 100644 --- a/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs +++ b/src/test/burn/WixToolsetTest.BurnE2E/BundlePackageTests.cs @@ -31,8 +31,8 @@ namespace WixToolsetTest.BurnE2E multipleBundlePackagesBundle.Install(); multipleBundlePackagesBundle.VerifyRegisteredAndInPackageCache(); - bundleA.VerifyRegisteredAndInPackageCache(); - bundleB_x64.VerifyRegisteredAndInPackageCache(); + bundleA.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); + bundleB_x64.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); // Source file should be installed Assert.True(File.Exists(packageA32SourceCodeFilePath), $"Should have found PackageA payload installed at: {packageA32SourceCodeFilePath}"); @@ -61,14 +61,15 @@ namespace WixToolsetTest.BurnE2E upgradeBundlePackageBundlev2.Install(); upgradeBundlePackageBundlev2.VerifyRegisteredAndInPackageCache(); - bundleAv2.VerifyRegisteredAndInPackageCache(); + bundleAv2.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); bundleAv1.VerifyUnregisteredAndRemovedFromPackageCache(); } [Fact] public void CanInstallV3BundlePackage() { - var v3BundleName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Package Cache", "{215a70db-ab35-48c7-be51-d66eaac87177}", "CustomV3Theme"); + var v3BundleId = "{215a70db-ab35-48c7-be51-d66eaac87177}"; + var v3BundleName = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "Package Cache", v3BundleId, "CustomV3Theme"); var v3Bundle = new BundleInstaller(this.TestContext, v3BundleName); this.AddBundleInstaller(v3Bundle); var v3BundlePackageBundle = this.CreateBundleInstaller("V3BundlePackageBundle"); @@ -79,6 +80,47 @@ namespace WixToolsetTest.BurnE2E v3BundlePackageBundle.VerifyRegisteredAndInPackageCache(); Assert.True(LogVerifier.MessageInLogFile(logPath, "Applied execute package: v3bundle.exe, result: 0x0, restart: None")); + + Assert.True(BundleRegistration.TryGetPerMachineBundleRegistrationById(v3BundleId, false, out var v3Registration)); + Assert.Null(v3Registration.SystemComponent); + } + + [Fact] + public void CanLeaveBundlePackageVisible() + { + var bundleAv1 = this.CreateBundleInstaller(@"..\UpgradeRelatedBundleTests\BundleAv1"); + var upgradeBundlePackageBundlev1 = this.CreateBundleInstaller("UpgradeBundlePackageBundlev1"); + + bundleAv1.Install(); + bundleAv1.VerifyRegisteredAndInPackageCache(); + + upgradeBundlePackageBundlev1.Install(); + upgradeBundlePackageBundlev1.VerifyRegisteredAndInPackageCache(); + bundleAv1.VerifyRegisteredAndInPackageCache(); + + upgradeBundlePackageBundlev1.Uninstall(); + upgradeBundlePackageBundlev1.VerifyUnregisteredAndRemovedFromPackageCache(); + bundleAv1.VerifyRegisteredAndInPackageCache(); + } + + [Fact] + public void CanReferenceCountBundlePackage() + { + var bundleAv1 = this.CreateBundleInstaller(@"..\UpgradeRelatedBundleTests\BundleAv1"); + var upgradeBundlePackageBundlev1 = this.CreateBundleInstaller("UpgradeBundlePackageBundlev1"); + + upgradeBundlePackageBundlev1.Install(); + upgradeBundlePackageBundlev1.VerifyRegisteredAndInPackageCache(); + bundleAv1.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); + + // Repair bundle so it adds itself as a reference to itself. + bundleAv1.Repair(); + bundleAv1.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); + + upgradeBundlePackageBundlev1.Uninstall(); + upgradeBundlePackageBundlev1.VerifyUnregisteredAndRemovedFromPackageCache(); + + bundleAv1.VerifyRegisteredAndInPackageCache(expectedSystemComponent: 1); } [Fact] -- cgit v1.2.3-55-g6feb