aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolsetTest.BurnE2E
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolsetTest.BurnE2E')
-rw-r--r--src/WixToolsetTest.BurnE2E/BurnE2ETests.cs4
-rw-r--r--src/WixToolsetTest.BurnE2E/PackageInstaller.cs7
-rw-r--r--src/WixToolsetTest.BurnE2E/PackageVerifier.cs33
-rw-r--r--src/WixToolsetTest.BurnE2E/PatchTests.cs137
-rw-r--r--src/WixToolsetTest.BurnE2E/WixTestContext.cs2
-rw-r--r--src/WixToolsetTest.BurnE2E/WixToolsetTest.BurnE2E.csproj2
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
3namespace 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