public void CheckClose() { string closeTestCmdLine = $"{closeTestBinaryLocation} -n {processCount} --log {testPipeName} --delay 1000 --no-realloc"; using (var tokenSource = new CancellationTokenSource()) { var token = tokenSource.Token; Task.Run(() => MakePipeServer(token), token); Log.Comment("Connect a test console window to the close test binary and wait for a few seconds."); CmdApp app = new CmdApp(CreateType.ProcessOnly, TestContext, closeTestCmdLine); Thread.Sleep(TimeSpan.FromSeconds(2)); NativeMethods.Win32BoolHelper(WinCon.FreeConsole(), "Free console bindings so we aren't shut down when we kill the window."); Log.Comment("Click the close button on the window then wait a few seconds for it to cleanup."); app.GetCloseButton().Click(); Thread.Sleep(TimeSpan.FromSeconds(5)); tokenSource.Cancel(); Log.Comment("Compare the output we received on our pipes to what we expected to get in terms of ordering and process count."); for (uint i = 1; i <= processCount; i++) { string expected = string.Format(attachPattern, i); Verify.AreEqual(expected, messages.Dequeue()); } Verify.IsTrue(messages.Dequeue().StartsWith(spacerStartsWith)); for (uint i = processCount; i >= 1; i--) { string expected; expected = string.Format(pausingPattern, i); Verify.AreEqual(expected, messages.Dequeue()); expected = string.Format(exitingPattern, i); Verify.AreEqual(expected, messages.Dequeue()); } } }