public void ResolveQuoteTest()
        {
            var    factory         = SetupFactory();
            var    environmentMock = new Mock <IEnvironment>();
            var    environment     = environmentMock.Object;
            var    resolver        = new ExecutableResolver(factory, environment);
            string result          = resolver.Resolve("'C:\\Program Files\\Git\\bin\\git.exe'");

            Assert.NotNull(result);
            Assert.NotEmpty(result);
            Assert.Equal("C:\\Program Files\\Git\\bin\\git.exe", result);
        }
Example #2
0
        public static SystemExecutionOutput RunQueryMultiDbExecution(QueryMultiDbArgumentStringBuilder argumentStringBuilder, bool createOutputFileBeforeExecution = false)
        {
            if (argumentStringBuilder == null)
            {
                throw new ArgumentNullException(nameof(argumentStringBuilder));
            }

            var temporaryDirectory = GetTemporaryDirectory();
            var outputFilename     = Guid.NewGuid().ToString();
            var outputFile         = Path.Combine(temporaryDirectory, outputFilename);

            argumentStringBuilder.OutputFile = outputFile;

            if (createOutputFileBeforeExecution)
            {
                using (var sw = File.CreateText(outputFile))
                {
                    sw.WriteLine("Test file created before execution.");
                }
            }

            var arguments = argumentStringBuilder.ToString();

            var startInfo = new ProcessStartInfo
            {
                UseShellExecute        = false,
                CreateNoWindow         = false,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                RedirectStandardInput  = true,
                FileName  = ExecutableResolver.GetQueryMultiDbExecutablePath(QueryMultiDbFilename, RelativeExecutablePath),
                Arguments = arguments
            };

            SystemExecutionOutput systemExecutionOutput;

            using (var process = Process.Start(startInfo))
            {
                if (process == null)
                {
                    throw new Exception();
                }

                string standardOutput;

                using (var standardOutputReader = process.StandardOutput)
                {
                    standardOutput = standardOutputReader.ReadToEnd();
                }

                string standardError;

                using (var standardErrorReader = process.StandardError)
                {
                    standardError = standardErrorReader.ReadToEnd();
                }

                process.WaitForExit();

                var exitCode = process.ExitCode;

                byte[] fileContent = null;

                try
                {
                    var path = outputFile;
                    fileContent = File.ReadAllBytes(path);
                    SafeCreateDirectory(RelativeTestResultsDirectory);
                    var extension = argumentStringBuilder.Exporter == "csv" ? ".zip" : ".xlsx";
                    File.Move(path, RelativeTestResultsDirectory + outputFilename + extension);
                }
                catch
                {
                    // Ignored because fileContent being null is fine in this case. It will be asserted later.
                    throw;
                }

                systemExecutionOutput = new SystemExecutionOutput(exitCode, standardOutput, standardError, fileContent);
            }

            DeleteDirectory(temporaryDirectory);

            return(systemExecutionOutput);
        }