コード例 #1
0
        public void SimpleTestTableSelect()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();
            var systemRunOutput       = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(DatabaseFixture.TestTableSelectQuery, DatabaseFixture.OneTarget, argumentStringBuilder);

            _output.WriteLine(systemRunOutput.ToVerboseString());
            SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput);
            var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput);
        }
コード例 #2
0
        public void Test3()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();
            var query           = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test3.sql");
            var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, DatabaseFixture.OneTarget, argumentStringBuilder);

            _output.WriteLine(systemRunOutput.ToVerboseString());
            SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput);
            var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput);

            Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput);
            Assert.Equal(3, sheetCount);
            Assert.True(systemRunOutput.OutputFileContent.Length > 5000);
            Assert.True(systemRunOutput.OutputFileContent.Length < 10000);
        }
コード例 #3
0
        public void Test10()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();
            var query           = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test2.sql");
            var targets         = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.Targets.targets.01.json", true);
            var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, targets, argumentStringBuilder);

            _output.WriteLine(systemRunOutput.ToVerboseString());
            SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput);
            var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput);

            Assert.Matches("ERROR", systemRunOutput.StandardOutput);
            Assert.Equal(5, sheetCount);
            Assert.True(systemRunOutput.OutputFileContent.Length > 10000);
            Assert.True(systemRunOutput.OutputFileContent.Length < 20000);
        }
コード例 #4
0
        public void Test16()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();

            argumentStringBuilder.Exporter = "csv";
            argumentStringBuilder.ShowInformationMessages = false;
            var query           = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test7.sql");
            var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecutionFromData(query, DatabaseFixture.TwoTargets, argumentStringBuilder);

            _output.WriteLine(systemRunOutput.ToVerboseString());
            SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput);
            var sheetCount = SystemTestsHelpers.AssertStandardCsvSuccessConditions(systemRunOutput);

            Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput);
            Assert.Equal(4, sheetCount);
            Assert.True(systemRunOutput.OutputFileContent.Length > 2000);
            Assert.True(systemRunOutput.OutputFileContent.Length < 3000);
        }
コード例 #5
0
        public void Test15()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();

            argumentStringBuilder.Progress  = true;
            argumentStringBuilder.Overwrite = false;
            var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test8.sql");

            argumentStringBuilder.Query   = query;
            argumentStringBuilder.Targets = DatabaseFixture.TwoTargets;

            var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecution(argumentStringBuilder, true);

            _output.WriteLine(systemRunOutput.ToVerboseString());

            Assert.NotEqual(0, systemRunOutput.ExitCode);
            Assert.Matches("FATAL", systemRunOutput.StandardOutput);
        }
コード例 #6
0
        public void Test14()
        {
            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder();

            argumentStringBuilder.Progress  = true;
            argumentStringBuilder.Overwrite = true;
            var query = SystemTestsHelpers.GetResource("QueryMultiDb.Tests.System.SqlResources.Test1.sql");

            argumentStringBuilder.Query   = query;
            argumentStringBuilder.Targets = DatabaseFixture.TwoTargets;

            var systemRunOutput = SystemTestsHelpers.RunQueryMultiDbExecution(argumentStringBuilder, true);

            _output.WriteLine(systemRunOutput.ToVerboseString());
            SystemTestsHelpers.AssertStandardSuccessConditions(systemRunOutput);
            var sheetCount = SystemTestsHelpers.AssertStandardExcelSuccessConditions(systemRunOutput);

            Assert.DoesNotMatch("ERROR", systemRunOutput.StandardOutput);
            Assert.Equal(6, sheetCount);
            Assert.True(systemRunOutput.OutputFileContent.Length > 10000);
            Assert.True(systemRunOutput.OutputFileContent.Length < 20000);
        }
コード例 #7
0
        private void executeButton_Click(object sender, EventArgs e)
        {
            if (sqlFileDisplayControl.AbsoluteFilePath == null ||
                targetsComboBox.SelectedItem == null ||
                outputFileDisplayControl.AbsoluteFilePath == null)
            {
                MessageBox.Show("Select a SQL script, a target, and an output file to execute.",
                                "Cannot execute.",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error,
                                MessageBoxDefaultButton.Button1);

                return;
            }

            var argumentStringBuilder = new QueryMultiDbArgumentStringBuilder
            {
                Overwrite               = overwriteOutputFileCheckBox.Checked,
                Progress                = true,
                QueryFile               = sqlFileDisplayControl.AbsoluteFilePath,
                TargetsFile             = ((TargetFileEntry)targetsComboBox.SelectedItem).Filepath,
                OutputFile              = outputFileDisplayControl.AbsoluteFilePath,
                ShowNulls               = showNullCheckBox.Checked,
                NullsColor              = ToHex(nullColorPictureBox.BackColor),
                DiscardResults          = discardResultsCheckBox.Checked,
                CommandTimeout          = (int)commandTimeoutNumericUpDown.Value,
                Parallelism             = (int)parallelismNumericUpDown.Value,
                SheetLabels             = sheetlabelTextBox.Text,
                ApplicationName         = "GUI",
                ShowIpAddress           = !hideLotCheckBox.Checked,
                ShowServerName          = !hideLotCheckBox.Checked,
                ShowDatabaseName        = !hideLotCheckBox.Checked,
                ShowExtraColumns        = !hideLotCheckBox.Checked,
                ShowLogSheet            = !hideLotCheckBox.Checked,
                ShowParameterSheet      = !hideLotCheckBox.Checked,
                ShowInformationMessages = !hideLotCheckBox.Checked,
                Exporter                = "excel",
                CsvDelimiter            = ";",
                Base10Threshold         = 4,
                Base16Threshold         = 64,
                Base64Threshold         = 262144
            };

            var startInfo = new ProcessStartInfo
            {
                UseShellExecute        = false,
                CreateNoWindow         = true,
                RedirectStandardOutput = true,
                RedirectStandardError  = true,
                RedirectStandardInput  = true,
                FileName  = QueryMultiDbExecutableFullPath,
                Arguments = argumentStringBuilder.ToString()
            };

            try
            {
                var process = new Process {
                    StartInfo = startInfo
                };
                process.OutputDataReceived += Process_OutputDataReceived;
                process.ErrorDataReceived  += Process_ErrorDataReceived;
                process.Exited             += Process_Exited;
                process.EnableRaisingEvents = true;

                this.InvokeEx(() => consoleOutputTextBox.Text = string.Empty);
                this.InvokeEx(() => commandLineTextBox.Text   = QueryMultiDbExecutableFullPath + argumentStringBuilder);

                _consoleBuffer = new StringBuilder(1 * 1024 * 1024);

                process.Start();
                process.BeginOutputReadLine();
                process.BeginErrorReadLine();

                executeButton.Enabled = false;
                cancelButton.Enabled  = true;
                _runningProcess       = process;
            }
            catch (Win32Exception exp)
            {
                MessageBox.Show($"Unable to start the process with the specified file '{startInfo.FileName}'. There might be a path issue. {exp.Message}",
                                "Cannot start QueryMultiDb process.",
                                MessageBoxButtons.OK,
                                MessageBoxIcon.Error,
                                MessageBoxDefaultButton.Button1);
            }
        }
コード例 #8
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);
        }
コード例 #9
0
        public static SystemExecutionOutput RunQueryMultiDbExecutionFromResource(string resourceNameSql, string resourceNameJson, bool formatResource, QueryMultiDbArgumentStringBuilder argumentStringBuilder)
        {
            if (argumentStringBuilder == null)
            {
                throw new ArgumentNullException(nameof(argumentStringBuilder));
            }

            var temporaryDirectory = GetTemporaryDirectory();

            CopyResourceToDirectory(resourceNameSql, temporaryDirectory, formatResource);
            CopyResourceToDirectory(resourceNameJson, temporaryDirectory, formatResource);
            argumentStringBuilder.QueryFile   = Path.Combine(temporaryDirectory, resourceNameSql);
            argumentStringBuilder.TargetsFile = Path.Combine(temporaryDirectory, resourceNameJson);
            var systemExecutionOutput = RunQueryMultiDbExecution(argumentStringBuilder);

            DeleteDirectory(temporaryDirectory);

            return(systemExecutionOutput);
        }
コード例 #10
0
        public static SystemExecutionOutput RunQueryMultiDbExecutionFromData(string query, string targets, QueryMultiDbArgumentStringBuilder argumentStringBuilder)
        {
            if (argumentStringBuilder == null)
            {
                throw new ArgumentNullException(nameof(argumentStringBuilder));
            }

            argumentStringBuilder.Query   = query;
            argumentStringBuilder.Targets = targets;
            var systemExecutionOutput = RunQueryMultiDbExecution(argumentStringBuilder);

            return(systemExecutionOutput);
        }