aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-02-10 19:19:46 -0800
committerRob Mensching <rob@firegiant.com>2022-02-10 20:47:53 -0800
commit40492973be6075efbfbd231aed7168194d36cc73 (patch)
treef5f56519c967aacccab4a4bb6124c7aff4044f72 /src
parent5cac3441738744ca79ac6a4256d1f99631dbad8d (diff)
downloadwix-40492973be6075efbfbd231aed7168194d36cc73.tar.gz
wix-40492973be6075efbfbd231aed7168194d36cc73.tar.bz2
wix-40492973be6075efbfbd231aed7168194d36cc73.zip
Put validation tests behind #if due to confirmed MSI inconsistencies
When the validation tests are run repeatedly, they will expose an issue in the Windows Installer where ICE validations will occasionally fail to send all error/warning messages. The inconsistency obviously wreaks havoc on the tests. The tests are still interesting (and complex) enough to keep around for manual testing. So they were placed behind an #if for easy manual inclusion. Note that these are "negative tests" that expose the Windows Installer inconsistency when expected failures are missing. Other validation tests are "positive tests" that look for success and thus will always succeed. Therefore, the positive tests stay active.
Diffstat (limited to 'src')
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/ValidationFixture.cs10
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs78
-rw-r--r--src/wix/test/WixToolsetTest.Sdk/MsbuildValidationFixture.cs99
3 files changed, 109 insertions, 78 deletions
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ValidationFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ValidationFixture.cs
index fd8f6f87..72397547 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/ValidationFixture.cs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/ValidationFixture.cs
@@ -12,6 +12,15 @@ namespace WixToolsetTest.CoreIntegration
12 using WixToolset.Data.WindowsInstaller; 12 using WixToolset.Data.WindowsInstaller;
13 using Xunit; 13 using Xunit;
14 14
15 // When these tests are run repeatedly, they will expose an issue
16 // in the Windows Installer where ICE validations will occasionally
17 // fail to send all error/warning messages. The inconsistency
18 // obviously wreaks havoc on the tests.
19 //
20 // These tests are still interesting (and complex) enough to keep
21 // around for manual testing. Uncomment or define the following
22 // line to do so.
23#if DISABLE_VALIDATION_TESTS_DUE_TO_WINDOWS_INSTALLER_INCONSISTENCIES
15 public class ValidationFixture 24 public class ValidationFixture
16 { 25 {
17 [Fact] 26 [Fact]
@@ -303,4 +312,5 @@ namespace WixToolsetTest.CoreIntegration
303 } 312 }
304 } 313 }
305 } 314 }
315#endif
306} 316}
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
index f0761762..0f7f8a88 100644
--- a/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
+++ b/src/wix/test/WixToolsetTest.Sdk/MsbuildFixture.cs
@@ -6,8 +6,6 @@ namespace WixToolsetTest.Sdk
6 using System.Collections.Generic; 6 using System.Collections.Generic;
7 using System.IO; 7 using System.IO;
8 using System.Linq; 8 using System.Linq;
9 using System.Runtime.CompilerServices;
10 using System.Threading;
11 using WixBuildTools.TestSupport; 9 using WixBuildTools.TestSupport;
12 using Xunit; 10 using Xunit;
13 11
@@ -326,82 +324,6 @@ namespace WixToolsetTest.Sdk
326 [InlineData(BuildSystem.DotNetCoreSdk)] 324 [InlineData(BuildSystem.DotNetCoreSdk)]
327 [InlineData(BuildSystem.MSBuild)] 325 [InlineData(BuildSystem.MSBuild)]
328 [InlineData(BuildSystem.MSBuild64)] 326 [InlineData(BuildSystem.MSBuild64)]
329 public void CannotBuildMsiPackageWithIceIssues(BuildSystem buildSystem)
330 {
331 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage");
332
333 var testLogsFolder = TestData.GetUnitTestLogsFolder();
334 File.Delete(Path.Combine(testLogsFolder, buildSystem + ".binlog"));
335 File.Delete(Path.Combine(testLogsFolder, buildSystem + ".msi"));
336
337 using (var fs = new TestDataFolderFileSystem())
338 {
339 fs.Initialize(sourceFolder);
340 var baseFolder = fs.BaseFolder;
341 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
342
343 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, suppressValidation: false);
344
345 File.Copy(Path.ChangeExtension(projectPath, ".binlog"), Path.Combine(testLogsFolder, buildSystem + ".binlog"));
346 File.Copy(Path.Combine(baseFolder, "obj", "x86", "Release", "en-US", "MsiPackage.msi"), Path.Combine(testLogsFolder, buildSystem + ".msi"));
347
348 var iceIssues = result.Output.Where(line => line.Contains(": error") || line.Contains(": warning"))
349 .Select(line => line.Replace(baseFolder, "<baseFolder>")
350 .Replace("1>", String.Empty) // remove any multi-proc markers
351 .Replace("WIX204", "WIX0204") // normalize error number reporting because MSBuild is not consistent on zero padding
352 .Trim())
353 .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
354 .ToArray();
355 WixAssert.CompareLineByLine(new[]
356 {
357 @"<baseFolder>\Package.wxs(17): error WIX0204: ICE12: CustomAction: CausesICE12Error is of type: 35. Therefore it must come after CostFinalize @ 1000 in Seq Table: InstallExecuteSequence. CA Seq#: 49 [<baseFolder>\MsiPackage.wixproj]",
358 @"<baseFolder>\Package.wxs(17): error WIX0204: ICE12: CustomAction: CausesICE12Error is of type: 35. Therefore it must come after CostFinalize @ 1000 in Seq Table: InstallExecuteSequence. CA Seq#: 49 [<baseFolder>\MsiPackage.wixproj]",
359 @"<baseFolder>\Package.wxs(8): warning WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
360 @"<baseFolder>\Package.wxs(8): warning WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
361 }, iceIssues);
362 }
363 }
364
365 [Theory(Skip = "Flaky")]
366 [InlineData(BuildSystem.DotNetCoreSdk)]
367 [InlineData(BuildSystem.MSBuild)]
368 [InlineData(BuildSystem.MSBuild64)]
369 public void CannotBuildMsiPackageWithIceWarningsAsErrors(BuildSystem buildSystem)
370 {
371 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage");
372
373 using (var fs = new TestDataFolderFileSystem())
374 {
375 fs.Initialize(sourceFolder);
376 var baseFolder = fs.BaseFolder;
377 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
378
379 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
380 {
381 $"-p:TreatWarningsAsErrors=true",
382 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressIces", "ICE12"),
383 }, suppressValidation: false);
384 Assert.Equal(1, result.ExitCode);
385
386 var iceIssues = result.Output.Where(line => (line.Contains(": error") || line.Contains(": warning")))
387 .Select(line => line.Replace(baseFolder, "<baseFolder>")
388 .Replace("1>", String.Empty) // remove any multi-proc markers
389 .Replace("WIX204", "WIX0204") // normalize error number reporting because MSBuild is not consistent on zero padding
390 .Trim())
391 .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
392 .ToArray();
393 WixAssert.CompareLineByLine(new[]
394 {
395 @"<baseFolder>\Package.wxs(8): error WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
396 @"<baseFolder>\Package.wxs(8): error WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
397 }, iceIssues);
398 }
399 }
400
401 [Theory]
402 [InlineData(BuildSystem.DotNetCoreSdk)]
403 [InlineData(BuildSystem.MSBuild)]
404 [InlineData(BuildSystem.MSBuild64)]
405 public void CanBuildMsiPackageWithIceSuppressions(BuildSystem buildSystem) 327 public void CanBuildMsiPackageWithIceSuppressions(BuildSystem buildSystem)
406 { 328 {
407 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage"); 329 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage");
diff --git a/src/wix/test/WixToolsetTest.Sdk/MsbuildValidationFixture.cs b/src/wix/test/WixToolsetTest.Sdk/MsbuildValidationFixture.cs
new file mode 100644
index 00000000..829ee9c1
--- /dev/null
+++ b/src/wix/test/WixToolsetTest.Sdk/MsbuildValidationFixture.cs
@@ -0,0 +1,99 @@
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.Sdk
4{
5 using System;
6 using System.IO;
7 using System.Linq;
8 using WixBuildTools.TestSupport;
9 using Xunit;
10
11 // When these tests are run repeatedly, they will expose an issue
12 // in the Windows Installer where ICE validations will occasionally
13 // fail to send all error/warning messages. The inconsistency
14 // obviously wreaks havoc on the tests.
15 //
16 // These tests are still interesting (and complex) enough to keep
17 // around for manual testing. Uncomment or define the following
18 // line to do so.
19#if DISABLE_VALIDATION_TESTS_DUE_TO_WINDOWS_INSTALLER_INCONSISTENCIES
20 public class MsbuildValidationFixture
21 {
22 [Theory]
23 [InlineData(BuildSystem.DotNetCoreSdk)]
24 [InlineData(BuildSystem.MSBuild)]
25 [InlineData(BuildSystem.MSBuild64)]
26 public void CannotBuildMsiPackageWithIceIssues(BuildSystem buildSystem)
27 {
28 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage");
29
30 var testLogsFolder = TestData.GetUnitTestLogsFolder();
31 File.Delete(Path.Combine(testLogsFolder, buildSystem + ".binlog"));
32 File.Delete(Path.Combine(testLogsFolder, buildSystem + ".msi"));
33
34 using (var fs = new TestDataFolderFileSystem())
35 {
36 fs.Initialize(sourceFolder);
37 var baseFolder = fs.BaseFolder;
38 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
39
40 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, suppressValidation: false);
41
42 File.Copy(Path.ChangeExtension(projectPath, ".binlog"), Path.Combine(testLogsFolder, buildSystem + ".binlog"));
43 File.Copy(Path.Combine(baseFolder, "obj", "x86", "Release", "en-US", "MsiPackage.msi"), Path.Combine(testLogsFolder, buildSystem + ".msi"));
44
45 var iceIssues = result.Output.Where(line => line.Contains(": error") || line.Contains(": warning"))
46 .Select(line => line.Replace(baseFolder, "<baseFolder>")
47 .Replace("1>", String.Empty) // remove any multi-proc markers
48 .Replace("WIX204", "WIX0204") // normalize error number reporting because MSBuild is not consistent on zero padding
49 .Trim())
50 .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
51 .ToArray();
52 WixAssert.CompareLineByLine(new[]
53 {
54 @"<baseFolder>\Package.wxs(17): error WIX0204: ICE12: CustomAction: CausesICE12Error is of type: 35. Therefore it must come after CostFinalize @ 1000 in Seq Table: InstallExecuteSequence. CA Seq#: 49 [<baseFolder>\MsiPackage.wixproj]",
55 @"<baseFolder>\Package.wxs(17): error WIX0204: ICE12: CustomAction: CausesICE12Error is of type: 35. Therefore it must come after CostFinalize @ 1000 in Seq Table: InstallExecuteSequence. CA Seq#: 49 [<baseFolder>\MsiPackage.wixproj]",
56 @"<baseFolder>\Package.wxs(8): warning WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
57 @"<baseFolder>\Package.wxs(8): warning WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
58 }, iceIssues);
59 }
60 }
61
62 [Theory]
63 [InlineData(BuildSystem.DotNetCoreSdk)]
64 [InlineData(BuildSystem.MSBuild)]
65 [InlineData(BuildSystem.MSBuild64)]
66 public void CannotBuildMsiPackageWithIceWarningsAsErrors(BuildSystem buildSystem)
67 {
68 var sourceFolder = TestData.Get(@"TestData\MsiPackageWithIceError\MsiPackage");
69
70 using (var fs = new TestDataFolderFileSystem())
71 {
72 fs.Initialize(sourceFolder);
73 var baseFolder = fs.BaseFolder;
74 var projectPath = Path.Combine(baseFolder, "MsiPackage.wixproj");
75
76 var result = MsbuildUtilities.BuildProject(buildSystem, projectPath, new[]
77 {
78 $"-p:TreatWarningsAsErrors=true",
79 MsbuildUtilities.GetQuotedPropertySwitch(buildSystem, "SuppressIces", "ICE12"),
80 }, suppressValidation: false);
81 Assert.Equal(1, result.ExitCode);
82
83 var iceIssues = result.Output.Where(line => (line.Contains(": error") || line.Contains(": warning")))
84 .Select(line => line.Replace(baseFolder, "<baseFolder>")
85 .Replace("1>", String.Empty) // remove any multi-proc markers
86 .Replace("WIX204", "WIX0204") // normalize error number reporting because MSBuild is not consistent on zero padding
87 .Trim())
88 .OrderBy(s => s, StringComparer.OrdinalIgnoreCase)
89 .ToArray();
90 WixAssert.CompareLineByLine(new[]
91 {
92 @"<baseFolder>\Package.wxs(8): error WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
93 @"<baseFolder>\Package.wxs(8): error WIX1076: ICE46: Property 'Myproperty' referenced in column 'LaunchCondition'.'Condition' of row 'Myproperty' differs from a defined property by case only. [<baseFolder>\MsiPackage.wixproj]",
94 }, iceIssues);
95 }
96 }
97 }
98#endif
99}