From bd3ee565f342bc0bb015594f303d13b67285a958 Mon Sep 17 00:00:00 2001 From: Sean Hall Date: Thu, 23 Apr 2020 12:17:32 +1000 Subject: Update ManagedHost tests to run off of a bundle. --- .../WixToolsetTest.ManagedHost/MbaHostFixture.cs | 74 ++++++++++++++++----- .../TestData/FullFramework2MBA/Bundle.wxs | 15 +++++ .../TestData/FullFramework4MBA/Bundle.wxs | 15 +++++ src/test/WixToolsetTest.ManagedHost/TestEngine.cs | 15 ++++- .../WixToolsetTest.ManagedHost.csproj | 12 ++++ .../BootstrapperApplicationData.xml | Bin 20128 -> 0 bytes .../Example.FullFramework2MBA.csproj | 21 ------ .../examples/FullFramework2MBA/FullFramework2BA.cs | 7 ++ .../BootstrapperApplicationData.xml | Bin 20128 -> 0 bytes .../Example.FullFramework4MBA.csproj | 26 +------- .../examples/FullFramework4MBA/FullFramework4BA.cs | 7 ++ src/test/examples/TestEngine/ExampleTestEngine.cpp | 8 +-- src/test/examples/TestEngine/ShutdownEngine.cpp | 8 ++- src/test/examples/TestEngine/TestEngine.cpp | 34 ++++++++-- src/test/examples/TestEngine/TestEngine.h | 6 ++ src/test/examples/TestEngine/precomp.h | 2 + .../WixStandardBootstrapperApplication.cpp | 5 ++ 17 files changed, 183 insertions(+), 72 deletions(-) create mode 100644 src/test/WixToolsetTest.ManagedHost/TestData/FullFramework2MBA/Bundle.wxs create mode 100644 src/test/WixToolsetTest.ManagedHost/TestData/FullFramework4MBA/Bundle.wxs delete mode 100644 src/test/examples/FullFramework2MBA/BootstrapperApplicationData.xml delete mode 100644 src/test/examples/FullFramework4MBA/BootstrapperApplicationData.xml (limited to 'src') diff --git a/src/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs b/src/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs index 8da42e77..8ef0320e 100644 --- a/src/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs +++ b/src/test/WixToolsetTest.ManagedHost/MbaHostFixture.cs @@ -2,7 +2,9 @@ namespace WixToolsetTest.ManagedHost { + using System.IO; using WixBuildTools.TestSupport; + using WixToolset.Core.TestPackage; using Xunit; public class MbaHostFixture @@ -10,31 +12,71 @@ namespace WixToolsetTest.ManagedHost [Fact] public void CanLoadFullFramework2MBA() { - var testEngine = new TestEngine(); - var baFile = TestData.Get(@"..\examples\Example.FullFramework2MBA\mbahost.dll"); + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var binFolder = Path.Combine(baseFolder, "bin"); + var bundleFile = Path.Combine(binFolder, "FullFramework2MBA.exe"); + var baSourceFolder = TestData.Get(@"..\examples"); + var bundleSourceFolder = TestData.Get(@"TestData\FullFramework2MBA"); + var intermediateFolder = Path.Combine(baseFolder, "obj"); - var result = testEngine.RunShutdownEngine(baFile); - Assert.Equal(0, result.ExitCode); + var compileResult = WixRunner.Execute(new[] + { + "build", + Path.Combine(bundleSourceFolder, "Bundle.wxs"), + "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), + "-ext", TestData.Get(@"WixToolset.NetFx.wixext.dll"), + "-intermediateFolder", intermediateFolder, + "-bindpath", baSourceFolder, + "-burnStub", TestEngine.BurnStubFile, + "-o", bundleFile, + }); + compileResult.AssertSuccess(); + var testEngine = new TestEngine(); - var logMessages = result.Output; - Assert.Equal(2, logMessages.Count); - Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); - Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[1]); + 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() { - var testEngine = new TestEngine(); - var baFile = TestData.Get(@"..\examples\Example.FullFramework4MBA\net48\mbahost.dll"); + using (var fs = new DisposableFileSystem()) + { + var baseFolder = fs.GetFolder(); + var binFolder = Path.Combine(baseFolder, "bin"); + var bundleFile = Path.Combine(binFolder, "FullFramework4MBA.exe"); + var baSourceFolder = TestData.Get(@"..\examples"); + var bundleSourceFolder = TestData.Get(@"TestData\FullFramework4MBA"); + var intermediateFolder = Path.Combine(baseFolder, "obj"); - var result = testEngine.RunShutdownEngine(baFile); - Assert.Equal(0, result.ExitCode); + var compileResult = WixRunner.Execute(new[] + { + "build", + Path.Combine(bundleSourceFolder, "Bundle.wxs"), + "-ext", TestData.Get(@"WixToolset.Bal.wixext.dll"), + "-ext", TestData.Get(@"WixToolset.NetFx.wixext.dll"), + "-intermediateFolder", intermediateFolder, + "-bindpath", baSourceFolder, + "-burnStub", TestEngine.BurnStubFile, + "-o", bundleFile, + }); + compileResult.AssertSuccess(); + var testEngine = new TestEngine(); - var logMessages = result.Output; - Assert.Equal(2, logMessages.Count); - Assert.Equal("Loading managed bootstrapper application.", logMessages[0]); - Assert.Equal("Shutdown,ReloadBootstrapper,0", logMessages[1]); + 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]); + } } } } diff --git a/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework2MBA/Bundle.wxs b/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework2MBA/Bundle.wxs new file mode 100644 index 00000000..b38e9f6e --- /dev/null +++ b/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework2MBA/Bundle.wxs @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework4MBA/Bundle.wxs b/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework4MBA/Bundle.wxs new file mode 100644 index 00000000..b3072e63 --- /dev/null +++ b/src/test/WixToolsetTest.ManagedHost/TestData/FullFramework4MBA/Bundle.wxs @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + diff --git a/src/test/WixToolsetTest.ManagedHost/TestEngine.cs b/src/test/WixToolsetTest.ManagedHost/TestEngine.cs index 4dd531ad..751ed59c 100644 --- a/src/test/WixToolsetTest.ManagedHost/TestEngine.cs +++ b/src/test/WixToolsetTest.ManagedHost/TestEngine.cs @@ -4,15 +4,26 @@ 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 static readonly string BurnStubFile = TestData.Get(@"runtimes\win-x86\native\burn.x86.exe"); - public TestEngineResult RunShutdownEngine(string baFile) + public TestEngineResult RunShutdownEngine(string bundleFilePath, string tempFolderPath) { - var args = new string[] { '"' + baFile + '"' }; + 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[] { + '"' + bundleFilePath + '"', + '"' + extractResult.GetBAFilePath(baFolderPath) + '"', + }; return RunProcessCaptureOutput(TestEngineFile, args); } diff --git a/src/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj b/src/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj index 02b0b109..5026af85 100644 --- a/src/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj +++ b/src/test/WixToolsetTest.ManagedHost/WixToolsetTest.ManagedHost.csproj @@ -12,15 +12,27 @@ + + + + + + + + + + + + diff --git a/src/test/examples/FullFramework2MBA/BootstrapperApplicationData.xml b/src/test/examples/FullFramework2MBA/BootstrapperApplicationData.xml deleted file mode 100644 index 7c4169b1..00000000 Binary files a/src/test/examples/FullFramework2MBA/BootstrapperApplicationData.xml and /dev/null differ diff --git a/src/test/examples/FullFramework2MBA/Example.FullFramework2MBA.csproj b/src/test/examples/FullFramework2MBA/Example.FullFramework2MBA.csproj index 494d1987..644bab44 100644 --- a/src/test/examples/FullFramework2MBA/Example.FullFramework2MBA.csproj +++ b/src/test/examples/FullFramework2MBA/Example.FullFramework2MBA.csproj @@ -28,7 +28,6 @@ - @@ -43,22 +42,6 @@ ..\..\..\..\packages\WixToolset.Mba.Core.4.0.18\lib\net20\WixToolset.Mba.Core.dll - - - {12c87c77-3547-44f8-8134-29bc915cb19d} - false - - - {F2BA1935-70FA-4156-B161-FD03850B4FAA} - false - Content - PreserveNewest - - - - - - @@ -70,8 +53,4 @@ - - - - \ No newline at end of file diff --git a/src/test/examples/FullFramework2MBA/FullFramework2BA.cs b/src/test/examples/FullFramework2MBA/FullFramework2BA.cs index 13d4673a..32cd19c8 100644 --- a/src/test/examples/FullFramework2MBA/FullFramework2BA.cs +++ b/src/test/examples/FullFramework2MBA/FullFramework2BA.cs @@ -16,6 +16,13 @@ namespace Example.FullFramework2MBA { } + protected override void OnStartup(StartupEventArgs args) + { + base.OnStartup(args); + + this.engine.Log(LogLevel.Standard, nameof(FullFramework2BA)); + } + protected override void OnShutdown(ShutdownEventArgs args) { base.OnShutdown(args); diff --git a/src/test/examples/FullFramework4MBA/BootstrapperApplicationData.xml b/src/test/examples/FullFramework4MBA/BootstrapperApplicationData.xml deleted file mode 100644 index 7c4169b1..00000000 Binary files a/src/test/examples/FullFramework4MBA/BootstrapperApplicationData.xml and /dev/null differ diff --git a/src/test/examples/FullFramework4MBA/Example.FullFramework4MBA.csproj b/src/test/examples/FullFramework4MBA/Example.FullFramework4MBA.csproj index 40f6d008..2d0dd790 100644 --- a/src/test/examples/FullFramework4MBA/Example.FullFramework4MBA.csproj +++ b/src/test/examples/FullFramework4MBA/Example.FullFramework4MBA.csproj @@ -1,5 +1,7 @@ - + + + net48 Full Framework v4 MBA @@ -11,28 +13,6 @@ - - - - - {12c87c77-3547-44f8-8134-29bc915cb19d} - false - - - {F2BA1935-70FA-4156-B161-FD03850B4FAA} - false - Content - PreserveNewest - - - - - - - - - - \ No newline at end of file diff --git a/src/test/examples/FullFramework4MBA/FullFramework4BA.cs b/src/test/examples/FullFramework4MBA/FullFramework4BA.cs index 556a61a7..8ee3bd19 100644 --- a/src/test/examples/FullFramework4MBA/FullFramework4BA.cs +++ b/src/test/examples/FullFramework4MBA/FullFramework4BA.cs @@ -16,6 +16,13 @@ namespace Example.FullFramework4MBA { } + protected override void OnStartup(StartupEventArgs args) + { + base.OnStartup(args); + + this.engine.Log(LogLevel.Standard, nameof(FullFramework4BA)); + } + protected override void OnShutdown(ShutdownEventArgs args) { base.OnShutdown(args); diff --git a/src/test/examples/TestEngine/ExampleTestEngine.cpp b/src/test/examples/TestEngine/ExampleTestEngine.cpp index 9f051875..848b385c 100644 --- a/src/test/examples/TestEngine/ExampleTestEngine.cpp +++ b/src/test/examples/TestEngine/ExampleTestEngine.cpp @@ -8,15 +8,15 @@ int __cdecl wmain(int argc, LPWSTR argv[]) ConsoleInitialize(); - if (argc != 2) + if (argc != 3) { - ConsoleWriteError(hr, CONSOLE_COLOR_RED, "Usage: Example.TestEngine.exe BA.dll"); + ConsoleWriteError(hr, CONSOLE_COLOR_RED, "Usage: Example.TestEngine.exe Bundle.exe BA.dll"); } else { - hr = RunShutdownEngine(argv[1]); + hr = RunShutdownEngine(argv[1], argv[2]); } ConsoleUninitialize(); - return HRESULT_CODE(hr); + return hr; } diff --git a/src/test/examples/TestEngine/ShutdownEngine.cpp b/src/test/examples/TestEngine/ShutdownEngine.cpp index 69321d91..912d36ba 100644 --- a/src/test/examples/TestEngine/ShutdownEngine.cpp +++ b/src/test/examples/TestEngine/ShutdownEngine.cpp @@ -3,6 +3,7 @@ #include "precomp.h" HRESULT RunShutdownEngine( + __in LPCWSTR wzBundleFilePath, __in LPCWSTR wzBAFilePath ) { @@ -12,12 +13,17 @@ HRESULT RunShutdownEngine( pTestEngine = new TestEngine(); ConsoleExitOnNull(pTestEngine, hr, E_OUTOFMEMORY, CONSOLE_COLOR_RED, "Failed to create new test engine."); - hr = pTestEngine->LoadBA(wzBAFilePath); + hr = pTestEngine->LoadBA(wzBundleFilePath, wzBAFilePath); ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to load BA."); + hr = pTestEngine->SendStartupEvent(); + ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "BA returned failure for OnStartup."); + hr = pTestEngine->SendShutdownEvent(BOOTSTRAPPER_SHUTDOWN_ACTION_RELOAD_BOOTSTRAPPER); ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "BA returned failure for OnShutdown."); + pTestEngine->UnloadBA(); + LExit: return hr; } diff --git a/src/test/examples/TestEngine/TestEngine.cpp b/src/test/examples/TestEngine/TestEngine.cpp index c0a62eda..9d8f8638 100644 --- a/src/test/examples/TestEngine/TestEngine.cpp +++ b/src/test/examples/TestEngine/TestEngine.cpp @@ -3,13 +3,13 @@ #include "precomp.h" HRESULT TestEngine::LoadBA( + __in LPCWSTR wzBundleFilePath, __in LPCWSTR wzBAFilePath ) { HRESULT hr = S_OK; BOOTSTRAPPER_COMMAND command = { }; BOOTSTRAPPER_CREATE_ARGS args = { }; - HMODULE hBAModule = NULL; PFN_BOOTSTRAPPER_APPLICATION_CREATE pfnCreate = NULL; if (m_pCreateResults) @@ -19,7 +19,7 @@ HRESULT TestEngine::LoadBA( LogInitialize(::GetModuleHandleW(NULL)); - hr = LogOpen(NULL, L"ExampleTestEngine", NULL, L"txt", FALSE, FALSE, NULL); + hr = LogOpen(NULL, PathFile(wzBundleFilePath), NULL, L"txt", FALSE, FALSE, NULL); ConsoleExitOnFailure(hr, CONSOLE_COLOR_RED, "Failed to open log."); m_pCreateResults = static_cast(MemAlloc(sizeof(BOOTSTRAPPER_CREATE_RESULTS), TRUE)); @@ -34,10 +34,10 @@ HRESULT TestEngine::LoadBA( m_pCreateResults->cbSize = sizeof(BOOTSTRAPPER_CREATE_RESULTS); - hBAModule = ::LoadLibraryExW(wzBAFilePath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); - ExitOnNullWithLastError(hBAModule, hr, "Failed to load BA dll."); + m_hBAModule = ::LoadLibraryExW(wzBAFilePath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + ExitOnNullWithLastError(m_hBAModule, hr, "Failed to load BA dll."); - pfnCreate = (PFN_BOOTSTRAPPER_APPLICATION_CREATE)::GetProcAddress(hBAModule, "BootstrapperApplicationCreate"); + pfnCreate = (PFN_BOOTSTRAPPER_APPLICATION_CREATE)::GetProcAddress(m_hBAModule, "BootstrapperApplicationCreate"); ConsoleExitOnNull(pfnCreate, hr, E_OUTOFMEMORY, CONSOLE_COLOR_RED, "Failed to get address for BootstrapperApplicationCreate."); hr = pfnCreate(&args, m_pCreateResults); @@ -68,6 +68,29 @@ HRESULT TestEngine::SendShutdownEvent( return hr; } +HRESULT TestEngine::SendStartupEvent() +{ + HRESULT hr = S_OK; + BA_ONSTARTUP_ARGS startupArgs = { }; + BA_ONSTARTUP_RESULTS startupResults = { }; + startupArgs.cbSize = sizeof(BA_ONSTARTUP_ARGS); + startupResults.cbSize = sizeof(BA_ONSTARTUP_RESULTS); + hr = m_pCreateResults->pfnBootstrapperApplicationProc(BOOTSTRAPPER_APPLICATION_MESSAGE_ONSTARTUP, &startupArgs, &startupResults, m_pCreateResults->pvBootstrapperApplicationProcContext); + return hr; +} + +void TestEngine::UnloadBA() +{ + PFN_BOOTSTRAPPER_APPLICATION_DESTROY pfnDestroy = NULL; + + pfnDestroy = (PFN_BOOTSTRAPPER_APPLICATION_DESTROY)::GetProcAddress(m_hBAModule, "BootstrapperApplicationDestroy"); + + if (pfnDestroy) + { + pfnDestroy(); + } +} + HRESULT TestEngine::BAEngineLog( __in TestEngine* pContext, __in BAENGINE_LOG_ARGS* pArgs, @@ -108,6 +131,7 @@ LExit: TestEngine::TestEngine() { + m_hBAModule = NULL; m_pCreateResults = NULL; } diff --git a/src/test/examples/TestEngine/TestEngine.h b/src/test/examples/TestEngine/TestEngine.h index 52872100..e5db9480 100644 --- a/src/test/examples/TestEngine/TestEngine.h +++ b/src/test/examples/TestEngine/TestEngine.h @@ -7,6 +7,7 @@ class TestEngine { public: HRESULT LoadBA( + __in LPCWSTR wzBundleFilePath, __in LPCWSTR wzBAFilePath ); @@ -18,6 +19,10 @@ public: __in BOOTSTRAPPER_SHUTDOWN_ACTION defaultAction ); + HRESULT SendStartupEvent(); + + void UnloadBA(); + private: static HRESULT BAEngineLog( __in TestEngine* pContext, @@ -38,5 +43,6 @@ public: ~TestEngine(); private: + HMODULE m_hBAModule; BOOTSTRAPPER_CREATE_RESULTS* m_pCreateResults; }; \ No newline at end of file diff --git a/src/test/examples/TestEngine/precomp.h b/src/test/examples/TestEngine/precomp.h index 6e867e89..d0068747 100644 --- a/src/test/examples/TestEngine/precomp.h +++ b/src/test/examples/TestEngine/precomp.h @@ -8,6 +8,7 @@ #include "conutil.h" #include "logutil.h" #include "memutil.h" +#include "pathutil.h" #include "BootstrapperEngine.h" #include "BootstrapperApplication.h" @@ -15,5 +16,6 @@ #include "TestEngine.h" HRESULT RunShutdownEngine( + __in LPCWSTR wzBundleFilePath, __in LPCWSTR wzBAFilePath ); diff --git a/src/wixstdba/WixStandardBootstrapperApplication.cpp b/src/wixstdba/WixStandardBootstrapperApplication.cpp index 4aef8ce5..88a26534 100644 --- a/src/wixstdba/WixStandardBootstrapperApplication.cpp +++ b/src/wixstdba/WixStandardBootstrapperApplication.cpp @@ -3752,6 +3752,11 @@ HRESULT CreateBootstrapperApplication( HRESULT hr = S_OK; CWixStandardBootstrapperApplication* pApplication = NULL; + if (BOOTSTRAPPER_DISPLAY_UNKNOWN == pArgs->pCommand->display) + { + ExitOnFailure(hr = E_INVALIDARG, "Engine requested Unknown display type."); + } + pApplication = new CWixStandardBootstrapperApplication(hModule, fPrereq, hrHostInitialization, pEngine, pArgs); ExitOnNull(pApplication, hr, E_OUTOFMEMORY, "Failed to create new standard bootstrapper application object."); -- cgit v1.2.3-55-g6feb