Beispiel #1
0
        public async Task SendValidRequest_ServerAbort_ClientThrowsAbortException()
        {
            // Arrage
            SetExpectedErrorsFilter(r =>
            {
                if (r.EventId.Name == "RpcConnectionError" &&
                    r.Message == "Error status code 'Aborted' raised.")
                {
                    return(true);
                }

                if (r.EventId.Name == "GrpcStatusError" &&
                    r.Message == "Call failed with gRPC error status. Status code: 'Aborted', Message: 'Aborted from server side.'.")
                {
                    return(true);
                }

                return(false);
            });

            var httpClient = CreateGrpcWebClient();
            var channel    = GrpcChannel.ForAddress(httpClient.BaseAddress, new GrpcChannelOptions
            {
                HttpClient    = httpClient,
                LoggerFactory = LoggerFactory
            });

            var client = new EchoService.EchoServiceClient(channel);

            // Act
            var call = client.ServerStreamingEchoAbort(new ServerStreamingEchoRequest
            {
                Message         = "test",
                MessageCount    = 3,
                MessageInterval = TimeSpan.FromMilliseconds(10).ToDuration()
            });

            // Assert
            Assert.IsTrue(await call.ResponseStream.MoveNext(CancellationToken.None).DefaultTimeout());
            Assert.AreEqual("test", call.ResponseStream.Current.Message);

            var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => call.ResponseStream.MoveNext(CancellationToken.None));

            Assert.AreEqual(StatusCode.Aborted, ex.StatusCode);
            Assert.AreEqual("Aborted from server side.", ex.Status.Detail);

            Assert.AreEqual(StatusCode.Aborted, call.GetStatus().StatusCode);
        }
Beispiel #2
0
        private async Task GrpcWebServerStreamingAbortAsync(EchoService.EchoServiceClient client)
        {
            var call = client.ServerStreamingEchoAbort(new ServerStreamingEchoRequest
            {
                Message         = "test",
                MessageCount    = 5,
                MessageInterval = Google.Protobuf.WellKnownTypes.TimeExtensions.ToDuration(TimeSpan.FromMilliseconds(100))
            });

            try
            {
                await foreach (var message in call.ResponseStream.ReadAllAsync())
                {
                }
                Assert.Fail();
            }
            catch (RpcException ex)
            {
                Assert.AreEqual(StatusCode.Aborted, ex.StatusCode);
            }
        }
Beispiel #3
0
        public async Task SendValidRequest_ServerAbort_ClientThrowsAbortException()
        {
            // Arrage
            var httpClient = CreateGrpcWebClient();
            var channel    = GrpcChannel.ForAddress(httpClient.BaseAddress !, new GrpcChannelOptions
            {
                HttpClient    = httpClient,
                LoggerFactory = LoggerFactory
            });

            var client = new EchoService.EchoServiceClient(channel);

            // Act
            var call = client.ServerStreamingEchoAbort(new ServerStreamingEchoRequest
            {
                Message         = "test",
                MessageCount    = 3,
                MessageInterval = TimeSpan.FromMilliseconds(10).ToDuration()
            });

            // Assert
            Assert.IsTrue(await call.ResponseStream.MoveNext(CancellationToken.None).DefaultTimeout());
            Assert.AreEqual("test", call.ResponseStream.Current.Message);

            var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => call.ResponseStream.MoveNext(CancellationToken.None)).DefaultTimeout();

            Assert.AreEqual(StatusCode.Aborted, ex.StatusCode);
            Assert.AreEqual("Aborted from server side.", ex.Status.Detail);

            Assert.AreEqual(StatusCode.Aborted, call.GetStatus().StatusCode);

            // It is possible get into a situation where the response stream finishes slightly before the call.
            // Small delay to ensure call logging is complete.
            await Task.Delay(50);

            AssertHasLog(LogLevel.Information, "GrpcStatusError", "Call failed with gRPC error status. Status code: 'Aborted', Message: 'Aborted from server side.'.");
            AssertHasLogRpcConnectionError(StatusCode.Aborted, "Aborted from server side.");
        }