[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); }
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)); }
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"))); }
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); }
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); }
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"); }
[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>(); } }
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> >(); }