aboutsummaryrefslogtreecommitdiff
path: root/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2021-04-22 17:19:56 -0700
committerRob Mensching <rob@firegiant.com>2021-04-29 19:53:52 -0700
commit8cf0427984a88b0b3ddfb2061e5be721afffe82e (patch)
tree22e2aaf7665d5ab6d3dc2a8ce8f05d73080d1f20 /src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs
parent8426095723fb8530a321260473ab543151bf8c98 (diff)
downloadwix-8cf0427984a88b0b3ddfb2061e5be721afffe82e.tar.gz
wix-8cf0427984a88b0b3ddfb2061e5be721afffe82e.tar.bz2
wix-8cf0427984a88b0b3ddfb2061e5be721afffe82e.zip
Move Core into wix
Diffstat (limited to 'src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs')
-rw-r--r--src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs385
1 files changed, 0 insertions, 385 deletions
diff --git a/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs b/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs
deleted file mode 100644
index dd381dfe..00000000
--- a/src/test/WixToolsetTest.CoreIntegration/ContainerFixture.cs
+++ /dev/null
@@ -1,385 +0,0 @@
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.CoreIntegration
4{
5 using System;
6 using System.Collections.Generic;
7 using System.IO;
8 using System.Linq;
9 using System.Xml;
10 using WixBuildTools.TestSupport;
11 using WixToolset.Core;
12 using WixToolset.Core.Burn;
13 using WixToolset.Core.TestPackage;
14 using Xunit;
15
16 public class ContainerFixture
17 {
18 [Fact(Skip = "Test demonstrates failure")]
19 public void CanBuildWithCustomAttachedContainer()
20 {
21 var folder = TestData.Get(@"TestData");
22
23 using (var fs = new DisposableFileSystem())
24 {
25 var baseFolder = fs.GetFolder();
26 var intermediateFolder = Path.Combine(baseFolder, "obj");
27 var binFolder = Path.Combine(baseFolder, "bin");
28 var bundlePath = Path.Combine(binFolder, "test.exe");
29 var baFolderPath = Path.Combine(baseFolder, "ba");
30 var extractFolderPath = Path.Combine(baseFolder, "extract");
31
32 this.BuildMsis(folder, intermediateFolder, binFolder, buildToSubfolder: true);
33
34 var result = WixRunner.Execute(new[]
35 {
36 "build",
37 Path.Combine(folder, "Container", "HarvestIntoAttachedContainer.wxs"),
38 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
39 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
40 "-bindpath", binFolder,
41 "-intermediateFolder", intermediateFolder,
42 "-o", bundlePath
43 });
44
45 result.AssertSuccess();
46
47 Assert.True(File.Exists(bundlePath));
48
49 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
50 extractResult.AssertSuccess();
51
52 var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload");
53 Assert.Equal(4, payloads.Count);
54 var ignoreAttributes = new Dictionary<string, List<string>> { { "Payload", new List<string> { "FileSize", "Hash" } } };
55 Assert.Equal(@"<Payload Id='FirstX64' FilePath='FirstX64\FirstX64.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX64/FirstX64/FirstX64.msi' Packaging='embedded' SourcePath='a0' Container='BundlePackages' />", payloads[0].GetTestXml(ignoreAttributes));
56 Assert.Equal(@"<Payload Id='FirstX86.msi' FilePath='FirstX86\FirstX86.msi' FileSize='*' Hash='*' DownloadUrl='http://example.com//FirstX86.msi/FirstX86/FirstX86.msi' Packaging='embedded' SourcePath='a1' Container='BundlePackages' />", payloads[1].GetTestXml(ignoreAttributes));
57 Assert.Equal(@"<Payload Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' FilePath='FirstX86\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX86/fk1m38Cf9RZ2Bx_ipinRY6BftelU/FirstX86/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a2' Container='BundlePackages' />", payloads[2].GetTestXml(ignoreAttributes));
58 Assert.Equal(@"<Payload Id='ff2L_N_DLQ.nSUi.l8LxG14gd2V4' FilePath='FirstX64\PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' DownloadUrl='http://example.com/FirstX64/ff2L_N_DLQ.nSUi.l8LxG14gd2V4/FirstX64/PFiles/MsiPackage/test.txt' Packaging='embedded' SourcePath='a3' Container='BundlePackages' />", payloads[3].GetTestXml(ignoreAttributes));
59 }
60 }
61
62 [Fact]
63 public void HarvestedPayloadsArePutInCorrectContainer()
64 {
65 var folder = TestData.Get(@"TestData");
66
67 using (var fs = new DisposableFileSystem())
68 {
69 var baseFolder = fs.GetFolder();
70 var intermediateFolder = Path.Combine(baseFolder, "obj");
71 var binFolder = Path.Combine(baseFolder, "bin");
72 var bundlePath = Path.Combine(binFolder, "test.exe");
73 var baFolderPath = Path.Combine(baseFolder, "ba");
74 var extractFolderPath = Path.Combine(baseFolder, "extract");
75
76 this.BuildMsis(folder, intermediateFolder, binFolder);
77
78 var result = WixRunner.Execute(new[]
79 {
80 "build",
81 Path.Combine(folder, "Container", "HarvestIntoDetachedContainer.wxs"),
82 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
83 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
84 "-bindpath", binFolder,
85 "-intermediateFolder", intermediateFolder,
86 "-o", bundlePath
87 });
88
89 result.AssertSuccess();
90
91 Assert.True(File.Exists(bundlePath));
92
93 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
94 extractResult.AssertSuccess();
95
96 var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload");
97 Assert.Equal(4, payloads.Count);
98 var ignoreAttributes = new Dictionary<string, List<string>> { { "Payload", new List<string> { "FileSize", "Hash" } } };
99 Assert.Equal(@"<Payload Id='FirstX86.msi' FilePath='FirstX86.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a0' Container='WixAttachedContainer' />", payloads[0].GetTestXml(ignoreAttributes));
100 Assert.Equal(@"<Payload Id='FirstX64.msi' FilePath='FirstX64.msi' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a1' Container='FirstX64' />", payloads[1].GetTestXml(ignoreAttributes));
101 Assert.Equal(@"<Payload Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' FilePath='PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a2' Container='WixAttachedContainer' />", payloads[2].GetTestXml(ignoreAttributes));
102 Assert.Equal(@"<Payload Id='fC0n41rZK8oW3JK8LzHu6AT3CjdQ' FilePath='PFiles\MsiPackage\test.txt' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a3' Container='FirstX64' />", payloads[3].GetTestXml(ignoreAttributes));
103 }
104 }
105
106 [Fact]
107 public void HarvestedPayloadsArePutInCorrectPackage()
108 {
109 var folder = TestData.Get(@"TestData");
110
111 using (var fs = new DisposableFileSystem())
112 {
113 var baseFolder = fs.GetFolder();
114 var intermediateFolder = Path.Combine(baseFolder, "obj");
115 var binFolder = Path.Combine(baseFolder, "bin");
116 var bundlePath = Path.Combine(binFolder, "test.exe");
117 var baFolderPath = Path.Combine(baseFolder, "ba");
118 var extractFolderPath = Path.Combine(baseFolder, "extract");
119
120 this.BuildMsis(folder, intermediateFolder, binFolder);
121
122 var result = WixRunner.Execute(new[]
123 {
124 "build",
125 Path.Combine(folder, "Container", "HarvestIntoDetachedContainer.wxs"),
126 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
127 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
128 "-bindpath", binFolder,
129 "-intermediateFolder", intermediateFolder,
130 "-o", bundlePath
131 });
132
133 result.AssertSuccess();
134
135 Assert.True(File.Exists(bundlePath));
136
137 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
138 extractResult.AssertSuccess();
139
140 var ignoreAttributes = new Dictionary<string, List<string>>
141 {
142 { "MsiPackage", new List<string> { "CacheId", "InstallSize", "Size", "ProductCode" } },
143 { "Provides", new List<string> { "Key" } },
144 };
145 var msiPackages = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Chain/burn:MsiPackage")
146 .Cast<XmlElement>()
147 .Select(e => e.GetTestXml(ignoreAttributes))
148 .ToArray();
149 WixAssert.CompareLineByLine(new string[]
150 {
151 "<MsiPackage Id='FirstX86.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryForward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX86.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX86.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" +
152 "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" +
153 "<Provides Key='*' Version='1.0.0.0' DisplayName='MsiPackage' />" +
154 "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" +
155 "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" +
156 "<PayloadRef Id='FirstX86.msi' />" +
157 "<PayloadRef Id='fk1m38Cf9RZ2Bx_ipinRY6BftelU' />" +
158 "</MsiPackage>",
159 "<MsiPackage Id='FirstX64.msi' Cache='keep' CacheId='*' InstallSize='*' Size='*' PerMachine='yes' Permanent='no' Vital='yes' RollbackBoundaryBackward='WixDefaultBoundary' LogPathVariable='WixBundleLog_FirstX64.msi' RollbackLogPathVariable='WixBundleRollbackLog_FirstX64.msi' ProductCode='*' Language='1033' Version='1.0.0.0' UpgradeCode='{12E4699F-E774-4D05-8A01-5BDD41BBA127}'>" +
160 "<MsiProperty Id='ARPSYSTEMCOMPONENT' Value='1' />" +
161 "<Provides Key='*' Version='1.0.0.0' DisplayName='MsiPackage' />" +
162 "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MaxVersion='1.0.0.0' MaxInclusive='no' OnlyDetect='no' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" +
163 "<RelatedPackage Id='{12E4699F-E774-4D05-8A01-5BDD41BBA127}' MinVersion='1.0.0.0' MinInclusive='no' OnlyDetect='yes' LangInclusive='no'><Language Id='1033' /></RelatedPackage>" +
164 "<PayloadRef Id='FirstX64.msi' />" +
165 "<PayloadRef Id='fC0n41rZK8oW3JK8LzHu6AT3CjdQ' />" +
166 "</MsiPackage>",
167 }, msiPackages);
168 }
169 }
170
171 [Fact]
172 public void LayoutPayloadIsPutInContainer()
173 {
174 var folder = TestData.Get(@"TestData");
175
176 using (var fs = new DisposableFileSystem())
177 {
178 var baseFolder = fs.GetFolder();
179 var intermediateFolder = Path.Combine(baseFolder, "obj");
180 var binFolder = Path.Combine(baseFolder, "bin");
181 var bundlePath = Path.Combine(binFolder, "test.exe");
182 var baFolderPath = Path.Combine(baseFolder, "ba");
183 var extractFolderPath = Path.Combine(baseFolder, "extract");
184
185 this.BuildMsis(folder, intermediateFolder, binFolder);
186
187 var result = WixRunner.Execute(false, new[]
188 {
189 "build",
190 Path.Combine(folder, "Container", "LayoutPayloadInContainer.wxs"),
191 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
192 "-bindpath", binFolder,
193 "-intermediateFolder", intermediateFolder,
194 "-o", bundlePath
195 });
196
197 WixAssert.CompareLineByLine(new string[]
198 {
199 "The layout-only Payload 'SharedPayload' is being added to Container 'FirstX64'. It will not be extracted during layout.",
200 }, result.Messages.Select(m => m.ToString()).ToArray());
201 result.AssertSuccess();
202
203 Assert.True(File.Exists(bundlePath));
204
205 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
206 extractResult.AssertSuccess();
207
208 var ignoreAttributes = new Dictionary<string, List<string>> { { "Payload", new List<string> { "FileSize", "Hash" } } };
209 var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='SharedPayload']")
210 .Cast<XmlElement>()
211 .Select(e => e.GetTestXml(ignoreAttributes))
212 .ToArray();
213 WixAssert.CompareLineByLine(new string[]
214 {
215 "<Payload Id='SharedPayload' FilePath='LayoutPayloadInContainer.wxs' FileSize='*' Hash='*' LayoutOnly='yes' Packaging='embedded' SourcePath='a1' Container='FirstX64' />",
216 }, payloads);
217 }
218 }
219
220 [Fact]
221 public void MultipleAttachedContainersAreNotCurrentlySupported()
222 {
223 var folder = TestData.Get(@"TestData");
224
225 using (var fs = new DisposableFileSystem())
226 {
227 var baseFolder = fs.GetFolder();
228 var intermediateFolder = Path.Combine(baseFolder, "obj");
229 var binFolder = Path.Combine(baseFolder, "bin");
230 var bundlePath = Path.Combine(binFolder, "test.exe");
231 var baFolderPath = Path.Combine(baseFolder, "ba");
232 var extractFolderPath = Path.Combine(baseFolder, "extract");
233
234 this.BuildMsis(folder, intermediateFolder, binFolder);
235
236 var result = WixRunner.Execute(new[]
237 {
238 "build",
239 Path.Combine(folder, "Container", "MultipleAttachedContainers.wxs"),
240 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
241 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
242 "-bindpath", binFolder,
243 "-intermediateFolder", intermediateFolder,
244 "-o", bundlePath
245 });
246
247 Assert.Equal((int)BurnBackendErrors.Ids.MultipleAttachedContainersUnsupported, result.ExitCode);
248 }
249 }
250
251 [Fact]
252 public void PayloadIsNotPutInMultipleContainers()
253 {
254 var folder = TestData.Get(@"TestData");
255
256 using (var fs = new DisposableFileSystem())
257 {
258 var baseFolder = fs.GetFolder();
259 var intermediateFolder = Path.Combine(baseFolder, "obj");
260 var binFolder = Path.Combine(baseFolder, "bin");
261 var bundlePath = Path.Combine(binFolder, "test.exe");
262 var baFolderPath = Path.Combine(baseFolder, "ba");
263 var extractFolderPath = Path.Combine(baseFolder, "extract");
264
265 this.BuildMsis(folder, intermediateFolder, binFolder);
266
267 var result = WixRunner.Execute(false, new[]
268 {
269 "build",
270 Path.Combine(folder, "Container", "PayloadInMultipleContainers.wxs"),
271 Path.Combine(folder, "BundleWithPackageGroupRef", "Bundle.wxs"),
272 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
273 "-bindpath", binFolder,
274 "-intermediateFolder", intermediateFolder,
275 "-o", bundlePath
276 });
277
278 WixAssert.CompareLineByLine(new string[]
279 {
280 "The Payload 'SharedPayload' can't be added to Container 'FirstX64' because it was already added to Container 'FirstX86'.",
281 }, result.Messages.Select(m => m.ToString()).ToArray());
282 result.AssertSuccess();
283
284 Assert.True(File.Exists(bundlePath));
285
286 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
287 extractResult.AssertSuccess();
288
289 var ignoreAttributes = new Dictionary<string, List<string>> { { "Payload", new List<string> { "FileSize", "Hash" } } };
290 var payloads = extractResult.SelectManifestNodes("/burn:BurnManifest/burn:Payload[@Id='SharedPayload']")
291 .Cast<XmlElement>()
292 .Select(e => e.GetTestXml(ignoreAttributes))
293 .ToArray();
294 WixAssert.CompareLineByLine(new string[]
295 {
296 "<Payload Id='SharedPayload' FilePath='PayloadInMultipleContainers.wxs' FileSize='*' Hash='*' Packaging='embedded' SourcePath='a2' Container='FirstX86' />",
297 }, payloads);
298 }
299 }
300
301 [Fact]
302 public void PopulatesBAManifestWithLayoutOnlyPayloads()
303 {
304 var folder = TestData.Get(@"TestData");
305
306 using (var fs = new DisposableFileSystem())
307 {
308 var baseFolder = fs.GetFolder();
309 var intermediateFolder = Path.Combine(baseFolder, "obj");
310 var binFolder = Path.Combine(baseFolder, "bin");
311 var bundlePath = Path.Combine(binFolder, "test.exe");
312 var baFolderPath = Path.Combine(baseFolder, "ba");
313 var extractFolderPath = Path.Combine(baseFolder, "extract");
314
315 this.BuildMsis(folder, intermediateFolder, binFolder);
316
317 var result = WixRunner.Execute(false, new[]
318 {
319 "build",
320 Path.Combine(folder, "Container", "LayoutPayloadInContainer.wxs"),
321 "-bindpath", Path.Combine(folder, "SimpleBundle", "data"),
322 "-bindpath", binFolder,
323 "-intermediateFolder", intermediateFolder,
324 "-o", bundlePath
325 });
326
327 WixAssert.CompareLineByLine(new string[]
328 {
329 "The layout-only Payload 'SharedPayload' is being added to Container 'FirstX64'. It will not be extracted during layout.",
330 }, result.Messages.Select(m => m.ToString()).ToArray());
331 result.AssertSuccess();
332
333 Assert.True(File.Exists(bundlePath));
334
335 var extractResult = BundleExtractor.ExtractBAContainer(null, bundlePath, baFolderPath, extractFolderPath);
336 extractResult.AssertSuccess();
337
338 var ignoreAttributesByElementName = new Dictionary<string, List<string>>
339 {
340 { "WixPayloadProperties", new List<string> { "Size" } },
341 };
342 var payloads = extractResult.SelectBADataNodes("/ba:BootstrapperApplicationData/ba:WixPayloadProperties")
343 .Cast<XmlElement>()
344 .Select(e => e.GetTestXml(ignoreAttributesByElementName))
345 .ToArray();
346 WixAssert.CompareLineByLine(new string[]
347 {
348 "<WixPayloadProperties Package='FirstX64.msi' Payload='FirstX64.msi' Container='FirstX64' Name='FirstX64.msi' Size='*' />",
349 "<WixPayloadProperties Package='FirstX64.msi' Payload='SharedPayload' Container='FirstX64' Name='LayoutPayloadInContainer.wxs' Size='*' />",
350 "<WixPayloadProperties Package='FirstX64.msi' Payload='fC0n41rZK8oW3JK8LzHu6AT3CjdQ' Container='FirstX64' Name='PFiles\\MsiPackage\\test.txt' Size='*' />",
351 "<WixPayloadProperties Payload='SharedPayload' Container='FirstX64' Name='LayoutPayloadInContainer.wxs' Size='*' />",
352 }, payloads);
353 }
354 }
355
356 private void BuildMsis(string folder, string intermediateFolder, string binFolder, bool buildToSubfolder = false)
357 {
358 var result = WixRunner.Execute(new[]
359 {
360 "build",
361 Path.Combine(folder, "MsiTransaction", "FirstX86.wxs"),
362 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
363 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
364 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
365 "-intermediateFolder", intermediateFolder,
366 "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX86" : ".", "FirstX86.msi"),
367 });
368
369 result.AssertSuccess();
370
371 result = WixRunner.Execute(new[]
372 {
373 "build",
374 Path.Combine(folder, "MsiTransaction", "FirstX64.wxs"),
375 Path.Combine(folder, "ProductWithComponentGroupRef", "MinimalComponentGroup.wxs"),
376 Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
377 "-bindpath", Path.Combine(folder, "SingleFile", "data"),
378 "-intermediateFolder", intermediateFolder,
379 "-o", Path.Combine(binFolder, buildToSubfolder ? "FirstX64" : ".", "FirstX64.msi"),
380 });
381
382 result.AssertSuccess();
383 }
384 }
385}