public async Task ClientStream_SendLargeFileBatched_Success() { // Arrange var total = 1024 * 1024 * 64; // 64 MB var data = new byte[1024 * 64]; // 64 KB var client = new StreamService.StreamServiceClient(Channel); var dataMessage = new DataMessage { Data = ByteString.CopyFrom(data) }; // Act var call = client.ClientStreamedData(); var sent = 0; while (sent < total) { var writeCount = Math.Min(total - sent, data.Length); DataMessage m; if (writeCount == data.Length) { m = dataMessage; } else { m = new DataMessage { Data = ByteString.CopyFrom(data, 0, writeCount) }; } await call.RequestStream.WriteAsync(m).DefaultTimeout(); sent += writeCount; } await call.RequestStream.CompleteAsync().DefaultTimeout(); var response = await call.ResponseAsync.DefaultTimeout(); // Assert Assert.AreEqual(total, response.Size); }
public async Task ClientStream_HttpClientWithTimeout_Success() { SetExpectedErrorsFilter(writeContext => { if (writeContext.LoggerName == "Grpc.Net.Client.Internal.GrpcCall" && writeContext.EventId.Name == "ErrorStartingCall" && writeContext.Exception is TaskCanceledException) { return(true); } if (writeContext.LoggerName == "Grpc.Net.Client.Internal.GrpcCall" && writeContext.EventId.Name == "GrpcStatusError" && writeContext.Message == "Call failed with gRPC error status. Status code: 'Cancelled', Message: 'Error starting gRPC call.'.") { return(true); } if (writeContext.LoggerName == "Grpc.Net.Client.Internal.GrpcCall" && writeContext.EventId.Name == "WriteMessageError" && writeContext.Exception is InvalidOperationException && writeContext.Exception.Message == "Can't write the message because the call is complete.") { return(true); } if (writeContext.LoggerName == "SERVER FunctionalTestsWebsite.Services.StreamService") { return(true); } return(false); }); // Arrange var data = new byte[1024 * 64]; // 64 KB var httpClient = Fixture.CreateClient(); httpClient.Timeout = TimeSpan.FromSeconds(0.5); var channel = GrpcChannel.ForAddress(httpClient.BaseAddress, new GrpcChannelOptions { HttpClient = httpClient, LoggerFactory = LoggerFactory }); var client = new StreamService.StreamServiceClient(channel); var dataMessage = new DataMessage { Data = ByteString.CopyFrom(data) }; // Act var call = client.ClientStreamedData(); var ex = await ExceptionAssert.ThrowsAsync <RpcException>(async() => { while (true) { await call.RequestStream.WriteAsync(dataMessage).DefaultTimeout(); await Task.Delay(100); } }).DefaultTimeout(); // Assert Assert.AreEqual(StatusCode.Cancelled, ex.StatusCode); Assert.AreEqual(StatusCode.Cancelled, call.GetStatus().StatusCode); }