public void ProcRunner_PassesEnvVariables() { // Arrange var logger = new TestLogger(); var runner = new ProcessRunner(logger); var exeName = TestUtils.WriteBatchFileForTest(TestContext, @"echo %PROCESS_VAR% @echo %PROCESS_VAR2% @echo %PROCESS_VAR3% "); var envVariables = new Dictionary <string, string>() { { "PROCESS_VAR", "PROCESS_VAR value" }, { "PROCESS_VAR2", "PROCESS_VAR2 value" }, { "PROCESS_VAR3", "PROCESS_VAR3 value" } }; var args = new ProcessRunnerArguments(exeName, true) { EnvironmentVariables = envVariables }; // Act var success = runner.Execute(args); // Assert Assert.IsTrue(success, "Expecting the process to have succeeded"); Assert.AreEqual(0, runner.ExitCode, "Unexpected exit code"); logger.AssertMessageLogged("PROCESS_VAR value"); logger.AssertMessageLogged("PROCESS_VAR2 value"); logger.AssertMessageLogged("PROCESS_VAR3 value"); }
public void ProcRunner_PassesEnvVariables_OverrideExisting() { // Tests that existing environment variables will be overwritten successfully // Arrange var logger = new TestLogger(); var runner = new ProcessRunner(logger); try { // It's possible the user won't be have permissions to set machine level variables // (e.g. when running on a build agent). Carry on with testing the other variables. SafeSetEnvironmentVariable("proc.runner.test.machine", "existing machine value", EnvironmentVariableTarget.Machine, logger); Environment.SetEnvironmentVariable("proc.runner.test.process", "existing process value", EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("proc.runner.test.user", "existing user value", EnvironmentVariableTarget.User); var exeName = TestUtils.WriteBatchFileForTest(TestContext, @"@echo file: %proc.runner.test.machine% @echo file: %proc.runner.test.process% @echo file: %proc.runner.test.user% "); var envVariables = new Dictionary <string, string>() { { "proc.runner.test.machine", "machine override" }, { "proc.runner.test.process", "process override" }, { "proc.runner.test.user", "user override" } }; var args = new ProcessRunnerArguments(exeName, true) { EnvironmentVariables = envVariables }; // Act var success = runner.Execute(args); // Assert Assert.IsTrue(success, "Expecting the process to have succeeded"); Assert.AreEqual(0, runner.ExitCode, "Unexpected exit code"); } finally { SafeSetEnvironmentVariable("proc.runner.test.machine", null, EnvironmentVariableTarget.Machine, logger); Environment.SetEnvironmentVariable("proc.runner.test.process", null, EnvironmentVariableTarget.Process); Environment.SetEnvironmentVariable("proc.runner.test.user", null, EnvironmentVariableTarget.User); } // Check the child process used expected values logger.AssertMessageLogged("file: machine override"); logger.AssertMessageLogged("file: process override"); logger.AssertMessageLogged("file: user override"); // Check the runner reported it was overwriting existing variables // Note: the existing non-process values won't be visible to the child process // unless they were set *before* the test host launched, which won't be the case. logger.AssertSingleDebugMessageExists("proc.runner.test.process", "existing process value", "process override"); }
[WorkItem(72)] // Regression test for bug #72: CodeCoverage conversion - conversion errors should be detected and reported public void Conv_OutputIsCaptured() { // Arrange TestLogger logger = new TestLogger(); string testDir = TestUtils.CreateTestSpecificFolder(this.TestContext); string outputFilePath = Path.Combine(testDir, "output.txt"); string inputFilePath = Path.Combine(testDir, "input.txt"); File.WriteAllText(inputFilePath, "dummy input file"); string converterFilePath = Path.Combine(testDir, "converter.bat"); File.WriteAllText(converterFilePath, @" echo Normal output... echo Error output...>&2 echo Create a new file using the output parameter echo foo > """ + outputFilePath + @""""); // Act bool success = CoverageReportConverter.ConvertBinaryToXml(converterFilePath, inputFilePath, outputFilePath, logger); // Assert Assert.IsTrue(success, "Expecting the process to succeed"); Assert.IsTrue(File.Exists(outputFilePath), "Expecting the output file to exist"); this.TestContext.AddResultFile(outputFilePath); logger.AssertMessageLogged("Normal output..."); logger.AssertErrorLogged("Error output..."); }
public void Conv_HasThreeArguments() { // Arrange TestLogger logger = new TestLogger(); string testDir = TestUtils.CreateTestSpecificFolder(this.TestContext); string outputFilePath = Path.Combine(testDir, "output.txt"); string inputFilePath = Path.Combine(testDir, "input.txt"); File.WriteAllText(inputFilePath, "dummy input file"); string converterFilePath = Path.Combine(testDir, "converter.bat"); File.WriteAllText(converterFilePath, @" set argC=0 for %%x in (%*) do Set /A argC+=1 echo Converter called with %argC% args echo success > """ + outputFilePath + @""""); // Act bool success = CoverageReportConverter.ConvertBinaryToXml(converterFilePath, inputFilePath, outputFilePath, logger); // Assert Assert.IsTrue(success, "Expecting the process to succeed"); logger.AssertMessageLogged("Converter called with 3 args"); }
[WorkItem(72)] // Regression test for bug #72: CodeCoverage conversion - conversion errors should be detected and reported public void Conv_OutputIsCaptured() { // Arrange var logger = new TestLogger(); var testDir = TestUtils.CreateTestSpecificFolderWithSubPaths(TestContext); var outputFilePath = Path.Combine(testDir, "output.txt"); var inputFilePath = Path.Combine(testDir, "input.txt"); File.WriteAllText(inputFilePath, "dummy input file"); var converterFilePath = Path.Combine(testDir, "converter.bat"); File.WriteAllText(converterFilePath, @" echo Normal output... echo Error output...>&2 echo Create a new file using the output parameter echo foo > """ + outputFilePath + @""""); // Act var success = BinaryToXmlCoverageReportConverter.ConvertBinaryToXml(converterFilePath, inputFilePath, outputFilePath, logger); // Assert success.Should().BeTrue("Expecting the process to succeed"); File.Exists(outputFilePath).Should().BeTrue("Expecting the output file to exist"); TestContext.AddResultFile(outputFilePath); logger.AssertMessageLogged("Normal output..."); logger.AssertErrorLogged("Error output..."); }
public void ProcRunner_ExecutionSucceeded() { // Arrange string exeName = WriteBatchFileForTest( @"@echo Hello world xxx yyy @echo Testing 1,2,3... "); TestLogger logger = new TestLogger(); ProcessRunner runner = new ProcessRunner(); // Act bool success = runner.Execute(exeName, null, null, 1000, logger); // Assert Assert.IsTrue(success, "Expecting the process to have succeeded"); Assert.AreEqual(0, runner.ExitCode, "Unexpected exit code"); logger.AssertMessageLogged("Hello world"); // Check output message are passed to the logger logger.AssertMessageLogged("Testing 1,2,3..."); logger.AssertErrorLogged("'xxx' is not recognized as an internal or external command,"); // Check error messages are passed to the logger }
public void ProcRunner_ExecutionSucceeded() { // Arrange var exeName = TestUtils.WriteBatchFileForTest(TestContext, @"@echo Hello world xxx yyy @echo Testing 1,2,3...>&2 "); var logger = new TestLogger(); var args = new ProcessRunnerArguments(exeName, true); var runner = new ProcessRunner(logger); // Act var success = runner.Execute(args); // Assert Assert.IsTrue(success, "Expecting the process to have succeeded"); Assert.AreEqual(0, runner.ExitCode, "Unexpected exit code"); logger.AssertMessageLogged("Hello world"); // Check output message are passed to the logger logger.AssertErrorLogged("Testing 1,2,3..."); // Check error messages are passed to the logger }