Example #1
0
        [InlineData("ushort testVar = 123;", (long)123)]                  // ushort
        public async Task Shared_variable_can_be_used_to_parameterize_a_kql_query(string csharpVariableDeclaration, object expectedValue)
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            await kernel.SendAsync(new SubmitCode(csharpVariableDeclaration));

            var code = @"
#!kql-KustoHelp
#!share --from csharp testVar
print testVar";

            result = await kernel.SendAsync(new SubmitCode(code));

            var events = result.KernelEvents.ToSubscribedList();

            events
            .ShouldDisplayTabularDataResourceWhich()
            .Data
            .Should()
            .ContainSingle()
            .Which
            .Should()
            .ContainValue(expectedValue);
        }
Example #2
0
        public async Task It_can_connect_and_query_data()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync(@"
#!kql-KustoHelp
StormEvents | take 10
            ");

            var events = result.KernelEvents.ToSubscribedList();

            events.Should()
            .NotContainErrors()
            .And
            .ContainSingle <DisplayedValueProduced>(e =>
                                                    e.FormattedValues.Any(f => f.MimeType == PlainTextFormatter.MimeType));

            events.Should()
            .ContainSingle <DisplayedValueProduced>(e =>
                                                    e.FormattedValues.Any(f => f.MimeType == HtmlFormatter.MimeType));
        }
Example #3
0
        public async Task Empty_results_are_displayed_correctly()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync($@"
#!kql-KustoHelp
StormEvents | take 0
");

            var events = result.KernelEvents.ToSubscribedList();

            events.Should()
            .NotContainErrors()
            .And
            .ContainSingle <DisplayedValueProduced>(e =>
                                                    e.FormattedValues.Any(f => f.MimeType == PlainTextFormatter.MimeType && f.Value.ToString().StartsWith("Info")));
        }
Example #4
0
        public async Task query_produces_expected_formatted_values()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync($@"
#!kql-KustoHelp
StormEvents | take 10
");

            var events = result.KernelEvents.ToSubscribedList();

            events.Should().NotContainErrors();

            events.Should()
            .ContainSingle <DisplayedValueProduced>(fvp => fvp.Value is DataExplorer <TabularDataResource>)
            .Which
            .FormattedValues.Select(fv => fv.MimeType)
            .Should()
            .BeEquivalentTo(HtmlFormatter.MimeType, CsvFormatter.MimeType);
        }
Example #5
0
        public async Task Field_types_are_deserialized_correctly()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync($@"
#!kql-KustoHelp
StormEvents | take 10
");

            var events = result.KernelEvents.ToSubscribedList();

            events.ShouldDisplayTabularDataResourceWhich()
            .Schema
            .Fields
            .Should()
            .ContainSingle(f => f.Name == "StartTime")
            .Which
            .Type
            .Should()
            .Be(TableSchemaFieldType.DateTime);
        }
Example #6
0
        public async Task sending_query_to_kusto_will_generate_suggestions()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync(@"
#!kql
StormEvents | take 10
");

            var events = result.KernelEvents.ToSubscribedList();

            events.Should()
            .NotContainErrors()
            .And
            .ContainSingle <DisplayedValueProduced>(e =>
                                                    e.FormattedValues.Any(f => f.MimeType == HtmlFormatter.MimeType))
            .Which.FormattedValues.Single(f => f.MimeType == HtmlFormatter.MimeType)
            .Value
            .Should()
            .Contain("#!kql-KustoHelp")
            .And
            .Contain(" tableName | take 10");
        }
Example #7
0
        [InlineData("string testVar = \"tricky\\\"string\";", false, false)] // string with ", bug https://github.com/microsoft/sqltoolsservice/issues/1271
        public async Task Invalid_shared_variables_are_handled_correctly(string csharpVariableDeclaration, bool isCSharpError = false, bool expectInvalidOperationException = true)
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            var cSharpResult = await kernel.SendAsync(new SubmitCode(csharpVariableDeclaration));

            var cSharpEvents = cSharpResult.KernelEvents.ToSubscribedList();

            if (isCSharpError)
            {
                cSharpEvents
                .Should()
                .ContainSingle <CommandFailed>();
            }


            var code = @"
#!kql-KustoHelp
#!share --from csharp testVar
print testVar";

            result = await kernel.SendAsync(new SubmitCode(code));

            var events = result.KernelEvents.ToSubscribedList();

            var assertion = events
                            .Should()
                            .ContainSingle <CommandFailed>();
            Type t = typeof(StreamJsonRpc.RemoteInvocationException);

            if (!isCSharpError && expectInvalidOperationException)
            {
                // Errors that occurred in the csharp block will result in this failing, but not with an inner exception
                assertion
                .Which
                .Exception
                .Should()
                .BeOfType <InvalidOperationException>();
            }
        }
Example #8
0
        public async Task It_can_store_result_set_with_a_name()
        {
            var cluster = KqlFactAttribute.GetClusterForTests();

            using var kernel = await CreateKernel();

            var result = await kernel.SubmitCodeAsync(
                $"#!connect kql --kernel-name KustoHelp --cluster \"{cluster}\" --database \"Samples\"");

            result.KernelEvents
            .ToSubscribedList()
            .Should()
            .NotContainErrors();

            result = await kernel.SubmitCodeAsync(@"
#!kql-KustoHelp --name my_data_result
StormEvents | take 10
            ");

            var kqlKernel = kernel.FindKernel("kql-KustoHelp") as ISupportGetValue;

            kqlKernel.TryGetValue("my_data_result", out object variable).Should().BeTrue();
            variable.Should().BeAssignableTo <IEnumerable <TabularDataResource> >();
        }