private IQbservable <City> CreateQbservable() { var context = new TestableDbProvider(TestParameters.KsqlDBUrl); context.KSqldbProviderMock.Setup(c => c.Run <int>(It.IsAny <object>(), It.IsAny <CancellationToken>())).Returns(GetTestValues); context.KSqldbProviderMock.Setup(c => c.Run <long>(It.IsAny <object>(), It.IsAny <CancellationToken>())).Returns(GetDecimalTestValues); return(context.CreateQueryStream <City>()); }
public void ToObservable_QueryShouldBeDeferred_KSqldbProviderRunWasNotCalled() { //Arrange var context = new TestableDbProvider(TestParameters.KsqlDBUrl); var query = context.CreateQueryStream <string>(); //Act var observable = query.ToObservable(); //Assert observable.Should().NotBeNull(); context.KSqldbProviderMock.Verify(c => c.Run <string>(It.IsAny <object>(), It.IsAny <CancellationToken>()), Times.Never); }
public async Task ToAsyncEnumerable_Query_KSqldbProviderRunWasCalled() { //Arrange var context = new TestableDbProvider(TestParameters.KsqlDBUrl); context.KSqldbProviderMock.Setup(c => c.Run <string>(It.IsAny <object>(), It.IsAny <CancellationToken>())) .Returns(GetTestValues); var query = context.CreateQueryStream <string>(); //Act var asyncEnumerable = query.ToAsyncEnumerable(); //Assert context.KSqldbProviderMock.Verify(c => c.Run <string>(It.IsAny <QueryStreamParameters>(), It.IsAny <CancellationToken>()), Times.Once); await asyncEnumerable.GetAsyncEnumerator().DisposeAsync(); }
public void WhereIsNull_BuildKSql_PrintsQuery() { //Arrange var context = new TestableDbProvider(TestParameters.KsqlDBUrl); var grouping = context.CreateQueryStream <Click>() .Where(c => c.IP_ADDRESS == null) .Select(c => new { c.IP_ADDRESS, c.URL, c.TIMESTAMP }); //Act var ksql = grouping.ToQueryString(); //Assert string expectedKSql = @"SELECT IP_ADDRESS, URL, TIMESTAMP FROM Clicks WHERE IP_ADDRESS IS NULL EMIT CHANGES;"; ksql.Should().BeEquivalentTo(expectedKSql); }
public void ToObservable_DisposeSubscription() { //Arrange CancellationToken cancellationToken = default; var context = new TestableDbProvider(TestParameters.KsqlDBUrl); context.KSqldbProviderMock.Setup(c => c.Run <string>(It.IsAny <object>(), It.IsAny <CancellationToken>())) .Callback <object, CancellationToken>((par, ct) => { cancellationToken = ct; }) .Returns(GetTestValues); var query = context.CreateQueryStream <string>(); //Act query.ToObservable().Subscribe().Dispose(); //Assert cancellationToken.IsCancellationRequested.Should().BeTrue(); }
public void GroupByCompoundKey_BuildKSql_PrintsQuery() { //Arrange var context = new TestableDbProvider(TestParameters.KsqlDBUrl); //https://kafka-tutorials.confluent.io/finding-distinct-events/ksql.html var grouping = context.CreateQueryStream <Click>() .GroupBy(c => new { c.IP_ADDRESS, c.URL, c.TIMESTAMP }) .WindowedBy(new TimeWindows(Duration.OfMinutes(2))) .Having(c => c.Count(g => c.Key.IP_ADDRESS) == 1) .Select(g => new { g.Key.IP_ADDRESS, g.Key.URL, g.Key.TIMESTAMP }) .Take(3); //Act var ksql = grouping.ToQueryString(); //Assert string expectedKSql = @"SELECT IP_ADDRESS, URL, TIMESTAMP FROM Clicks WINDOW TUMBLING (SIZE 2 MINUTES) GROUP BY IP_ADDRESS, URL, TIMESTAMP HAVING COUNT(IP_ADDRESS) = 1 EMIT CHANGES LIMIT 3;"; ksql.Should().BeEquivalentTo(expectedKSql); }
private IQbservable <Location> CreateStreamSource() { var context = new TestableDbProvider(TestParameters.KsqlDBUrl); return(context.CreateQueryStream <Location>()); }