Exemple #1
0
        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);
        }
Exemple #2
0
        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);
        }
Exemple #3
0
        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);
        }
Exemple #4
0
        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);
        }