public void MoveNext_MultipleCallsWithoutAwait_ThrowError() { // Arrange var httpClient = TestHelpers.CreateTestClient(request => { var stream = new SyncPointMemoryStream(); var content = new StreamContent(stream); return(Task.FromResult(ResponseUtils.CreateResponse(HttpStatusCode.OK, content))); }); var call = new GrpcCall <HelloRequest, HelloReply>(TestHelpers.ServiceMethod, new CallOptions(), SystemClock.Instance, NullLoggerFactory.Instance); call.StartServerStreaming(httpClient, new HelloRequest()); // Act var moveNextTask1 = call.ClientStreamReader !.MoveNext(CancellationToken.None); var moveNextTask2 = call.ClientStreamReader.MoveNext(CancellationToken.None); // Assert Assert.IsFalse(moveNextTask1.IsCompleted); var ex = Assert.ThrowsAsync <InvalidOperationException>(async() => await moveNextTask2.DefaultTimeout()); Assert.AreEqual("Cannot read next message because the previous read is in progress.", ex.Message); }
public async Task MoveNext_TokenCanceledDuringCall_ThrowError() { // Arrange var cts = new CancellationTokenSource(); var httpClient = ClientTestHelpers.CreateTestClient(request => { var stream = new SyncPointMemoryStream(); var content = new StreamContent(stream); return(Task.FromResult(ResponseUtils.CreateResponse(HttpStatusCode.OK, content))); }); var channel = GrpcChannel.ForAddress(httpClient.BaseAddress, new GrpcChannelOptions { HttpClient = httpClient }); var call = new GrpcCall <HelloRequest, HelloReply>(ClientTestHelpers.ServiceMethod, new CallOptions(), channel); call.StartServerStreaming(new HelloRequest()); // Act var moveNextTask1 = call.ClientStreamReader !.MoveNext(cts.Token); // Assert Assert.IsFalse(moveNextTask1.IsCompleted); cts.Cancel(); var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => moveNextTask1).DefaultTimeout(); Assert.AreEqual(StatusCode.Cancelled, ex.StatusCode); }
public void MoveNext_TokenCanceledDuringCall_ThrowError() { // Arrange var cts = new CancellationTokenSource(); var httpClient = TestHelpers.CreateTestClient(request => { var stream = new SyncPointMemoryStream(); var content = new StreamContent(stream); return(Task.FromResult(ResponseUtils.CreateResponse(HttpStatusCode.OK, content))); }); var call = new GrpcCall <HelloRequest, HelloReply>(TestHelpers.ServiceMethod, new CallOptions(), SystemClock.Instance, NullLoggerFactory.Instance); call.StartServerStreaming(httpClient, new HelloRequest()); // Act var moveNextTask1 = call.ClientStreamReader !.MoveNext(cts.Token); // Assert Assert.IsFalse(moveNextTask1.IsCompleted); cts.Cancel(); var ex = Assert.ThrowsAsync <RpcException>(async() => await moveNextTask1.DefaultTimeout()); Assert.AreEqual(StatusCode.Cancelled, ex.StatusCode); }
public async Task MoveNext_MultipleCallsWithoutAwait_ThrowError() { // Arrange var httpClient = ClientTestHelpers.CreateTestClient(request => { var stream = new SyncPointMemoryStream(); var content = new StreamContent(stream); return(Task.FromResult(ResponseUtils.CreateResponse(HttpStatusCode.OK, content))); }); var channel = GrpcChannel.ForAddress(httpClient.BaseAddress, new GrpcChannelOptions { HttpClient = httpClient }); var call = new GrpcCall <HelloRequest, HelloReply>(ClientTestHelpers.ServiceMethod, new CallOptions(), channel); call.StartServerStreaming(new HelloRequest()); // Act var moveNextTask1 = call.ClientStreamReader !.MoveNext(CancellationToken.None); var moveNextTask2 = call.ClientStreamReader.MoveNext(CancellationToken.None); // Assert Assert.IsFalse(moveNextTask1.IsCompleted); var ex = await ExceptionAssert.ThrowsAsync <InvalidOperationException>(() => moveNextTask2).DefaultTimeout(); Assert.AreEqual("Can't read the next message because the previous read is still in progress.", ex.Message); }