public async Task AsyncServerStreamingCall_TrailersOnly_TrailersReturnedWithHeaders() { // Arrange HttpResponseMessage?responseMessage = null; var httpClient = ClientTestHelpers.CreateTestClient(request => { responseMessage = ResponseUtils.CreateResponse(HttpStatusCode.OK, new ByteArrayContent(Array.Empty <byte>()), grpcStatusCode: null); responseMessage.Headers.Add(GrpcProtocolConstants.StatusTrailer, StatusCode.OK.ToString("D")); responseMessage.Headers.Add(GrpcProtocolConstants.MessageTrailer, "Detail!"); return(Task.FromResult(responseMessage)); }); var invoker = HttpClientCallInvokerFactory.Create(httpClient); // Act var call = invoker.AsyncServerStreamingCall <HelloRequest, HelloReply>(ClientTestHelpers.ServiceMethod, string.Empty, new CallOptions(), new HelloRequest()); var headers = await call.ResponseHeadersAsync; await call.ResponseStream.MoveNext(CancellationToken.None); // Assert Assert.NotNull(responseMessage); Assert.IsFalse(responseMessage !.TrailingHeaders.Any()); // sanity check that there are no trailers Assert.AreEqual(StatusCode.OK, call.GetStatus().StatusCode); Assert.AreEqual("Detail!", call.GetStatus().Detail); Assert.AreEqual(0, headers.Count); Assert.AreEqual(0, call.GetTrailers().Count); }
public async Task AsyncUnaryCall_SuccessTrailersOnly_ThrowNoMessageError() { // Arrange HttpResponseMessage?responseMessage = null; var httpClient = ClientTestHelpers.CreateTestClient(request => { responseMessage = ResponseUtils.CreateResponse(HttpStatusCode.OK, new ByteArrayContent(Array.Empty <byte>()), grpcStatusCode: null); responseMessage.Headers.Add(GrpcProtocolConstants.StatusTrailer, StatusCode.OK.ToString("D")); responseMessage.Headers.Add(GrpcProtocolConstants.MessageTrailer, "Detail!"); return(Task.FromResult(responseMessage)); }); var invoker = HttpClientCallInvokerFactory.Create(httpClient); // Act var call = invoker.AsyncUnaryCall <HelloRequest, HelloReply>(ClientTestHelpers.ServiceMethod, string.Empty, new CallOptions(), new HelloRequest()); var headers = await call.ResponseHeadersAsync.DefaultTimeout(); var response = await ExceptionAssert.ThrowsAsync <InvalidOperationException>(() => call.ResponseAsync).DefaultTimeout(); // Assert Assert.NotNull(responseMessage); Assert.IsFalse(responseMessage !.TrailingHeaders.Any()); // sanity check that there are no trailers Assert.AreEqual(StatusCode.OK, call.GetStatus().StatusCode); Assert.AreEqual("Detail!", call.GetStatus().Detail); Assert.AreEqual(0, headers.Count); Assert.AreEqual(0, call.GetTrailers().Count); }
public async Task AsyncUnaryCall_SuccessTrailersOnly_ThrowNoMessageError() { // Arrange HttpResponseMessage?responseMessage = null; var httpClient = ClientTestHelpers.CreateTestClient(request => { responseMessage = ResponseUtils.CreateHeadersOnlyResponse(HttpStatusCode.OK, StatusCode.OK, customHeaders: new Dictionary <string, string> { [GrpcProtocolConstants.MessageTrailer] = "Detail!" }); return(Task.FromResult(responseMessage)); }); var invoker = HttpClientCallInvokerFactory.Create(httpClient); // Act var call = invoker.AsyncUnaryCall <HelloRequest, HelloReply>(ClientTestHelpers.ServiceMethod, string.Empty, new CallOptions(), new HelloRequest()); var headers = await call.ResponseHeadersAsync.DefaultTimeout(); var ex = await ExceptionAssert.ThrowsAsync <RpcException>(() => call.ResponseAsync).DefaultTimeout(); // Assert Assert.NotNull(responseMessage); Assert.IsFalse(responseMessage !.TrailingHeaders.Any()); // sanity check that there are no trailers Assert.AreEqual(StatusCode.Internal, ex.Status.StatusCode); Assert.AreEqual("Failed to deserialize response message.", ex.Status.Detail); Assert.AreEqual(StatusCode.Internal, call.GetStatus().StatusCode); Assert.AreEqual("Failed to deserialize response message.", call.GetStatus().Detail); Assert.AreEqual(0, headers.Count); Assert.AreEqual(0, call.GetTrailers().Count); }