public async Task SendRequestAsync_WaitsTillAllDataSent() { var payLoadSender = new PayloadSender(); var tcs = new TaskCompletionSource <bool>(); DisconnectedEventHandler eventHandler = (sender, args) => { tcs.TrySetException(new Exception(args.Reason)); }; payLoadSender.Disconnected += eventHandler; payLoadSender.Connect(GetMockedTransportSender(tcs, TransportConstants.MaxPayloadLength * 4)); var sendOperations = new SendOperations(payLoadSender); try { using (var stream = GetMockedStream(TransportConstants.MaxPayloadLength * 4)) { var request = new StreamingRequest(); request.AddStream(new StreamContent(stream)); await sendOperations.SendRequestAsync(Guid.NewGuid(), request); } await tcs.Task; } finally { payLoadSender.Disconnected -= eventHandler; } }
public async Task <ReceiveResponse> SendRequestAsync(StreamingRequest request, CancellationToken cancellationToken = default(CancellationToken)) { var requestId = Guid.NewGuid(); var responseTask = _requestManager.GetResponseAsync(requestId, cancellationToken); var requestTask = _sendOperations.SendRequestAsync(requestId, request); cancellationToken.ThrowIfCancellationRequested(); await Task.WhenAll(requestTask, responseTask).ConfigureAwait(false); return(responseTask.Result); }
public async Task RequestDisassembler_WithJsonStream_Sends() { var sender = new PayloadSender(); var transport = new MockTransportSender(); sender.Connect(transport); var ops = new SendOperations(sender); var request = StreamingRequest.CreatePost("/a/b"); request.AddStream(new StringContent("abc", Encoding.ASCII)); await ops.SendRequestAsync(Guid.NewGuid(), request); Assert.AreEqual(4, transport.Buffers.Count); }
public async Task <ReceiveResponse> SendRequestAsync(StreamingRequest request, CancellationToken cancellationToken = default(CancellationToken)) { if (request == null) { throw new ArgumentNullException(nameof(request)); } var requestId = Guid.NewGuid(); var responseTask = _requestManager.GetResponseAsync(requestId, cancellationToken); var requestTask = _sendOperations.SendRequestAsync(requestId, request, cancellationToken); cancellationToken.ThrowIfCancellationRequested(); await Task.WhenAll(requestTask, responseTask).ConfigureAwait(false); return(await responseTask.ConfigureAwait(false)); }
public async Task RequestDisassembler_WithVariableStream_Sends() { var sender = new PayloadSender(); var transport = new MockTransportSender(); sender.Connect(transport); var ops = new SendOperations(sender); var request = StreamingRequest.CreatePost("/a/b"); var stream = new PayloadStream(new PayloadStreamAssembler(null, Guid.NewGuid(), "blah", 100)); stream.Write(new byte[100], 0, 100); request.AddStream(new StreamContent(stream)); await ops.SendRequestAsync(Guid.NewGuid(), request); Assert.AreEqual(5, transport.Buffers.Count); }