diff options
Diffstat (limited to 'src/WixToolsetTest.BurnE2E')
-rw-r--r-- | src/WixToolsetTest.BurnE2E/BurnE2ETests.cs | 4 | ||||
-rw-r--r-- | src/WixToolsetTest.BurnE2E/PackageInstaller.cs | 7 | ||||
-rw-r--r-- | src/WixToolsetTest.BurnE2E/PackageVerifier.cs | 33 | ||||
-rw-r--r-- | src/WixToolsetTest.BurnE2E/PatchTests.cs | 137 | ||||
-rw-r--r-- | src/WixToolsetTest.BurnE2E/WixTestContext.cs | 2 | ||||
-rw-r--r-- | src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj | 2 |
6 files changed, 174 insertions, 11 deletions
diff --git a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs index 8d1cca23..f3b3e583 100644 --- a/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs +++ b/src/WixToolsetTest.BurnE2E/BurnE2ETests.cs | |||
@@ -21,9 +21,9 @@ namespace WixToolsetTest.BurnE2E | |||
21 | return installer; | 21 | return installer; |
22 | } | 22 | } |
23 | 23 | ||
24 | protected PackageInstaller CreatePackageInstaller(string name) | 24 | protected PackageInstaller CreatePackageInstaller(string filename) |
25 | { | 25 | { |
26 | var installer = new PackageInstaller(this.TestContext, name); | 26 | var installer = new PackageInstaller(this.TestContext, filename); |
27 | this.Installers.Enqueue(installer); | 27 | this.Installers.Enqueue(installer); |
28 | return installer; | 28 | return installer; |
29 | } | 29 | } |
diff --git a/src/WixToolsetTest.BurnE2E/PackageInstaller.cs b/src/WixToolsetTest.BurnE2E/PackageInstaller.cs index 95d6cd90..bd1e30cc 100644 --- a/src/WixToolsetTest.BurnE2E/PackageInstaller.cs +++ b/src/WixToolsetTest.BurnE2E/PackageInstaller.cs | |||
@@ -8,11 +8,10 @@ namespace WixToolsetTest.BurnE2E | |||
8 | 8 | ||
9 | public partial class PackageInstaller : IDisposable | 9 | public partial class PackageInstaller : IDisposable |
10 | { | 10 | { |
11 | public PackageInstaller(WixTestContext testContext, string name) | 11 | public PackageInstaller(WixTestContext testContext, string filename) |
12 | { | 12 | { |
13 | this.Package = Path.Combine(testContext.TestDataFolder, $"{name}.msi"); | 13 | this.Package = Path.Combine(testContext.TestDataFolder, $"{filename}.msi"); |
14 | this.PackagePdb = Path.Combine(testContext.TestDataFolder, $"{name}.wixpdb"); | 14 | this.PackagePdb = Path.Combine(testContext.TestDataFolder, $"{filename}.wixpdb"); |
15 | this.PackageName = name; | ||
16 | this.TestContext = testContext; | 15 | this.TestContext = testContext; |
17 | } | 16 | } |
18 | 17 | ||
diff --git a/src/WixToolsetTest.BurnE2E/PackageVerifier.cs b/src/WixToolsetTest.BurnE2E/PackageVerifier.cs index 7b4bbfef..7a4fea88 100644 --- a/src/WixToolsetTest.BurnE2E/PackageVerifier.cs +++ b/src/WixToolsetTest.BurnE2E/PackageVerifier.cs | |||
@@ -12,15 +12,13 @@ namespace WixToolsetTest.BurnE2E | |||
12 | 12 | ||
13 | public partial class PackageInstaller | 13 | public partial class PackageInstaller |
14 | { | 14 | { |
15 | private string PackageName { get; } | ||
16 | |||
17 | public string PackagePdb { get; } | 15 | public string PackagePdb { get; } |
18 | 16 | ||
19 | private WindowsInstallerData WiData { get; set; } | 17 | private WindowsInstallerData WiData { get; set; } |
20 | 18 | ||
21 | public string GetInstalledFilePath(string filename) | 19 | public string GetInstalledFilePath(string filename) |
22 | { | 20 | { |
23 | return this.TestContext.GetTestInstallFolder(Path.Combine(this.PackageName, filename)); | 21 | return this.TestContext.GetTestInstallFolder(Path.Combine(this.GetInstallFolderName(), filename)); |
24 | } | 22 | } |
25 | 23 | ||
26 | private WindowsInstallerData GetWindowsInstallerData() | 24 | private WindowsInstallerData GetWindowsInstallerData() |
@@ -34,6 +32,19 @@ namespace WixToolsetTest.BurnE2E | |||
34 | return this.WiData; | 32 | return this.WiData; |
35 | } | 33 | } |
36 | 34 | ||
35 | public string GetInstallFolderName() | ||
36 | { | ||
37 | var wiData = this.GetWindowsInstallerData(); | ||
38 | var row = wiData.Tables["Directory"].Rows.Single(r => r.FieldAsString(0) == "INSTALLFOLDER"); | ||
39 | var value = row.FieldAsString(2); | ||
40 | var longNameIndex = value.IndexOf('|') + 1; | ||
41 | if (longNameIndex > 0) | ||
42 | { | ||
43 | return value.Substring(longNameIndex); | ||
44 | } | ||
45 | return value; | ||
46 | } | ||
47 | |||
37 | public string GetProperty(string name) | 48 | public string GetProperty(string name) |
38 | { | 49 | { |
39 | var wiData = this.GetWindowsInstallerData(); | 50 | var wiData = this.GetWindowsInstallerData(); |
@@ -46,5 +57,21 @@ namespace WixToolsetTest.BurnE2E | |||
46 | var productCode = this.GetProperty("ProductCode"); | 57 | var productCode = this.GetProperty("ProductCode"); |
47 | Assert.Equal(installed, MsiUtilities.IsProductInstalled(productCode)); | 58 | Assert.Equal(installed, MsiUtilities.IsProductInstalled(productCode)); |
48 | } | 59 | } |
60 | |||
61 | public void VerifyTestRegistryRootDeleted() | ||
62 | { | ||
63 | using var testRegistryRoot = this.TestContext.GetTestRegistryRoot(); | ||
64 | Assert.Null(testRegistryRoot); | ||
65 | } | ||
66 | |||
67 | public void VerifyTestRegistryValue(string name, string expectedValue) | ||
68 | { | ||
69 | using (var root = this.TestContext.GetTestRegistryRoot()) | ||
70 | { | ||
71 | Assert.NotNull(root); | ||
72 | var actualValue = root.GetValue(name) as string; | ||
73 | Assert.Equal(expectedValue, actualValue); | ||
74 | } | ||
75 | } | ||
49 | } | 76 | } |
50 | } | 77 | } |
diff --git a/src/WixToolsetTest.BurnE2E/PatchTests.cs b/src/WixToolsetTest.BurnE2E/PatchTests.cs new file mode 100644 index 00000000..19adf8db --- /dev/null +++ b/src/WixToolsetTest.BurnE2E/PatchTests.cs | |||
@@ -0,0 +1,137 @@ | |||
1 | // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. | ||
2 | |||
3 | namespace WixToolsetTest.BurnE2E | ||
4 | { | ||
5 | using System; | ||
6 | using System.IO; | ||
7 | using System.Xml; | ||
8 | using Xunit; | ||
9 | using Xunit.Abstractions; | ||
10 | |||
11 | public class PatchTests : BurnE2ETests | ||
12 | { | ||
13 | public PatchTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { } | ||
14 | |||
15 | [Fact] | ||
16 | public void CanRunDetectMultipleTimesWithPatches() | ||
17 | { | ||
18 | var testBAController = this.CreateTestBAController(); | ||
19 | testBAController.SetRedetectCount(1); | ||
20 | |||
21 | this.CanInstallBundleWithPatchThenRemoveIt(); | ||
22 | } | ||
23 | |||
24 | [Fact] | ||
25 | public void CanInstallBundleWithPatchThenRemoveIt() | ||
26 | { | ||
27 | var originalVersion = "1.0.0.0"; | ||
28 | var patchedVersion = "1.0.1.0"; | ||
29 | var testRegistryValue = "PackageA"; | ||
30 | |||
31 | var packageAv1 = this.CreatePackageInstaller("PackageAv1"); | ||
32 | var bundleA = this.CreateBundleInstaller("BundleA"); | ||
33 | var bundlePatchA = this.CreateBundleInstaller("BundlePatchA"); | ||
34 | |||
35 | bundleA.Install(); | ||
36 | bundleA.VerifyRegisteredAndInPackageCache(); | ||
37 | |||
38 | packageAv1.VerifyInstalled(true); | ||
39 | packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
40 | |||
41 | bundlePatchA.Install(); | ||
42 | bundlePatchA.VerifyRegisteredAndInPackageCache(); | ||
43 | |||
44 | packageAv1.VerifyTestRegistryValue(testRegistryValue, patchedVersion); | ||
45 | |||
46 | bundlePatchA.Uninstall(); | ||
47 | bundlePatchA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
48 | |||
49 | packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
50 | |||
51 | bundleA.Uninstall(); | ||
52 | bundleA.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
53 | |||
54 | packageAv1.VerifyInstalled(false); | ||
55 | packageAv1.VerifyTestRegistryRootDeleted(); | ||
56 | } | ||
57 | |||
58 | [Fact(Skip = "https://github.com/wixtoolset/issues/issues/5949")] | ||
59 | public void CanPatchSwidTag() | ||
60 | { | ||
61 | var originalVersion = "1.0.0.0"; | ||
62 | var patchedVersion = "1.0.1.0"; | ||
63 | var packageTagName = "~PatchTests - PackageA"; | ||
64 | var bundleTagName = "~PatchTests - BundleA"; | ||
65 | var bundlePatchTagName = "~PatchTests - BundlePatchA"; | ||
66 | |||
67 | this.CreatePackageInstaller("PackageAv1"); | ||
68 | var bundleA = this.CreateBundleInstaller("BundleA"); | ||
69 | var bundlePatchA = this.CreateBundleInstaller("BundlePatchA"); | ||
70 | |||
71 | bundleA.Install(); | ||
72 | VerifySwidTagVersion(bundleTagName, originalVersion); | ||
73 | VerifySwidTagVersion(packageTagName, originalVersion); | ||
74 | |||
75 | bundlePatchA.Install(); | ||
76 | VerifySwidTagVersion(bundlePatchTagName, patchedVersion); | ||
77 | VerifySwidTagVersion(packageTagName, patchedVersion); | ||
78 | |||
79 | bundlePatchA.Uninstall(); | ||
80 | VerifySwidTagVersion(packageTagName, originalVersion); | ||
81 | |||
82 | bundleA.Uninstall(); | ||
83 | VerifySwidTagVersion(bundleTagName, null); | ||
84 | VerifySwidTagVersion(packageTagName, null); | ||
85 | } | ||
86 | |||
87 | [Fact] | ||
88 | public void CanInstallBundleWithPatchesTargetingSingleProductThenRemoveIt() | ||
89 | { | ||
90 | var originalVersion = "1.0.0.0"; | ||
91 | var patchedVersion = "1.0.1.0"; | ||
92 | var testRegistryValue = "PackageA"; | ||
93 | var testRegistryValue2 = "PackageA2"; | ||
94 | |||
95 | var packageAv1 = this.CreatePackageInstaller("PackageAv1"); | ||
96 | var bundlePatchA2 = this.CreateBundleInstaller("BundlePatchA2"); | ||
97 | |||
98 | packageAv1.InstallProduct(); | ||
99 | packageAv1.VerifyInstalled(true); | ||
100 | packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
101 | packageAv1.VerifyTestRegistryValue(testRegistryValue2, originalVersion); | ||
102 | |||
103 | bundlePatchA2.Install(); | ||
104 | bundlePatchA2.VerifyRegisteredAndInPackageCache(); | ||
105 | |||
106 | packageAv1.VerifyTestRegistryValue(testRegistryValue, patchedVersion); | ||
107 | packageAv1.VerifyTestRegistryValue(testRegistryValue2, patchedVersion); | ||
108 | |||
109 | bundlePatchA2.Uninstall(); | ||
110 | bundlePatchA2.VerifyUnregisteredAndRemovedFromPackageCache(); | ||
111 | |||
112 | packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion); | ||
113 | packageAv1.VerifyTestRegistryValue(testRegistryValue2, originalVersion); | ||
114 | } | ||
115 | |||
116 | private static void VerifySwidTagVersion(string tagName, string expectedVersion) | ||
117 | { | ||
118 | var regidFolder = Environment.ExpandEnvironmentVariables(@"%ProgramData%\regid.1995-08.com.example"); | ||
119 | var tagPath = Path.Combine(regidFolder, "regid.1995-08.com.example " + tagName + ".swidtag"); | ||
120 | string version = null; | ||
121 | |||
122 | if (File.Exists(tagPath)) | ||
123 | { | ||
124 | var doc = new XmlDocument(); | ||
125 | doc.Load(tagPath); | ||
126 | |||
127 | var ns = new XmlNamespaceManager(doc.NameTable); | ||
128 | ns.AddNamespace("s", "http://standards.iso.org/iso/19770/-2/2009/schema.xsd"); | ||
129 | |||
130 | var versionNode = doc.SelectSingleNode("/s:software_identification_tag/s:product_version/s:name", ns); | ||
131 | version = versionNode?.InnerText ?? String.Empty; | ||
132 | } | ||
133 | |||
134 | Assert.Equal(expectedVersion, version); | ||
135 | } | ||
136 | } | ||
137 | } | ||
diff --git a/src/WixToolsetTest.BurnE2E/WixTestContext.cs b/src/WixToolsetTest.BurnE2E/WixTestContext.cs index 5620c6a7..0ae99a77 100644 --- a/src/WixToolsetTest.BurnE2E/WixTestContext.cs +++ b/src/WixToolsetTest.BurnE2E/WixTestContext.cs | |||
@@ -57,7 +57,7 @@ namespace WixToolsetTest.BurnE2E | |||
57 | /// </remarks> | 57 | /// </remarks> |
58 | public RegistryKey GetTestRegistryRoot(string additionalPath = null) | 58 | public RegistryKey GetTestRegistryRoot(string additionalPath = null) |
59 | { | 59 | { |
60 | var key = String.Format(@"Software\WiX\Tests\{0}\{1}", this.TestName, additionalPath ?? String.Empty); | 60 | var key = String.Format(@"Software\WOW6432Node\WiX\Tests\{0}\{1}", this.TestGroupName, additionalPath ?? String.Empty); |
61 | return Registry.LocalMachine.OpenSubKey(key, true); | 61 | return Registry.LocalMachine.OpenSubKey(key, true); |
62 | } | 62 | } |
63 | 63 | ||
diff --git a/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj b/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj index 86ad4410..3ffc892f 100644 --- a/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj +++ b/src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj | |||
@@ -16,7 +16,7 @@ | |||
16 | <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> | 16 | <PackageReference Include="Microsoft.Win32.Registry" Version="5.0.0" /> |
17 | <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> | 17 | <PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> |
18 | <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.48" /> | 18 | <PackageReference Include="WixBuildTools.TestSupport" Version="4.0.48" /> |
19 | <PackageReference Include="WixToolset.Data" Version="4.0.180" /> | 19 | <PackageReference Include="WixToolset.Data" Version="4.0.181" /> |
20 | <PackageReference Include="WixToolset.Mba.Core" Version="4.0.47" /> | 20 | <PackageReference Include="WixToolset.Mba.Core" Version="4.0.47" /> |
21 | </ItemGroup> | 21 | </ItemGroup> |
22 | 22 | ||