コード例 #1
0
        Next_calls_handlers_HandleQueryNextState_when_results_are_processed_but_more_results_are_available()
        {
            var response = new QueryResponse();

            response.Results.Add(new QueryResultBytes()
            {
                ResultBytes =
                    new KV()
                {
                    Key       = "key",
                    Namespace = "namespace",
                    Value     = "value".ToByteString()
                }.ToByteString()
            });

            var handlerMock = new Mock <IHandler>();

            handlerMock.Setup(m => m.HandleQueryStateNext("Id", "ChannelId", "TxId"))
            .ReturnsAsync(response);

            var iterator = new StateQueryIterator(handlerMock.Object, "ChannelId", "TxId",
                                                  new QueryResponse()
            {
                HasMore = true, Id = "Id"
            });

            var result = await iterator.Next();

            handlerMock.VerifyAll();
            result.Value.Key.Should().Be("key");
            result.Value.Namespace.Should().Be("namespace");
            result.Value.Value.ToStringUtf8().Should().Be("value");
        }
コード例 #2
0
        public async void GetStateByRange_invokes_the_handlers_GetStateByRange_handler()
        {
            var iteratorMock = new StateQueryIterator(null, string.Empty, string.Empty, null);
            var handlerMock  = new Mock <IHandler>();

            handlerMock.Setup(m =>
                              m.HandleGetStateByRange(string.Empty, "startKey", "endKey", "ChannelId", "TxId"))
            .ReturnsAsync(iteratorMock);

            handlerMock.Setup(m =>
                              m.HandleGetStateByRange(string.Empty, "\x01", "endKey", "ChannelId", "TxId"))
            .ReturnsAsync(iteratorMock);

            var stub = CreateValidChaincodeStubWithHandler(handlerMock.Object);

            var result = await stub.GetStateByRange("startKey", "endKey");

            result.Should().BeSameAs(iteratorMock);

            result = await stub.GetStateByRange("", "endKey");

            result.Should().BeSameAs(iteratorMock);

            result = await stub.GetStateByRange(null, "endKey");

            result.Should().BeSameAs(iteratorMock);

            handlerMock.Verify(m => m.HandleGetStateByRange(string.Empty, "startKey", "endKey", "ChannelId", "TxId"),
                               Times.Once);
            handlerMock.Verify(m => m.HandleGetStateByRange(string.Empty, "\x01", "endKey", "ChannelId", "TxId"),
                               Times.Exactly(2));
        }
コード例 #3
0
        public async void Next_emits_OnData_when_data_is_available()
        {
            var response = new QueryResponse()
            {
                HasMore = true
            };

            response.Results.AddRange(new[]
            {
                new QueryResultBytes()
                {
                    ResultBytes = new KV()
                    {
                        Key       = "key1",
                        Namespace = "namespace1",
                        Value     = "foo".ToByteString()
                    }
                    .ToByteString()
                },
                new QueryResultBytes()
                {
                    ResultBytes = new KV()
                    {
                        Key       = "key2",
                        Namespace = "namespace2",
                        Value     = "bar".ToByteString()
                    }
                    .ToByteString()
                }
            });

            QueryResult <KV> queryResult = null;

            var iterator = new StateQueryIterator(null, null, null, response);

            iterator.Data += result => queryResult = result;

            var iteratorResult = await iterator.Next();

            iteratorResult.Should().NotBeNull();
            queryResult.Should().NotBeNull();
            iteratorResult.Should().BeSameAs(queryResult);

            queryResult.Value.Key.Should().Be("key1");
            queryResult.Value.Namespace.Should().Be("namespace1");
            queryResult.Value.Value.ToStringUtf8().Should().Be("foo");

            iteratorResult = await iterator.Next();

            iteratorResult.Should().NotBeNull();
            queryResult.Should().NotBeNull();
            iteratorResult.Should().BeSameAs(queryResult);

            queryResult.Value.Key.Should().Be("key2");
            queryResult.Value.Namespace.Should().Be("namespace2");
            queryResult.Value.Value.ToStringUtf8().Should().Be("bar");
        }
コード例 #4
0
        public async void Next_emits_OnEnd_when_no_more_result_sets_are_available()
        {
            var eventDispatched = false;

            var iterator = new StateQueryIterator(null, null, null, new QueryResponse()
            {
                HasMore = false
            });

            iterator.End += () => eventDispatched = true;

            var result = await iterator.Next();

            eventDispatched.Should().BeTrue();
            result.Done.Should().BeTrue();
        }
コード例 #5
0
        Next_throws_an_exception_on_next_if_getting_the_next_query_state_throws_and_no_error_handler_is_assigned()
        {
            var handlerMock = new Mock <IHandler>();

            handlerMock.Setup(m => m.HandleQueryStateNext(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Throws(new Exception("unittest"));

            var iterator = new StateQueryIterator(handlerMock.Object, null, null, new QueryResponse()
            {
                HasMore = true
            });

            iterator.Awaiting(i => i.Next())
            .Should().Throw <Exception>()
            .WithMessage("unittest");
        }
コード例 #6
0
        public async void GetQueryResult_invokes_the_handlers_GetQueryResult_handler()
        {
            var iteratorMock = new StateQueryIterator(null, string.Empty, string.Empty, null);
            var handlerMock  = new Mock <IHandler>();

            handlerMock.Setup(m =>
                              m.HandleGetQueryResult(string.Empty, "query", "ChannelId", "TxId"))
            .ReturnsAsync(iteratorMock);

            var stub = CreateValidChaincodeStubWithHandler(handlerMock.Object);

            var result = await stub.GetQueryResult("query");

            handlerMock.VerifyAll();
            result.Should().BeSameAs(iteratorMock);
        }
コード例 #7
0
        Next_emits_error_on_next_if_getting_the_next_query_state_throws_and_an_error_handler_is_assigned()
        {
            var handlerMock = new Mock <IHandler>();

            handlerMock.Setup(m => m.HandleQueryStateNext(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <string>()))
            .Throws(new Exception("unittest"));

            var iterator = new StateQueryIterator(handlerMock.Object, null, null, new QueryResponse()
            {
                HasMore = true
            });

            Exception exception = null;

            iterator.Error += ex => exception = ex;

            iterator.Awaiting(i => i.Next())
            .Should().NotThrow();

            exception.Should().NotBeNull();
            exception.Message.Should().Be("unittest");
        }
コード例 #8
0
        public async void Close_calls_the_handlers_HandleQueryCloseState()
        {
            var handlerMock = new Mock <IHandler>();

            handlerMock.Setup(m => m.HandleQueryCloseState("Id", "ChannelId", "TxId"))
            .ReturnsAsync(new QueryResponse()
            {
                HasMore = false, Id = "Id"
            });

            var response = new QueryResponse()
            {
                Id = "Id"
            };

            var iterator = new StateQueryIterator(handlerMock.Object, "ChannelId", "TxId", response);

            var result = await iterator.Close();

            handlerMock.VerifyAll();
            result.Id.Should().Be("Id");
        }