Add failing tests for package description and packages sharing payloads In Core projects, treat warnings as errors.
Add failing tests for package description and packages sharing payloads In Core projects, treat warnings as errors.
Sean Hall committed
Feb 27, 2021 at 16:28 UTC
ed20ef6dc8caa5d585c1a715ff4ba577687bf291
7 files changed
+176
-5
src/Custom.Build.props
new
+6
@@ -0,0 +1,6 @@
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
+<Project>
3
+ <PropertyGroup Condition="'$(Configuration)'=='Release'">
4
+ <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
5
+ </PropertyGroup>
6
+</Project>
src/WixToolset.Core.Burn/Bundles/CreateBootstrapperApplicationManifestCommand.cs
+4
-5
@@ -211,7 +211,9 @@ namespace WixToolset.Core.Burn.Bundles
211
212
private void WritePayloadInfo(XmlTextWriter writer)
213
{
214
- var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>();
214
+ // TODO: check v3 - should this be only include package payloads or include all non-UX container payloads?
215
+ var payloadSymbols = this.Section.Symbols.OfType<WixBundlePayloadSymbol>()
216
+ .Where(p => !String.IsNullOrEmpty(p.PackageRef));
217
218
foreach (var payloadSymbol in payloadSymbols)
219
{
@@ -219,10 +221,7 @@ namespace WixToolset.Core.Burn.Bundles
221
222
writer.WriteAttributeString("Payload", payloadSymbol.Id.Id);
223
222
- if (!String.IsNullOrEmpty(payloadSymbol.PackageRef))
223
- {
224
- writer.WriteAttributeString("Package", payloadSymbol.PackageRef);
225
- }
224
+ writer.WriteAttributeString("Package", payloadSymbol.PackageRef);
225
226
if (!String.IsNullOrEmpty(payloadSymbol.ContainerRef))
227
{
src/WixToolset.Core.WindowsInstaller/Bind/SequenceActionsCommand.cs
+1
@@ -569,6 +569,7 @@ namespace WixToolset.Core.WindowsInstaller.Bind
569
/// </summary>
570
/// <param name="actionSymbol">The action symbol to be sequenced.</param>
571
/// <param name="requiredActionSymbols">Collection of actions which must be included.</param>
572
+ /// <param name="firstReference">A dictionary used for detecting cyclic references among action symbols.</param>
573
private void SequenceActionSymbol(WixActionSymbol actionSymbol, Dictionary<string, WixActionSymbol> requiredActionSymbols, Dictionary<WixActionSymbol, WixActionSymbol> firstReference)
574
{
575
var after = false;
src/test/WixToolsetTest.CoreIntegration/BundleFixture.cs
+6
@@ -3,6 +3,7 @@
3
namespace WixToolsetTest.CoreIntegration
4
{
5
using System;
6
+ using System.Collections.Generic;
7
using System.IO;
8
using System.Linq;
9
using System.Text;
@@ -115,6 +116,11 @@ namespace WixToolsetTest.CoreIntegration
116
Assert.Equal($"<Registration Id='{bundleSymbol.BundleId}' ExecutableName='test.exe' PerMachine='yes' Tag='' Version='1.0.0.0' ProviderKey='{bundleSymbol.BundleId}'>" +
117
"<Arp Register='yes' DisplayName='~TestBundle' DisplayVersion='1.0.0.0' Publisher='Example Corporation' />" +
118
"</Registration>", registrationElement.GetTestXml());
119
+
120
+ var msiPayloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='test.msi']");
121
+ var msiPayload = (XmlNode)Assert.Single(msiPayloads);
122
+ Assert.Equal("<Payload Id='test.msi' FilePath='test.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />",
123
+ msiPayload.GetTestXml(new Dictionary<string, List<string>>() { { "Payload", new List<string> { "FileSize", "Hash" } } }));
124
}
125
126
var manifestResource = new Resource(ResourceType.Manifest, "#1", 1033);
src/test/WixToolsetTest.CoreIntegration/BundleManifestFixture.cs
+129
@@ -51,6 +51,93 @@ namespace WixToolsetTest.CoreIntegration
51
}
52
}
53
54
+ [Fact(Skip = "Test demonstrates failure")]
55
+ public void PopulatesBAManifestWithPackageInformation()
56
+ {
57
+ var folder = TestData.Get(@"TestData");
58
+
59
+ using (var fs = new DisposableFileSystem())
60
+ {
61
+ var baseFolder = fs.GetFolder();
62
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
63
+ var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
64
+ var baFolderPath = Path.Combine(baseFolder, "ba");
65
+ var extractFolderPath = Path.Combine(baseFolder, "extract");
66
+
67
+ var result = WixRunner.Execute(false, new[]
68
+ {
69
+ "build",
70
+ Path.Combine(folder, "CustomPackageDescription", "CustomPackageDescription.wxs"),
71
+ Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
72
+ "-bindpath", Path.Combine(folder, ".Data"),
73
+ "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
74
+ "-intermediateFolder", intermediateFolder,
75
+ "-o", bundlePath
76
+ });
77
+
78
+ result.AssertSuccess();
79
+
80
+ Assert.True(File.Exists(bundlePath));
81
+
82
+ var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
83
+ extractResult.AssertSuccess();
84
+
85
+ var packageElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPackageProperties");
86
+ var ignoreAttributesByElementName = new Dictionary<string, List<string>>
87
+ {
88
+ { "WixPackageProperties", new List<string> { "DownloadSize", "PackageSize", "InstalledSize", "Version" } },
89
+ };
90
+ Assert.Equal(3, packageElements.Count);
91
+ Assert.Equal("<WixPackageProperties Package='burn.exe' Vital='yes' DisplayName='Windows Installer XML Toolset' Description='WiX Toolset Bootstrapper' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_burn.exe' RollbackLogPathVariable='WixBundleRollbackLog_burn.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[0].GetTestXml(ignoreAttributesByElementName));
92
+ Assert.Equal("<WixPackageProperties Package='RemotePayloadExe' Vital='yes' DisplayName='Override RemotePayload display name' Description='Override RemotePayload description' DownloadSize='1' PackageSize='1' InstalledSize='1' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_RemotePayloadExe' RollbackLogPathVariable='WixBundleRollbackLog_RemotePayloadExe' Compressed='no' Version='1.0.0.0' Cache='yes' />", packageElements[1].GetTestXml());
93
+ Assert.Equal("<WixPackageProperties Package='calc.exe' Vital='yes' DisplayName='Override harvested display name' Description='Override harvested description' DownloadSize='*' PackageSize='*' InstalledSize='*' PackageType='Exe' Permanent='yes' LogPathVariable='WixBundleLog_calc.exe' RollbackLogPathVariable='WixBundleRollbackLog_calc.exe' Compressed='yes' Version='*' Cache='yes' />", packageElements[2].GetTestXml(ignoreAttributesByElementName));
94
+ }
95
+ }
96
+
97
+ [Fact(Skip = "Test demonstrates failure")]
98
+ public void PopulatesBAManifestWithPayloadInformation()
99
+ {
100
+ var folder = TestData.Get(@"TestData");
101
+
102
+ using (var fs = new DisposableFileSystem())
103
+ {
104
+ var baseFolder = fs.GetFolder();
105
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
106
+ var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
107
+ var baFolderPath = Path.Combine(baseFolder, "ba");
108
+ var extractFolderPath = Path.Combine(baseFolder, "extract");
109
+
110
+ var result = WixRunner.Execute(false, new[]
111
+ {
112
+ "build",
113
+ Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"),
114
+ Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
115
+ "-bindpath", Path.Combine(folder, ".Data"),
116
+ "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
117
+ "-intermediateFolder", intermediateFolder,
118
+ "-o", bundlePath
119
+ });
120
+
121
+ result.AssertSuccess();
122
+
123
+ Assert.True(File.Exists(bundlePath));
124
+
125
+ var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
126
+ extractResult.AssertSuccess();
127
+
128
+ var payloadElements = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties");
129
+ var ignoreAttributesByElementName = new Dictionary<string, List<string>>
130
+ {
131
+ { "WixPayloadProperties", new List<string> { "Size" } },
132
+ };
133
+ Assert.Equal(4, payloadElements.Count);
134
+ Assert.Equal("<WixPayloadProperties Payload='credwiz.exe' Package='credwiz.exe' Container='WixAttachedContainer' Name='credwiz.exe' Size='*' LayoutOnly='no' />", payloadElements[0].GetTestXml(ignoreAttributesByElementName));
135
+ Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='credwiz.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[1].GetTestXml(ignoreAttributesByElementName));
136
+ Assert.Equal("<WixPayloadProperties Payload='cscript.exe' Package='cscript.exe' Container='WixAttachedContainer' Name='cscript.exe' Size='*' LayoutOnly='no' />", payloadElements[2].GetTestXml(ignoreAttributesByElementName));
137
+ Assert.Equal("<WixPayloadProperties Payload='payue_e5DuhsDGlzJxWYPhqr6S7rkc' Package='cscript.exe' Container='WixAttachedContainer' Name='SharedPayloadsBetweenPackages.wxs' Size='*' LayoutOnly='no' />", payloadElements[3].GetTestXml(ignoreAttributesByElementName));
138
+ }
139
+ }
140
+
141
[Fact]
142
public void PopulatesBEManifestWithBundleExtensionBundleCustomData()
143
{
@@ -191,6 +278,48 @@ namespace WixToolsetTest.CoreIntegration
278
}
279
}
280
281
+ [Fact(Skip = "Test demonstrates failure")]
282
+ public void PopulatesManifestWithExePackages()
283
+ {
284
+ var folder = TestData.Get(@"TestData");
285
+
286
+ using (var fs = new DisposableFileSystem())
287
+ {
288
+ var baseFolder = fs.GetFolder();
289
+ var intermediateFolder = Path.Combine(baseFolder, "obj");
290
+ var bundlePath = Path.Combine(baseFolder, @"bin\test.exe");
291
+ var baFolderPath = Path.Combine(baseFolder, "ba");
292
+ var extractFolderPath = Path.Combine(baseFolder, "extract");
293
+
294
+ var result = WixRunner.Execute(false, new[]
295
+ {
296
+ "build",
297
+ Path.Combine(folder, "SharedPayloadsBetweenPackages", "SharedPayloadsBetweenPackages.wxs"),
298
+ Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
299
+ "-bindpath", Path.Combine(folder, ".Data"),
300
+ "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
301
+ "-intermediateFolder", intermediateFolder,
302
+ "-o", bundlePath
303
+ });
304
+
305
+ result.AssertSuccess();
306
+
307
+ Assert.True(File.Exists(bundlePath));
308
+
309
+ var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
310
+ extractResult.AssertSuccess();
311
+
312
+ var exePackageElements = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:ExePackage");
313
+ var ignoreAttributesByElementName = new Dictionary<string, List<string>>
314
+ {
315
+ { "ExePackage", new List<string> { "CacheId", "InstallSize", "Size" } },
316
+ };
317
+ Assert.Equal(2, exePackageElements.Count);
318
+ Assert.Equal("<ExePackage Id='credwiz.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_credwiz.exe' RollbackLogPathVariable='WixBundleRollbackLog_credwiz.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='credwiz.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[0].GetTestXml(ignoreAttributesByElementName));
319
+ Assert.Equal("<ExePackage Id='cscript.exe' Cache='yes' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='yes' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_cscript.exe' RollbackLogPathVariable='WixBundleRollbackLog_cscript.exe' DetectCondition='' InstallArguments='' UninstallArguments='' RepairArguments='' Repairable='no'><PayloadRef Id='cscript.exe' /><PayloadRef Id='payue_e5DuhsDGlzJxWYPhqr6S7rkc' /></ExePackage>", exePackageElements[1].GetTestXml(ignoreAttributesByElementName));
320
+ }
321
+ }
322
+
323
[Fact]
324
public void PopulatesManifestWithSetVariables()
325
{
src/test/WixToolsetTest.CoreIntegration/TestData/CustomPackageDescription/CustomPackageDescription.wxs
new
+12
@@ -0,0 +1,12 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <PackageGroup Id="BundlePackages">
5
+ <ExePackage SourceFile="burn.exe" Permanent="yes" />
6
+ <ExePackage Id="RemotePayloadExe" Name="fake.exe" Compressed="no" DownloadUrl="example.com" Description="Override RemotePayload description" DisplayName="Override RemotePayload display name" Permanent="yes">
7
+ <RemotePayload Description="RemotePayload description" Hash="a" ProductName="RemotePayload product name" Size="1" Version="1.0.0.0" />
8
+ </ExePackage>
9
+ <ExePackage SourceFile="C:\Windows\system32\calc.exe" Permanent="yes" Description="Override harvested description" DisplayName="Override harvested display name" />
10
+ </PackageGroup>
11
+ </Fragment>
12
+</Wix>
src/test/WixToolsetTest.CoreIntegration/TestData/SharedPayloadsBetweenPackages/SharedPayloadsBetweenPackages.wxs
new
+18
@@ -0,0 +1,18 @@
1
+<?xml version="1.0" encoding="utf-8"?>
2
+<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3
+ <Fragment>
4
+ <PackageGroup Id="BundlePackages">
5
+ <ExePackage SourceFile="C:\Windows\system32\credwiz.exe" Permanent="yes">
6
+ <PayloadGroupRef Id="SharedPayloads" />
7
+ </ExePackage>
8
+ <ExePackage SourceFile="C:\Windows\system32\cscript.exe" Permanent="yes">
9
+ <PayloadGroupRef Id="SharedPayloads" />
10
+ </ExePackage>
11
+ </PackageGroup>
12
+ </Fragment>
13
+ <Fragment>
14
+ <PayloadGroup Id="SharedPayloads">
15
+ <Payload SourceFile="$(sys.SOURCEFILEPATH)" />
16
+ </PayloadGroup>
17
+ </Fragment>
18
+</Wix>