public async Task ExecuteQueryAsync_WhenCalled_ThanReturnCorrectValues() { // Arrange var queryClientMock = new Mock <ICslQueryProvider>(); var adminClientMock = new Mock <ICslAdminProvider>(); var loggerMock = new Mock <ILogger <KustoQueryExecutor> >().Object; Metrics metricsHistograms = Metrics.Create(GetMockTelemetryClient()); var expectedDataReaderMock = new Mock <IDataReader>(); var queryData = new QueryData("test command text", "test index name"); queryClientMock.Setup(client => client.ExecuteQueryAsync( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <ClientRequestProperties>())) .Returns(Task.FromResult(expectedDataReaderMock.Object)); KustoQueryExecutor kustoQueryExecutor = new KustoQueryExecutor(queryClientMock.Object, adminClientMock.Object, loggerMock, metricsHistograms); RequestContext requestContext = new RequestContext { CorrelationId = Guid.Empty }; // Act var(timeTaken, dataReader) = await kustoQueryExecutor.ExecuteQueryAsync(queryData, requestContext); // Assert Assert.IsTrue(timeTaken.Ticks > 0); Assert.AreEqual(expectedDataReaderMock.Object, dataReader); }
public async Task ExecuteControlCommandAsync_WhenCalled_ThenReturnDataReader() { // Arrange var queryClientMock = new Mock <ICslQueryProvider>(); var adminClientMock = new Mock <ICslAdminProvider>(); var loggerMock = new Mock <ILogger <KustoQueryExecutor> >().Object; var metricsHistograms = new Metrics(); var expectedDataReaderMock = new Mock <IDataReader>(); adminClientMock.Setup(client => client.ExecuteControlCommandAsync( It.IsAny <string>(), It.IsAny <string>(), It.IsAny <ClientRequestProperties>())) .Returns(Task.FromResult(expectedDataReaderMock.Object)); KustoQueryExecutor kustoQueryExecutor = new KustoQueryExecutor(queryClientMock.Object, adminClientMock.Object, loggerMock, metricsHistograms); RequestContext requestContext = new RequestContext { CorrelationId = Guid.Empty }; // Act var result = await kustoQueryExecutor.ExecuteControlCommandAsync("test command", requestContext); // Assert Assert.IsNotNull(result); Assert.AreEqual(expectedDataReaderMock.Object, result); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { ConfigureTelemetryServices(services); services.AddControllers(); services.AddSingleton(Log.Logger); services.AddSingleton <IConnectionDetails, KustoConnectionDetails>( s => KustoConnectionDetailsFactory.MakeFromConfiguration(Configuration as IConfigurationRoot)); services.AddSingleton( s => MetadataConnectionDetailsFactory.MakeFromConfiguration(Configuration as IConfigurationRoot)); services.AddSingleton <IQueryExecutor, KustoQueryExecutor>( s => { var conn = KustoQueryExecutor .CreateKustoConnectionStringBuilder(s.GetRequiredService <IConnectionDetails>()); return(new KustoQueryExecutor( KustoClientFactory.CreateCslQueryProvider(conn), KustoClientFactory.CreateCslAdminProvider(conn), s.GetRequiredService <ILogger <KustoQueryExecutor> >(), s.GetRequiredService <Telemetry.Metrics>())); }); services.AddHttpContextAccessor(); services.AddScoped( s => new RequestContext(s.GetRequiredService <IHttpContextAccessor>())); services.AddTransient <ITranslator, ElasticQueryTranslator>(); services.AddTransient <IKustoDataAccess, KustoDataAccess>( s => new KustoDataAccess( s.GetRequiredService <IQueryExecutor>(), s.GetRequiredService <RequestContext>(), s.GetRequiredService <ILogger <KustoDataAccess> >())); services.AddTransient <ISchemaRetrieverFactory, SchemaRetrieverFactory>( s => new SchemaRetrieverFactory( s.GetRequiredService <ILogger <SchemaRetriever> >(), s.GetRequiredService <IKustoDataAccess>())); services.AddTransient <IVisitor, ElasticSearchDSLVisitor>( s => new ElasticSearchDSLVisitor( s.GetRequiredService <ISchemaRetrieverFactory>(), s.GetRequiredService <IConnectionDetails>().DefaultDatabaseName)); services.AddTransient <IResponseParser, KustoResponseParser>( s => new KustoResponseParser( s.GetRequiredService <ILogger <KustoResponseParser> >(), bool.Parse((Configuration as IConfigurationRoot)["outputBackendQuery"]), s.GetRequiredService <Telemetry.Metrics>())); // use this http client factory to issue requests to the metadata elastic instance services.AddHttpClient(MetadataController.ElasticMetadataClientName, (svcProvider, elasticClient) => { var metadataConnectionDetails = svcProvider.GetRequiredService <MetadataConnectionDetails>(); elasticClient.BaseAddress = new Uri(metadataConnectionDetails.MetadataEndpoint); }); // Add a health/liveness service services.AddHealthChecks(); // required on ASP.NET Core 3 https://docs.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-2.2&tabs=visual-studio#jsonnet-support services.AddMvcCore().AddNewtonsoftJson(); }