示例#1
0
        public async Task QueryExecuteSingleBatchMultipleResultTest(TestResultSet testResultSet)
        {
            // If:
            // ... I request to execute a valid query with one batch and multiple result sets
            var workspaceService = GetDefaultWorkspaceService(Constants.StandardQuery);
            var testDataSet      = new[] { testResultSet, testResultSet };
            var queryService     = Common.GetPrimedExecutionService(testDataSet, true, false, false, workspaceService, sizeFactor: testResultSet.Rows.Count / Common.StandardRows + 1);
            var queryParams      = new ExecuteDocumentSelectionParams {
                OwnerUri = Constants.OwnerUri, QuerySelection = Common.WholeDocument
            };

            List <ResultSetEventParams> collectedResultSetEventParams = new List <ResultSetEventParams>();
            var efv = new EventFlowValidator <ExecuteRequestResult>()
                      .AddStandardQueryResultValidator()
                      .AddStandardBatchStartValidator()
                      .AddResultSetValidator(ResultSetAvailableEvent.Type, collectedResultSetEventParams)
                      .AddResultSetValidator(ResultSetUpdatedEvent.Type, collectedResultSetEventParams)
                      .AddResultSetValidator(ResultSetCompleteEvent.Type, collectedResultSetEventParams)
                      .AddStandardMessageValidator()
                      .AddStandardQueryCompleteValidator(1)
                      .Complete();
            await Common.AwaitExecution(queryService, queryParams, efv.Object);

            // Then:
            // ... All events should have been called as per their flow validator
            efv.ValidateResultSetSummaries(collectedResultSetEventParams).Validate();

            // ... There should be one active query
            Assert.Equal(1, queryService.ActiveQueries.Count);
        }
        public async Task UpdateRowSuccess()
        {
            // Setup:
            // ... Create a standard result set with standard data
            var       fileFactory = MemoryFileSystem.GetFileStreamFactory();
            var       mockReader  = GetReader(Common.StandardTestDataSet, false, Constants.StandardQuery);
            ResultSet resultSet   = new ResultSet(Common.Ordinal, Common.Ordinal, fileFactory);
            await resultSet.ReadResultToEnd(mockReader, CancellationToken.None);

            // ... Create a mock reader that has one row
            object[] row = Enumerable.Range(0, Common.StandardColumns).Select(i => "QQQ").ToArray();
            IEnumerable <object[]> rows = new List <object[]> {
                row
            };

            TestResultSet[] results      = { new TestResultSet(TestResultSet.GetStandardColumns(Common.StandardColumns), rows) };
            var             newRowReader = GetReader(results, false, Constants.StandardQuery);

            // If: I add a new row to the result set
            await resultSet.UpdateRow(0, newRowReader);

            // Then:
            // ... There should be the same number of rows
            Assert.Equal(Common.StandardRows, resultSet.RowCount);

            // ... The new row should be readable and all cells contain the test value
            Assert.All(resultSet.GetRow(0), cell => Assert.Equal("QQQ", cell.RawObject));
        }
示例#3
0
        public async Task WriteAsync(IConsole console, TestResultSet testResults)
        {
            if (console == null)
            {
                throw new ArgumentNullException(nameof(console));
            }

            if (testResults == null)
            {
                throw new ArgumentNullException(nameof(testResults));
            }

            await WriteResults(console, testResults);

            console.Out.WriteLine($"SUMMARY:");

            using (console.SetColorForOutcome(TestOutcome.Passed))
            {
                await console.Out.WriteAsync($"Passed: {testResults.Passed.Count}, ");
            }

            using (console.SetColorForOutcome(TestOutcome.Failed))
            {
                await console.Out.WriteAsync($"Failed: {testResults.Failed.Count}, ");
            }

            using (console.SetColorForOutcome(TestOutcome.NotExecuted))
            {
                await console.Out.WriteLineAsync($"Not run: {testResults.NotExecuted.Count}");
            }
        }
示例#4
0
        public static DbDataReader GetNewRowDataReader(DbColumn[] columns, bool includeIdentity)
        {
            object[][] rows = includeIdentity
                ? new[] { new object[] { "id", "q", "q", "q" } }
                : new[] { new object[] { "q", "q", "q" } };
            var testResultSet = new TestResultSet(columns, rows);

            return(new TestDbDataReader(new [] { testResultSet }));
        }
        private static async Task <ResultSet> GetResultSet(DbColumn[] columns, object[] row)
        {
            object[][] rows          = { row };
            var        testResultSet = new TestResultSet(columns, rows);
            var        testReader    = new TestDbDataReader(new [] { testResultSet });
            var        resultSet     = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
            await resultSet.ReadResultToEnd(testReader, CancellationToken.None);

            return(resultSet);
        }
示例#6
0
        public async Task WriteAsync(IConsole console, TestResultSet testResults)
        {
            var json = JsonConvert.SerializeObject(
                testResults,
                Formatting.Indented,
                new FileInfoJsonConverter(),
                new DirectoryInfoJsonConverter());

            await console.Out.WriteAsync(json);
        }
示例#7
0
        public static async Task <ResultSet> GetResultSet(DbColumn[] columns, bool includeIdentity, int rowCount = 1)
        {
            IEnumerable <object[]> rows = includeIdentity
                ? Enumerable.Repeat(new object[] { "id", "1", "2", "3" }, rowCount)
                : Enumerable.Repeat(new object[] { "1", "2", "3" }, rowCount);
            var testResultSet = new TestResultSet(columns, rows);
            var reader        = new TestDbDataReader(new[] { testResultSet });
            var resultSet     = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
            await resultSet.ReadResultToEnd(reader, CancellationToken.None);

            return(resultSet);
        }
示例#8
0
        public static async Task InvokeAsync(
            OutputFormat format,
            FileInfo[] file,
            DirectoryInfo[] path,
            string filter,
            bool showTestOutput,
            IConsole console = null)
        {
            var allFiles = new List <FileInfo>();

            if (file != null && file.Any())
            {
                foreach (var fileInfo in file.Where(f => f.Exists))
                {
                    allFiles.Add(fileInfo);
                }
            }
            else
            {
                foreach (var directoryInfo in path)
                {
                    if (directoryInfo.Exists)
                    {
                        allFiles.AddRange(SearchDirectory(directoryInfo.FullName));
                    }
                }
            }

            var resultSet = Create(allFiles);

            if (!string.IsNullOrWhiteSpace(filter))
            {
                var regex = new Regex($"^{filter.Replace("*", ".*")}$");

                resultSet = new TestResultSet(
                    resultSet.Where(r => regex.IsMatch(r.FullyQualifiedTestName)));
            }

            IConsoleWriter writer = null;

            switch (format)
            {
            case OutputFormat.Summary:
                writer = new SummaryWriter(showTestOutput);
                break;

            case OutputFormat.Json:
                writer = new JsonWriter();
                break;
            }

            await writer.WriteAsync(console, resultSet);
        }
        public async Task GetVerifyQuery()
        {
            // Setup: Create a row update and set the first row cell to have values
            // ... other than "1" for testing purposes (simulated select query result).
            Common.TestDbColumnsWithTableMetadata data = new Common.TestDbColumnsWithTableMetadata(false, false, 0, 0);
            var rs = await Common.GetResultSet(data.DbColumns, false);

            RowUpdate ru = new RowUpdate(0, rs, data.TableMetadata);

            object[][] rows =
            {
                new object[] { "2", "0", "0" },
            };
            var testResultSet = new TestResultSet(data.DbColumns, rows);
            var newRowReader  = new TestDbDataReader(new[] { testResultSet }, false);
            await ru.ApplyChanges(newRowReader);

            // ... Create a row delete.
            RowDelete rd           = new RowDelete(0, rs, data.TableMetadata);
            int       expectedKeys = 3;

            // If: I generate a verify command
            String verifyCommand = rd.GetVerifyScript();

            // Then:
            // ... The command should not be null
            Assert.NotNull(verifyCommand);

            // ... It should be formatted into an where script
            string regexTest = @"SELECT COUNT \(\*\) FROM (.+) WHERE (.+)";
            Regex  r         = new Regex(regexTest);
            var    m         = r.Match(verifyCommand);

            Assert.True(m.Success);

            // ... There should be a table
            string tbl = m.Groups[1].Value;

            Assert.Equal(data.TableMetadata.EscapedMultipartName, tbl);

            // ... There should be as many where components as there are keys
            string[] whereComponents = m.Groups[2].Value.Split(new[] { "AND" }, StringSplitOptions.None);
            Assert.Equal(expectedKeys, whereComponents.Length);

            // ... Mock db connection for building the command
            var mockConn = new TestSqlConnection(new[] { testResultSet });

            // If: I attempt to get a command for a simulated delete of a row with duplicates.
            // Then: The Command will throw an exception as it detects there are
            // ... 2 or more rows with the same value in the simulated query results data.
            Assert.Throws <EditDataDeleteException>(() => rd.GetCommand(mockConn));
        }
示例#10
0
        public async Task ListDatabasesOnServerForCurrentConnectionReturnsDatabaseNames()
        {
            // Result set for the query of database names
            TestDbColumn[] cols = { new TestDbColumn("name") };
            object[][]     rows =
            {
                new object[] { "master"     },
                new object[] { "model"      },
                new object[] { "msdb"       },
                new object[] { "tempdb"     },
                new object[] { "mydatabase" }
            };
            TestResultSet data = new TestResultSet(cols, rows);

            // Setup mock connection factory to inject query results
            var mockFactory = new Mock <ISqlConnectionFactory>();

            mockFactory.Setup(factory => factory.CreateSqlConnection(It.IsAny <string>()))
            .Returns(CreateMockDbConnection(new[] { data }));
            var connectionService = new ConnectionService(mockFactory.Object);

            // connect to a database instance
            string ownerUri         = "file://my/sample/file.sql";
            var    connectionResult = await
                                      connectionService
                                      .Connect(new ConnectParams()
            {
                OwnerUri   = ownerUri,
                Connection = TestObjects.GetTestConnectionDetails()
            });

            // verify that a valid connection id was returned
            Assert.NotEmpty(connectionResult.ConnectionId);

            // list databases for the connection
            ListDatabasesParams parameters = new ListDatabasesParams {
                OwnerUri = ownerUri
            };
            var listDatabasesResult = connectionService.ListDatabases(parameters);

            string[] databaseNames = listDatabasesResult.DatabaseNames;

            Assert.Equal(databaseNames.Length, 5);
            Assert.Equal(databaseNames[0], "master");
            Assert.Equal(databaseNames[1], "model");
            Assert.Equal(databaseNames[2], "msdb");
            Assert.Equal(databaseNames[3], "tempdb");
            Assert.Equal(databaseNames[4], "mydatabase");
        }
示例#11
0
        private static void WriteRow(TextWriter output, int itemsCount, int documentSize, TestResultSet result, string name)
        {
            var cols = new List<object>();
            cols.Add(name);
            cols.Add(itemsCount);
            cols.Add(documentSize);
            cols.Add(result.Read1.ItemAvgMs);
            cols.Add(result.Read2.ItemAvgMs);
            cols.Add(result.Read3.ItemAvgMs);
            cols.Add(result.Categories.Average(i => i.ItemAvgMs));
            cols.Add(result.Write.ItemAvgMs);
            cols.Add(result.CountItemsMs);

            output.WriteLine(String.Join(",", cols));
        }
 public TestResultSetDrop MapToDrop(TestResultSet resultSet)
 {
     return(new TestResultSetDrop
     {
         Source = resultSet.Source,
         Results = resultSet.Results.Select(MapToDrop).ToList(),
         Duration = resultSet.Duration,
         ExecutedTestsCount = resultSet.ExecutedTests,
         NoneCount = resultSet.None,
         PassedCount = resultSet.Passed,
         FailedCount = resultSet.Failed,
         SkippedCount = resultSet.Skipped,
         NotFoundCount = resultSet.NotFound,
     });
 }
        public void SetCellHasCorrections()
        {
            // Setup:
            // ... Generate a result set with a single binary column
            DbColumn[] cols =
            {
                new TestDbColumn
                {
                    DataType     = typeof(byte[]),
                    DataTypeName = "binary"
                }
            };
            object[][] rows          = { new object[] { new byte[] { 0x00 } } };
            var        testResultSet = new TestResultSet(cols, rows);
            var        testReader    = new TestDbDataReader(new[] { testResultSet });
            var        rs            = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());

            rs.ReadResultToEnd(testReader, CancellationToken.None).Wait();

            // ... Generate the metadata
            var etm = Common.GetStandardMetadata(cols);

            // ... Create the row update
            RowUpdate ru = new RowUpdate(0, rs, etm);

            // If: I set a cell in the newly created row to something that will be corrected
            EditUpdateCellResult eucr = ru.SetCell(0, "1000");

            // Then:
            // ... A edit cell was returned
            Assert.NotNull(eucr);
            Assert.NotNull(eucr.Cell);

            // ... The value we used won't be returned
            Assert.NotEmpty(eucr.Cell.DisplayValue);
            Assert.NotEqual("1000", eucr.Cell.DisplayValue);
            Assert.False(eucr.Cell.IsNull);

            // ... The cell should be dirty
            Assert.True(eucr.Cell.IsDirty);

            // ... The row is still dirty
            Assert.True(eucr.IsRowDirty);

            // ... There should be a cell update in the cell list
            Assert.Contains(0, ru.cellUpdates.Keys);
            Assert.NotNull(ru.cellUpdates[0]);
        }
示例#14
0
        private void TestResultHandler(object sender, TestResultEventArgs e)
        {
            var source = e.Result.TestCase.Source;

            if (_testRun.Results.Contains(source))
            {
                var testResults = _testRun.Results[source];
                testResults.Add(e.Result);
            }
            else
            {
                var resultSet = new TestResultSet(source);
                resultSet.Add(e.Result);
                _testRun.Results.Add(resultSet);
            }
        }
        public async Task SetCellHasCorrections()
        {
            // Setup:
            // ... Generate a result set with a single binary column
            DbColumn[] cols = { new TestDbColumn
                                {
                                    DataType     = typeof(byte[]),
                                    DataTypeName = "binary"
                                } };
            object[][] rows          = {};
            var        testResultSet = new TestResultSet(cols, rows);
            var        testReader    = new TestDbDataReader(new[] { testResultSet }, false);
            var        rs            = new ResultSet(0, 0, MemoryFileSystem.GetFileStreamFactory());
            await rs.ReadResultToEnd(testReader, CancellationToken.None);

            // ... Generate the metadata
            var etm = Common.GetCustomEditTableMetadata(cols);

            // ... Create the row create
            RowCreate rc = new RowCreate(100, rs, etm);

            // If: I set a cell in the newly created row to something that will be corrected
            EditUpdateCellResult eucr = rc.SetCell(0, "1000");

            // Then:
            // ... The returned value should be equal to what we provided
            Assert.NotNull(eucr);
            Assert.NotNull(eucr.Cell);
            Assert.NotEqual("1000", eucr.Cell.DisplayValue);
            Assert.False(eucr.Cell.IsNull);

            // ... The returned value should be dirty
            Assert.NotNull(eucr.Cell.IsDirty);

            // ... The row should still be dirty
            Assert.True(eucr.IsRowDirty);

            // ... There should be a cell update in the cell list
            Assert.NotNull(rc.newCells[0]);
        }
 public TestResultSetDrop(TestResultSet resultSet)
 {
     _resultSet = resultSet;
 }