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