add tests for #25682, at least for server streaming and bidi streaming calls (#29072)

pull/29392/head
Jan Tattermusch 3 years ago committed by GitHub
parent da1977f98c
commit 47aa3c23ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      src/csharp/Grpc.Core.Tests/ResponseHeadersTest.cs

@ -113,6 +113,30 @@ namespace Grpc.Core.Tests
CollectionAssert.AreEqual(new[] { "PASS" }, await call.ResponseStream.ToListAsync());
}
[Test]
public async Task ResponseHeadersAsync_ServerStreamingCall_Issue25682()
{
var responseHeadersReceivedOnClientTcs = new TaskCompletionSource<object>();
helper.ServerStreamingHandler = new ServerStreamingServerMethod<string, string>(async (request, responseStream, context) =>
{
await context.WriteResponseHeadersAsync(headers);
// don't proceed until the response headers are confirmed to be received
// by the client.
await responseHeadersReceivedOnClientTcs.Task;
await responseStream.WriteAsync("PASS");
});
var call = Calls.AsyncServerStreamingCall(helper.CreateServerStreamingCall(), "");
var responseHeaders = await call.ResponseHeadersAsync;
// signal the response headers have been seen by the client
responseHeadersReceivedOnClientTcs.SetResult(null);
Assert.AreEqual("ascii-header", responseHeaders[0].Key);
CollectionAssert.AreEqual(new[] { "PASS" }, await call.ResponseStream.ToListAsync());
}
[Test]
public async Task ResponseHeadersAsync_DuplexStreamingCall()
{
@ -135,6 +159,36 @@ namespace Grpc.Core.Tests
CollectionAssert.AreEqual(messages, await call.ResponseStream.ToListAsync());
}
[Test]
public async Task ResponseHeadersAsync_DuplexStreamingCall_Issue25682()
{
var responseHeadersReceivedOnClientTcs = new TaskCompletionSource<object>();
helper.DuplexStreamingHandler = new DuplexStreamingServerMethod<string, string>(async (requestStream, responseStream, context) =>
{
await context.WriteResponseHeadersAsync(headers);
// don't proceed until the response headers are confirmed to be received
// by the client.
await responseHeadersReceivedOnClientTcs.Task;
while (await requestStream.MoveNext())
{
await responseStream.WriteAsync(requestStream.Current);
}
});
var call = Calls.AsyncDuplexStreamingCall(helper.CreateDuplexStreamingCall());
var responseHeaders = await call.ResponseHeadersAsync;
// signal the response headers have been seen by the client
responseHeadersReceivedOnClientTcs.SetResult(null);
var messages = new[] { "PASS" };
await call.RequestStream.WriteAllAsync(messages);
Assert.AreEqual("ascii-header", responseHeaders[0].Key);
CollectionAssert.AreEqual(messages, await call.ResponseStream.ToListAsync());
}
[Test]
public void WriteResponseHeaders_NullNotAllowed()
{

Loading…
Cancel
Save