From ba7bab476501c16e437b0aee71c1be02c3dda176 Mon Sep 17 00:00:00 2001 From: Rob Mensching Date: Mon, 3 May 2021 15:55:48 -0700 Subject: Move Bal.wixext into ext --- .../WixToolsetTest.ManagedHost/DncHostFixture.cs | 209 +++++++++++++++++++++ .../WixToolsetTest.ManagedHost/MbaHostFixture.cs | 94 +++++++++ .../Bal/test/WixToolsetTest.ManagedHost/README.md | 5 + .../test/WixToolsetTest.ManagedHost/TestEngine.cs | 74 ++++++++ .../WixToolsetTest.ManagedHost/TestEngineResult.cs | 12 ++ .../WixToolsetTest.ManagedHost.csproj | 25 +++ 6 files changed, 419 insertions(+) create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/README.md create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngineResult.cs create mode 100644 src/ext/Bal/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj (limited to 'src/ext/Bal/test/WixToolsetTest.ManagedHost') diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs new file mode 100644 index 00000000..af5f2543 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/DncHostFixture.cs @@ -0,0 +1,209 @@ +// 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. + +namespace WixToolsetTest.ManagedHost +{ + using System.IO; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using Xunit; + + public class DncHostFixture + { + static readonly string bundleBasePath = TestData.Get("..", "examples"); + + [Fact] + public void CanLoadFDDEarliestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "EarliestCoreBundleFDD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("EarliestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanLoadSCDEarliestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "EarliestCoreBundleSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("EarliestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanLoadTrimmedSCDEarliestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "EarliestCoreBundleTrimmedSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("EarliestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanReloadSCDEarliestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "EarliestCoreBundleSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunReloadEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("EarliestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[4]); + Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); + Assert.Equal("EarliestCoreBA", logMessages[7]); + Assert.Equal("Shutdown,Restart,0", logMessages[8]); + } + } + + [Fact] + public void CanLoadFDDLatestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "LatestCoreBundleFDD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("LatestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanReloadFDDLatestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "LatestCoreBundleFDD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunReloadEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("LatestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[4]); + Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); + Assert.Equal("LatestCoreBA", logMessages[7]); + Assert.Equal("Shutdown,Restart,0", logMessages[8]); + } + } + + [Fact] + public void CanLoadSCDLatestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "LatestCoreBundleSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("LatestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanLoadTrimmedSCDLatestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "LatestCoreBundleTrimmedSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("LatestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanReloadSCDLatestCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "LatestCoreBundleSCD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunReloadEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("LatestCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + Assert.Equal("Loading .NET Core SCD bootstrapper application.", logMessages[4]); + Assert.Equal("Reloaded 1 time(s)", logMessages[5]); // dnchost doesn't currently support unloading + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[6]); + Assert.Equal("LatestCoreBA", logMessages[7]); + Assert.Equal("Shutdown,Restart,0", logMessages[8]); + } + } + + [Fact] + public void CanLoadFDDWPFCoreMBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "WPFCoreBundleFDD.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading .NET Core FDD bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("WPFCoreBA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + } +} diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs new file mode 100644 index 00000000..dd37ee58 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs @@ -0,0 +1,94 @@ +// 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. + +namespace WixToolsetTest.ManagedHost +{ + using System.IO; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + using Xunit; + + public class MbaHostFixture + { + static readonly string bundleBasePath = TestData.Get("..", "examples"); + + [Fact] + public void CanLoadFullFramework2MBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "FullFramework2Bundle.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("FullFramework2BA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanLoadFullFramework4MBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "FullFramework4Bundle.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunShutdownEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("FullFramework4BA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + } + } + + [Fact] + public void CanReloadFullFramework2MBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "FullFramework2Bundle.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunReloadEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("FullFramework2BA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + Assert.Equal("Loading managed bootstrapper application.", logMessages[4]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[5]); + Assert.Equal("FullFramework2BA", logMessages[6]); + Assert.Equal("Shutdown,Restart,0", logMessages[7]); + } + } + + [Fact] + public void CanReloadFullFramework4MBA() + { + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var bundleFile = TestData.Get(bundleBasePath, "FullFramework4Bundle.exe"); + var testEngine = new TestEngine(); + + var result = testEngine.RunReloadEngine(bundleFile, baseFolder); + var logMessages = result.Output; + Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[1]); + Assert.Equal("FullFramework4BA", logMessages[2]); + Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[3]); + Assert.Equal("Loading managed bootstrapper application.", logMessages[4]); + Assert.Equal("Creating BA thread to run asynchronously.", logMessages[5]); + Assert.Equal("FullFramework4BA", logMessages[6]); + Assert.Equal("Shutdown,Restart,0", logMessages[7]); + } + } + } +} diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/README.md b/src/ext/Bal/test/WixToolsetTest.ManagedHost/README.md new file mode 100644 index 00000000..d7e73df2 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/README.md @@ -0,0 +1,5 @@ +In order to properly test dnchost and mbahost, +the managed BAs need to be published and a bundle needs to be built for each scenario. +Making this happen on every build for the solution takes too long, +so this project relies on manually running appveyor.cmd to publish everything before the tests can be run. +appveyor.cmd needs to be ran again every time changes are made in other projects. \ No newline at end of file diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs new file mode 100644 index 00000000..44538227 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngine.cs @@ -0,0 +1,74 @@ +// 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. + +namespace WixToolsetTest.ManagedHost +{ + using System.Collections.Generic; + using System.Diagnostics; + using System.IO; + using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; + + public class TestEngine + { + private static readonly string TestEngineFile = TestData.Get(@"..\Win32\examples\Example.TestEngine\Example.TestEngine.exe"); + + public TestEngineResult RunReloadEngine(string bundleFilePath, string tempFolderPath) + { + return this.RunTestEngine("reload", bundleFilePath, tempFolderPath); + } + + public TestEngineResult RunShutdownEngine(string bundleFilePath, string tempFolderPath) + { + return this.RunTestEngine("shutdown", bundleFilePath, tempFolderPath); + } + + private TestEngineResult RunTestEngine(string engineMode, string bundleFilePath, string tempFolderPath) + { + var baFolderPath = Path.Combine(tempFolderPath, "ba"); + var extractFolderPath = Path.Combine(tempFolderPath, "extract"); + var extractResult = BundleExtractor.ExtractBAContainer(null, bundleFilePath, baFolderPath, extractFolderPath); + extractResult.AssertSuccess(); + + var args = new string[] { + engineMode, + '"' + bundleFilePath + '"', + '"' + extractResult.GetBAFilePath(baFolderPath) + '"', + }; + return RunProcessCaptureOutput(TestEngineFile, args); + } + + private static TestEngineResult RunProcessCaptureOutput(string executablePath, string[] arguments = null, string workingFolder = null) + { + var startInfo = new ProcessStartInfo(executablePath) + { + Arguments = string.Join(' ', arguments), + CreateNoWindow = true, + RedirectStandardError = true, + RedirectStandardOutput = true, + UseShellExecute = false, + WorkingDirectory = workingFolder, + }; + + var exitCode = 0; + var output = new List(); + + using (var process = Process.Start(startInfo)) + { + process.OutputDataReceived += (s, e) => { if (e.Data != null) { output.Add(e.Data); } }; + process.ErrorDataReceived += (s, e) => { if (e.Data != null) { output.Add(e.Data); } }; + + process.BeginErrorReadLine(); + process.BeginOutputReadLine(); + + process.WaitForExit(); + exitCode = process.ExitCode; + } + + return new TestEngineResult + { + ExitCode = exitCode, + Output = output, + }; + } + } +} diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngineResult.cs b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngineResult.cs new file mode 100644 index 00000000..63f6f7f5 --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/TestEngineResult.cs @@ -0,0 +1,12 @@ +// 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. + +namespace WixToolsetTest.ManagedHost +{ + using System.Collections.Generic; + + public class TestEngineResult + { + public int ExitCode { get; set; } + public List Output { get; set; } + } +} diff --git a/src/ext/Bal/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj b/src/ext/Bal/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj new file mode 100644 index 00000000..38c8926c --- /dev/null +++ b/src/ext/Bal/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj @@ -0,0 +1,25 @@ + + + + + + netcoreapp3.1 + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3-55-g6feb