public void CopyToAsync () { var ms = new MemoryStream (); ms.WriteByte (4); ms.WriteByte (2); ms.Seek (0, SeekOrigin.Begin); var sc = new StreamContent (ms); var dest = new MemoryStream (); var task = sc.CopyToAsync (dest); task.Wait (); Assert.AreEqual (2, dest.Length, "#1"); bool hit = false; dest = new MemoryStream (); var scm = new StreamContentMock (new ExceptionStream ()); scm.OnSerializeToStreamAsync = () => { hit = true; }; task = scm.CopyToAsync (dest); try { task.Wait (); Assert.Fail ("#9"); } catch (AggregateException) { } Assert.IsTrue (hit, "#10"); }
public void CopyToAsync_ClosedInput () { var stream = new MemoryStream (new byte[] { 1 }); var content = new StreamContent (stream); Assert.IsTrue (content.LoadIntoBufferAsync ().Wait (3000), "#1"); stream.Close (); var stream_out = new MemoryStream (10); Assert.IsTrue (content.CopyToAsync (stream_out).Wait (3000), "#2"); }
public void CopyToAsync_Invalid () { var m = new MemoryStream (); var sc = new StreamContent (new MemoryStream ()); try { sc.CopyToAsync (null); Assert.Fail ("#1"); } catch (ArgumentNullException) { } // // For some reason does not work on .net // /* sc = new StreamContent (new ExceptionStream ()); try { sc.CopyToAsync (m).Wait (); Assert.Fail ("#2"); } catch (AggregateException) { } */ }
private static async Task<HttpContent> CreateBufferedRequestContentAsync(IOwinRequest owinRequest, CancellationToken cancellationToken) { // We need to replace the request body with a buffered stream so that other components can read the stream. // For this stream to be useful, it must NOT be diposed along with the request. Streams created by // StreamContent do get disposed along with the request, so use MemoryStream to buffer separately. MemoryStream buffer; int? contentLength = owinRequest.GetContentLength(); if (!contentLength.HasValue) { buffer = new MemoryStream(); } else { buffer = new MemoryStream(contentLength.Value); } cancellationToken.ThrowIfCancellationRequested(); using (StreamContent copier = new StreamContent(owinRequest.Body)) { await copier.CopyToAsync(buffer); } // Provide the non-disposing, buffered stream to later OWIN components (set to the stream's beginning). buffer.Position = 0; owinRequest.Body = buffer; // For MemoryStream, Length is guaranteed to be an int. return new ByteArrayContent(buffer.GetBuffer(), 0, (int)buffer.Length); }