Beispiel #1
0
        /// <summary>
        /// Repeatedly execute queries to stress test the query execution service.
        /// </summary>
        //[Fact]
        public async Task TestQueryExecutionService()
        {
            const string queryToRun = "SELECT * FROM sys.all_objects GO " +
                                      "SELECT * FROM sys.objects GO " +
                                      "SELECT * FROM sys.tables GO " +
                                      "SELECT COUNT(*) FROM sys.objects";

            using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
                using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                {
                    // Connect
                    bool connected = await testService.Connect(TestServerType.OnPrem, string.Empty, queryTempFile.FilePath);

                    Assert.True(connected, "Connection is successful");

                    // Run queries repeatedly
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    while (stopwatch.Elapsed < TimeSpan.FromMinutes(60))
                    {
                        var queryResult = await testService.RunQueryAndWaitToComplete(queryTempFile.FilePath, queryToRun, 10000);

                        Assert.NotNull(queryResult);
                        Assert.NotNull(queryResult.BatchSummaries);
                        Assert.NotEmpty(queryResult.BatchSummaries);
                        Assert.NotNull(queryResult.BatchSummaries[0].ResultSetSummaries);
                        Assert.NotNull(queryResult.BatchSummaries[1].ResultSetSummaries);
                        Assert.NotNull(queryResult.BatchSummaries[2].ResultSetSummaries);
                        Assert.NotNull(queryResult.BatchSummaries[3].ResultSetSummaries);

                        Assert.NotNull(await testService.ExecuteSubset(queryTempFile.FilePath, 0, 0, 0, 7));
                        Assert.NotNull(await testService.ExecuteSubset(queryTempFile.FilePath, 1, 0, 0, 7));
                        Assert.NotNull(await testService.ExecuteSubset(queryTempFile.FilePath, 2, 0, 0, 7));
                        Assert.NotNull(await testService.ExecuteSubset(queryTempFile.FilePath, 3, 0, 0, 1));

                        Thread.Sleep(500);
                    }

                    await testService.Disconnect(queryTempFile.FilePath);
                }
        }
        public async Task HoverTest()
        {
            using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
                using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                {
                    string query = "SELECT * FROM sys.objects";

                    testService.WriteToFile(queryTempFile.FilePath, query);

                    DidOpenTextDocumentNotification openParams = new DidOpenTextDocumentNotification
                    {
                        TextDocument = new TextDocumentItem
                        {
                            Uri        = queryTempFile.FilePath,
                            LanguageId = "enu",
                            Version    = 1,
                            Text       = query
                        }
                    };

                    await testService.RequestOpenDocumentNotification(openParams);

                    Thread.Sleep(500);

                    bool connected = await testService.Connect(TestServerType.OnPrem, queryTempFile.FilePath);

                    Assert.True(connected, "Connection was not successful");

                    Thread.Sleep(10000);

                    Hover hover = await testService.RequestHover(queryTempFile.FilePath, query, 0, 15);

                    Assert.True(hover != null, "Hover tooltop is null");

                    await testService.Disconnect(queryTempFile.FilePath);
                }
        }
        public async Task DiagnosticsTests()
        {
            using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
                using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                {
                    bool connected = await testService.Connect(TestServerType.OnPrem, queryTempFile.FilePath);

                    Assert.True(connected, "Connection was not successful");

                    Thread.Sleep(500);

                    string query = "SELECT *** FROM sys.objects";

                    DidOpenTextDocumentNotification openParams = new DidOpenTextDocumentNotification
                    {
                        TextDocument = new TextDocumentItem
                        {
                            Uri        = queryTempFile.FilePath,
                            LanguageId = "enu",
                            Version    = 1,
                            Text       = query
                        }
                    };

                    await testService.RequestOpenDocumentNotification(openParams);

                    Thread.Sleep(100);

                    var contentChanges = new TextDocumentChangeEvent[1];
                    contentChanges[0] = new TextDocumentChangeEvent
                    {
                        Range = new Range
                        {
                            Start = new Position
                            {
                                Line      = 0,
                                Character = 5
                            },
                            End = new Position
                            {
                                Line      = 0,
                                Character = 6
                            }
                        },
                        RangeLength = 1,
                        Text        = "z"
                    };

                    DidChangeTextDocumentParams changeParams = new DidChangeTextDocumentParams()
                    {
                        ContentChanges = contentChanges,
                        TextDocument   = new VersionedTextDocumentIdentifier()
                        {
                            Version = 2,
                            Uri     = queryTempFile.FilePath
                        }
                    };

                    await testService.RequestChangeTextDocumentNotification(changeParams);

                    Thread.Sleep(100);

                    contentChanges[0] = new TextDocumentChangeEvent
                    {
                        Range = new Range
                        {
                            Start = new Position
                            {
                                Line      = 0,
                                Character = 5
                            },
                            End = new Position
                            {
                                Line      = 0,
                                Character = 6
                            }
                        },
                        RangeLength = 1,
                        Text        = "t"
                    };

                    changeParams = new DidChangeTextDocumentParams
                    {
                        ContentChanges = contentChanges,
                        TextDocument   = new VersionedTextDocumentIdentifier
                        {
                            Version = 3,
                            Uri     = queryTempFile.FilePath
                        }
                    };

                    await testService.RequestChangeTextDocumentNotification(changeParams);

                    Thread.Sleep(2500);

                    await testService.Disconnect(queryTempFile.FilePath);
                }
        }
Beispiel #4
0
        /// <summary>
        /// Simulate typing by a user to stress test the language service
        /// </summary>
        //[Fact]
        public async Task TestLanguageService()
        {
            const string textToType = "SELECT * FROM sys.objects GO " +
                                      "CREATE TABLE MyTable(" +
                                      "FirstName CHAR," +
                                      "LastName CHAR," +
                                      "DateOfBirth DATETIME," +
                                      "CONSTRAINT MyTableConstraint UNIQUE (FirstName, LastName, DateOfBirth)) GO " +
                                      "INSERT INTO MyTable (FirstName, LastName, DateOfBirth) VALUES ('John', 'Doe', '19800101') GO " +
                                      "SELECT * FROM MyTable GO " +
                                      "ALTER TABLE MyTable DROP CONSTRAINT MyTableConstraint GO " +
                                      "DROP TABLE MyTable GO ";


            using (SelfCleaningTempFile queryTempFile = new SelfCleaningTempFile())
                using (TestServiceDriverProvider testService = new TestServiceDriverProvider())
                {
                    // Connect
                    bool connected = await testService.Connect(TestServerType.OnPrem, string.Empty, queryTempFile.FilePath);

                    Assert.True(connected, "Connection was not successful");

                    Thread.Sleep(10000); // Wait for intellisense to warm up

                    // Simulate typing
                    Stopwatch stopwatch = new Stopwatch();
                    stopwatch.Start();
                    int version = 1;
                    while (stopwatch.Elapsed < TimeSpan.FromMinutes(60))
                    {
                        for (int i = 0; i < textToType.Length; i++)
                        {
                            System.IO.File.WriteAllText(queryTempFile.FilePath, textToType.Substring(0, i + 1));

                            var contentChanges = new TextDocumentChangeEvent[1];
                            contentChanges[0] = new TextDocumentChangeEvent()
                            {
                                Range = new Range()
                                {
                                    Start = new Position()
                                    {
                                        Line      = 0,
                                        Character = i
                                    },
                                    End = new Position()
                                    {
                                        Line      = 0,
                                        Character = i
                                    }
                                },
                                RangeLength = 1,
                                Text        = textToType.Substring(i, 1)
                            };

                            DidChangeTextDocumentParams changeParams = new DidChangeTextDocumentParams()
                            {
                                ContentChanges = contentChanges,
                                TextDocument   = new VersionedTextDocumentIdentifier()
                                {
                                    Version = ++version,
                                    Uri     = queryTempFile.FilePath
                                }
                            };

                            await testService.RequestChangeTextDocumentNotification(changeParams);

                            Thread.Sleep(50);

                            // If we just typed a space, request/resolve completion
                            if (textToType[i] == ' ')
                            {
                                var completions = await testService.RequestCompletion(queryTempFile.FilePath, textToType.Substring(0, i + 1), 0, i + 1);

                                Assert.True(completions != null && completions.Length > 0, "Completion items list was null or empty");

                                Thread.Sleep(50);

                                var item = await testService.RequestResolveCompletion(completions[0]);

                                Assert.NotNull(item);
                            }
                        }

                        // Clear the text document
                        System.IO.File.WriteAllText(queryTempFile.FilePath, "");

                        var contentChanges2 = new TextDocumentChangeEvent[1];
                        contentChanges2[0] = new TextDocumentChangeEvent()
                        {
                            Range = new Range()
                            {
                                Start = new Position()
                                {
                                    Line      = 0,
                                    Character = 0
                                },
                                End = new Position()
                                {
                                    Line      = 0,
                                    Character = textToType.Length - 1
                                }
                            },
                            RangeLength = textToType.Length,
                            Text        = ""
                        };

                        DidChangeTextDocumentParams changeParams2 = new DidChangeTextDocumentParams()
                        {
                            ContentChanges = contentChanges2,
                            TextDocument   = new VersionedTextDocumentIdentifier()
                            {
                                Version = ++version,
                                Uri     = queryTempFile.FilePath
                            }
                        };

                        await testService.RequestChangeTextDocumentNotification(changeParams2);
                    }

                    await testService.Disconnect(queryTempFile.FilePath);
                }
        }