예제 #1
0
        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>());
        }
예제 #2
0
        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);
        }
예제 #3
0
        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();
        }
예제 #4
0
        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);
        }
예제 #5
0
        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();
        }
예제 #6
0
        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);
        }
예제 #7
0
        private IQbservable <Location> CreateStreamSource()
        {
            var context = new TestableDbProvider(TestParameters.KsqlDBUrl);

            return(context.CreateQueryStream <Location>());
        }