public MyHost(IShutdown shutdown, ConsoleWriterQueue consoleWriterQueue, WaitBlock waitBlock, IRuntimeSettings runtimeSettings) { _shutdown = shutdown; _consoleWriterQueue = consoleWriterQueue; _waitBlock = waitBlock; _shouldHandleAsWindowsService = string.Equals(Boolean.TrueString, runtimeSettings["ShouldHandleAsWindowsService"]); }
private static void Execute(WaitBlock waitBlock, ConsoleWriterQueue consoleWriterQueue, bool asWindowsService = false) { using (IApplicationContext context = ApplicationContext.Create(application => application .ConfigureForUnitTest() .WithWaitBlock(waitBlock, consoleWriterQueue) .UseConsoleHost() .Hosts(hosts => hosts .Clear() .Host <MyHost>()) .Services(services => services .Advanced(advanced => advanced .Register <IRuntimeSettings>(kernel => new InMemoryRuntimeSettings() .Set("ShouldHandleAsWindowsService", asWindowsService ? Boolean.TrueString : Boolean.FalseString)) .Register <IWindowsServiceHandler, FakeWindowsServiceHandler>() ) ) )) { context.Execute(nameof(MyHost)); } }
public void ExecuteHost_InWindowsServiceContext_AssertExecutionOrder() { var consoleWriterQueue = new ConsoleWriterQueue(); using (var waitBlock = new WaitBlock()) { Execute(waitBlock, consoleWriterQueue, asWindowsService: true); } StringAssert.Contains("[Integration Service]: Started", consoleWriterQueue.Dequeue()); StringAssert.Contains("WindowsService.Starting", consoleWriterQueue.Dequeue()); StringAssert.Contains("WindowsService.Running", consoleWriterQueue.Dequeue()); StringAssert.Contains("Host.Handling", consoleWriterQueue.Dequeue()); StringAssert.Contains("WindowsService.Stopping", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shutdown requested.", consoleWriterQueue.Dequeue()); StringAssert.Contains("Host.Handled", consoleWriterQueue.Dequeue()); StringAssert.Contains("WindowsService.Stopped", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shutting down", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shut down.", consoleWriterQueue.Dequeue()); Assert.That(consoleWriterQueue.Count, Is.Zero); }
public void ExecuteHost_NotInWindowsServiceContext_AssertExecutionOrder() { var consoleWriterQueue = new ConsoleWriterQueue(); using (var waitBlock = new WaitBlock()) { Execute(waitBlock, consoleWriterQueue); } StringAssert.Contains("[Integration Service]: Started", consoleWriterQueue.Dequeue()); StringAssert.Contains("NotWindowsService", consoleWriterQueue.Dequeue()); StringAssert.Contains("Host.Handling", consoleWriterQueue.Dequeue()); StringAssert.Contains("Host.ManuallyRelease", consoleWriterQueue.Dequeue()); StringAssert.Contains("Shutdown.Waiting", consoleWriterQueue.Dequeue()); StringAssert.Contains("Shutdown.Waited", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shutdown requested.", consoleWriterQueue.Dequeue()); StringAssert.Contains("Host.Handled", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shutting down", consoleWriterQueue.Dequeue()); StringAssert.Contains("[Integration Service]: Shut down.", consoleWriterQueue.Dequeue()); Assert.That(consoleWriterQueue.Count, Is.Zero); }
public FakeWindowsServiceHandler(ConsoleWriterQueue consoleWriterQueue, IRuntimeSettings runtimeSettings) { _consoleWriterQueue = consoleWriterQueue; _shouldHandleAsWindowsService = string.Equals(Boolean.TrueString, runtimeSettings["ShouldHandleAsWindowsService"]); }