|
|
|
@ -181,13 +181,14 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ClientStreaming_WriteFailure() |
|
|
|
|
public void ClientStreaming_WriteCompletionFailure() |
|
|
|
|
{ |
|
|
|
|
var resultTask = asyncCall.ClientStreamingCallAsync(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
|
|
|
|
|
|
var writeTask = requestStream.WriteAsync("request1"); |
|
|
|
|
fakeCall.SendCompletionHandler(false); |
|
|
|
|
// TODO: maybe IOException or waiting for RPCException is more appropriate here. |
|
|
|
|
Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await writeTask); |
|
|
|
|
|
|
|
|
|
fakeCall.UnaryResponseClientHandler(true, |
|
|
|
@ -199,7 +200,7 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ClientStreaming_WriteAfterReceivingStatusFails() |
|
|
|
|
public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException() |
|
|
|
|
{ |
|
|
|
|
var resultTask = asyncCall.ClientStreamingCallAsync(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
@ -210,7 +211,44 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
new Metadata()); |
|
|
|
|
|
|
|
|
|
AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask); |
|
|
|
|
var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1")); |
|
|
|
|
Assert.AreEqual(Status.DefaultSuccess, ex.Status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ClientStreaming_WriteAfterReceivingStatusThrowsRpcException2() |
|
|
|
|
{ |
|
|
|
|
var resultTask = asyncCall.ClientStreamingCallAsync(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
|
|
|
|
|
|
fakeCall.UnaryResponseClientHandler(true, |
|
|
|
|
new ClientSideStatus(new Status(StatusCode.OutOfRange, ""), new Metadata()), |
|
|
|
|
CreateResponsePayload(), |
|
|
|
|
new Metadata()); |
|
|
|
|
|
|
|
|
|
AssertUnaryResponseError(asyncCall, fakeCall, resultTask, StatusCode.OutOfRange); |
|
|
|
|
var ex = Assert.Throws<RpcException>(() => requestStream.WriteAsync("request1")); |
|
|
|
|
Assert.AreEqual(StatusCode.OutOfRange, ex.Status.StatusCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ClientStreaming_WriteAfterCompleteThrowsInvalidOperationException() |
|
|
|
|
{ |
|
|
|
|
var resultTask = asyncCall.ClientStreamingCallAsync(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
|
|
|
|
|
|
requestStream.CompleteAsync(); |
|
|
|
|
|
|
|
|
|
Assert.Throws(typeof(InvalidOperationException), () => requestStream.WriteAsync("request1")); |
|
|
|
|
|
|
|
|
|
fakeCall.SendCompletionHandler(true); |
|
|
|
|
|
|
|
|
|
fakeCall.UnaryResponseClientHandler(true, |
|
|
|
|
new ClientSideStatus(Status.DefaultSuccess, new Metadata()), |
|
|
|
|
CreateResponsePayload(), |
|
|
|
|
new Metadata()); |
|
|
|
|
|
|
|
|
|
AssertUnaryResponseSuccess(asyncCall, fakeCall, resultTask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -229,7 +267,7 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void ClientStreaming_WriteAfterCancellationRequestFails() |
|
|
|
|
public void ClientStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException() |
|
|
|
|
{ |
|
|
|
|
var resultTask = asyncCall.ClientStreamingCallAsync(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
@ -340,7 +378,7 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void DuplexStreaming_WriteAfterReceivingStatusFails() |
|
|
|
|
public void DuplexStreaming_WriteAfterReceivingStatusThrowsRpcException() |
|
|
|
|
{ |
|
|
|
|
asyncCall.StartDuplexStreamingCall(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
@ -352,7 +390,8 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
|
|
|
|
|
AssertStreamingResponseSuccess(asyncCall, fakeCall, readTask); |
|
|
|
|
|
|
|
|
|
Assert.ThrowsAsync(typeof(InvalidOperationException), async () => await requestStream.WriteAsync("request1")); |
|
|
|
|
var ex = Assert.ThrowsAsync<RpcException>(async () => await requestStream.WriteAsync("request1")); |
|
|
|
|
Assert.AreEqual(Status.DefaultSuccess, ex.Status); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
@ -372,7 +411,7 @@ namespace Grpc.Core.Internal.Tests |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
[Test] |
|
|
|
|
public void DuplexStreaming_WriteAfterCancellationRequestFails() |
|
|
|
|
public void DuplexStreaming_WriteAfterCancellationRequestThrowsOperationCancelledException() |
|
|
|
|
{ |
|
|
|
|
asyncCall.StartDuplexStreamingCall(); |
|
|
|
|
var requestStream = new ClientRequestStream<string, string>(asyncCall); |
|
|
|
|