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