|
19 | 19 | using System; |
20 | 20 | using System.Diagnostics; |
21 | 21 | using System.IO; |
| 22 | +using System.Linq; |
22 | 23 | using System.Threading; |
23 | 24 | using System.Threading.Tasks; |
24 | 25 | using Google.Protobuf; |
@@ -424,6 +425,39 @@ async Task UnaryDeadlineExceeded(IAsyncStreamReader<DataMessage> requestStream, |
424 | 425 | Assert.IsFalse(await call2.ResponseStream.MoveNext().DefaultTimeout()); |
425 | 426 | } |
426 | 427 |
|
| 428 | + [Test] |
| 429 | + public async Task ServerStreaming_GetTrailersAndStatus_Success() |
| 430 | + { |
| 431 | + async Task ServerStreamingWithTrailers(DataMessage request, IServerStreamWriter<DataMessage> responseStream, ServerCallContext context) |
| 432 | + { |
| 433 | + await responseStream.WriteAsync(new DataMessage()); |
| 434 | + context.ResponseTrailers.Add("my-trailer", "value"); |
| 435 | + } |
| 436 | + |
| 437 | + // Arrange |
| 438 | + var method = Fixture.DynamicGrpc.AddServerStreamingMethod<DataMessage, DataMessage>(ServerStreamingWithTrailers); |
| 439 | + |
| 440 | + var channel = CreateChannel(); |
| 441 | + |
| 442 | + var client = TestClientFactory.Create(channel, method); |
| 443 | + |
| 444 | + // Act |
| 445 | + var call = client.ServerStreamingCall(new DataMessage()); |
| 446 | + |
| 447 | + // Assert |
| 448 | + Assert.IsTrue(await call.ResponseStream.MoveNext().DefaultTimeout()); |
| 449 | + |
| 450 | + Assert.AreEqual(0, call.ResponseStream.Current.Data.Length); |
| 451 | + |
| 452 | + Assert.IsFalse(await call.ResponseStream.MoveNext().DefaultTimeout()); |
| 453 | + |
| 454 | + var trailers = call.GetTrailers(); |
| 455 | + Assert.AreEqual(1, trailers.Count); |
| 456 | + Assert.AreEqual("value", trailers.First(e => e.Key == "my-trailer").Value); |
| 457 | + |
| 458 | + Assert.AreEqual(StatusCode.OK, call.GetStatus().StatusCode); |
| 459 | + } |
| 460 | + |
427 | 461 | private static byte[] CreateTestData(int size) |
428 | 462 | { |
429 | 463 | var data = new byte[size]; |
|
0 commit comments