main
cs 141 lines 5.34 KB
Raw
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 WixTestTools;
9 using Xunit;
10 using Xunit.Abstractions;
11
12 public class PatchTests : BurnE2ETests
13 {
14 public PatchTests(ITestOutputHelper testOutputHelper) : base(testOutputHelper) { }
15
16 [RuntimeFact]
17 public void CanRunDetectMultipleTimesWithPatches()
18 {
19 var testBAController = this.CreateTestBAController();
20 testBAController.SetRedetectCount(1);
21
22 this.CanInstallBundleWithPatchThenRemoveIt();
23 }
24
25 [RuntimeFact]
26 public void CanInstallBundleWithPatchThenRemoveIt()
27 {
28 var originalVersion = "1.0.0.0";
29 var patchedVersion = "1.0.1.0";
30 var testRegistryValue = "PackageA";
31
32 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
33 var bundleA = this.CreateBundleInstaller("BundleA");
34 var bundlePatchA = this.CreateBundleInstaller("BundlePatchA");
35
36 bundleA.Install();
37 bundleA.VerifyRegisteredAndInPackageCache();
38
39 packageAv1.VerifyInstalled(true);
40 packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion);
41
42 bundlePatchA.Install();
43 bundlePatchA.VerifyRegisteredAndInPackageCache();
44
45 packageAv1.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
46
47 bundlePatchA.Uninstall();
48 bundlePatchA.VerifyUnregisteredAndRemovedFromPackageCache();
49
50 packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion);
51
52 bundleA.Uninstall();
53 bundleA.VerifyUnregisteredAndRemovedFromPackageCache();
54
55 packageAv1.VerifyInstalled(false);
56 packageAv1.VerifyTestRegistryRootDeleted();
57 }
58
59 [RuntimeFact]
60 public void CanPatchSwidTag()
61 {
62 var originalVersion = "1.0.0.0";
63 var patchedVersion = "1.0.1.0";
64 var packageTagName = "~PatchTests - PackageA";
65 var bundleTagName = "~PatchTests - BundleA";
66 var bundlePatchTagName = "~PatchTests - BundlePatchA";
67
68 this.CreatePackageInstaller("PackageAv1");
69 var bundleA = this.CreateBundleInstaller("BundleA");
70 var bundlePatchA = this.CreateBundleInstaller("BundlePatchA");
71
72 bundleA.Install();
73 VerifySwidTagVersion(bundleTagName, originalVersion);
74 VerifySwidTagVersion(packageTagName, originalVersion);
75
76 bundlePatchA.Install();
77 VerifySwidTagVersion(bundlePatchTagName, patchedVersion);
78 VerifySwidTagVersion(packageTagName, patchedVersion);
79
80 bundlePatchA.Uninstall();
81 VerifySwidTagVersion(packageTagName, originalVersion);
82
83 bundleA.Uninstall();
84 VerifySwidTagVersion(bundleTagName, null);
85 VerifySwidTagVersion(packageTagName, null);
86 }
87
88 [RuntimeFact]
89 public void CanInstallBundleWithPatchesTargetingSingleProductThenRemoveIt()
90 {
91 var originalVersion = "1.0.0.0";
92 var patchedVersion = "1.0.1.0";
93 var testRegistryValue = "PackageA";
94 var testRegistryValue2 = "PackageA2";
95
96 var packageAv1 = this.CreatePackageInstaller("PackageAv1");
97 var bundlePatchA2 = this.CreateBundleInstaller("BundlePatchA2");
98
99 packageAv1.InstallProduct();
100 packageAv1.VerifyInstalled(true);
101 packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion);
102 packageAv1.VerifyTestRegistryValue(testRegistryValue2, originalVersion);
103
104 bundlePatchA2.Install();
105 bundlePatchA2.VerifyRegisteredAndInPackageCache();
106
107 packageAv1.VerifyTestRegistryValue(testRegistryValue, patchedVersion);
108 packageAv1.VerifyTestRegistryValue(testRegistryValue2, patchedVersion);
109
110 bundlePatchA2.Uninstall();
111 bundlePatchA2.VerifyUnregisteredAndRemovedFromPackageCache();
112
113 packageAv1.VerifyTestRegistryValue(testRegistryValue, originalVersion);
114 packageAv1.VerifyTestRegistryValue(testRegistryValue2, originalVersion);
115 }
116
117 private static void VerifySwidTagVersion(string tagName, string expectedVersion)
118 {
119 var tagPath = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData), "TestingSwidTags", "swidtag", 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/2015/schema.xsd");
129
130 var versionNode = doc.SelectSingleNode("/s:SoftwareIdentity/@version", ns);
131 version = versionNode?.InnerText ?? String.Empty;
132 }
133 else
134 {
135 Assert.True(expectedVersion == null, $"Did not find SWID tag with expected version {expectedVersion} at: {tagPath}");
136 }
137
138 Assert.Equal(expectedVersion, version);
139 }
140 }
141 }