public void EnsureMultiBufferMemoryStreamIsNotClosed() { byte[] buffer = GetRandomBuffer(1 * 1024 * 1024); CloudBlobClient blobClient = GenerateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(Guid.NewGuid().ToString("N")); try { container.Create(); CloudBlockBlob blob = container.GetBlockBlobReference("blob1"); using (MultiBufferMemoryStream originalBlob = new MultiBufferMemoryStream(null)) { originalBlob.Write(buffer, 0, buffer.Length); originalBlob.Seek(0, SeekOrigin.Begin); blob.PutBlock(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), originalBlob, null); Assert.IsTrue(originalBlob.CanSeek); } } finally { container.DeleteIfExists(); } }
public void MultiBufferMemoryStreamReadSeekSetLengthTest() { byte[] outBuffer = new byte[2 * 1024 * 1024]; byte[] buffer = GetRandomBuffer(outBuffer.Length); using (MemoryStream memStream = new MemoryStream()) { memStream.Write(buffer, 0, buffer.Length); using (MultiBufferMemoryStream multiBufferStream = new MultiBufferMemoryStream(null /* bufferManager */)) { multiBufferStream.Write(buffer, 0, buffer.Length); multiBufferStream.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(memStream, multiBufferStream); multiBufferStream.Read(outBuffer, 0, buffer.Length); TestHelper.AssertBuffersAreEqual(buffer, outBuffer); multiBufferStream.Seek(-1, SeekOrigin.End); Assert.AreEqual(buffer.Length - 1, multiBufferStream.Position); multiBufferStream.Seek(-1024, SeekOrigin.End); memStream.Seek(-1024, SeekOrigin.End); TestHelper.AssertStreamsAreEqual(multiBufferStream, memStream); multiBufferStream.SetLength(3 * 1024 * 1024); memStream.SetLength(3 * 1024 * 1024); multiBufferStream.Seek(0, SeekOrigin.Begin); memStream.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(memStream, multiBufferStream); } } }
public async Task WriteToMultiBufferMemoryStreamTestAsync() { OperationContext tempOperationContext = new OperationContext(); RESTCommand <NullType> cmd = new RESTCommand <NullType>(TestBase.StorageCredentials, null, null); ExecutionState <NullType> tempExecutionState = new ExecutionState <NullType>(cmd, null, tempOperationContext); byte[] buffer = GetRandomBuffer(1 * 1024 * 1024); MemoryStream stream1 = new MemoryStream(buffer); MultiBufferMemoryStream stream2 = new MultiBufferMemoryStream(null /* bufferManager */); await stream1.WriteToAsync(stream2, default(IBufferManager), null, null, ChecksumRequested.None, tempExecutionState, null, CancellationToken.None); stream1.Seek(0, SeekOrigin.Begin); stream2.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream1, stream2); MultiBufferMemoryStream stream3 = new MultiBufferMemoryStream(null /* bufferManager */); await TestHelper.ExpectedExceptionAsync <TimeoutException>( () => stream2.FastCopyToAsync(stream3, DateTime.Now.AddMinutes(-1)), "Past expiration time should immediately fail"); stream2.Seek(0, SeekOrigin.Begin); stream3.Seek(0, SeekOrigin.Begin); await stream2.FastCopyToAsync(stream3, DateTime.Now.AddHours(1)); stream2.Seek(0, SeekOrigin.Begin); stream3.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream2, stream3); MultiBufferMemoryStream stream4 = new MultiBufferMemoryStream(null /* bufferManager */, 12345); await stream3.FastCopyToAsync(stream4, null); stream3.Seek(0, SeekOrigin.Begin); stream4.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream3, stream4); MemoryStream stream5 = new MemoryStream(); await stream4.WriteToAsync(stream5, default(IBufferManager), null, null, ChecksumRequested.None, tempExecutionState, null, CancellationToken.None); stream4.Seek(0, SeekOrigin.Begin); stream5.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream4, stream5); TestHelper.AssertStreamsAreEqual(stream1, stream5); }
public void MultiBufferMemoryStreamReadSeekSetLengthTestAPM() { byte[] outBuffer = new byte[2 * 1024 * 1024]; byte[] buffer = GetRandomBuffer(outBuffer.Length); using (MemoryStream memStream = new MemoryStream()) { memStream.Write(buffer, 0, buffer.Length); using (MultiBufferMemoryStream multiBufferStream = new MultiBufferMemoryStream(null /* bufferManager */)) { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { IAsyncResult result = multiBufferStream.BeginWrite(buffer, 0, buffer.Length, ar => waitHandle.Set(), null); waitHandle.WaitOne(); multiBufferStream.EndWrite(result); multiBufferStream.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(memStream, multiBufferStream); result = multiBufferStream.BeginRead(outBuffer, 0, buffer.Length, ar => waitHandle.Set(), null); waitHandle.WaitOne(); multiBufferStream.EndRead(result); TestHelper.AssertBuffersAreEqual(buffer, outBuffer); multiBufferStream.Seek(-1, SeekOrigin.End); Assert.AreEqual(buffer.Length - 1, multiBufferStream.Position); multiBufferStream.Seek(-1024, SeekOrigin.End); memStream.Seek(-1024, SeekOrigin.End); TestHelper.AssertStreamsAreEqual(multiBufferStream, memStream); multiBufferStream.SetLength(3 * 1024 * 1024); memStream.SetLength(3 * 1024 * 1024); multiBufferStream.Seek(0, SeekOrigin.Begin); memStream.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(memStream, multiBufferStream); } } } }
public void EnsureMultiBufferMemoryStreamIsNotClosedAPM() { byte[] buffer = GetRandomBuffer(1 * 1024 * 1024); CloudBlobClient blobClient = GenerateCloudBlobClient(); CloudBlobContainer container = blobClient.GetContainerReference(Guid.NewGuid().ToString("N")); try { container.Create(); CloudBlockBlob blob = container.GetBlockBlobReference("blob1"); using (MultiBufferMemoryStream originalBlob = new MultiBufferMemoryStream(null)) { originalBlob.Write(buffer, 0, buffer.Length); originalBlob.Seek(0, SeekOrigin.Begin); using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { ICancellableAsyncResult result = blob.BeginPutBlock( Convert.ToBase64String(Guid.NewGuid().ToByteArray()), originalBlob, null, ar => waitHandle.Set(), null); waitHandle.WaitOne(); blob.EndPutBlock(result); } Assert.IsTrue(originalBlob.CanSeek); } } finally { container.DeleteIfExists(); } }
public void WriteToMultiBufferMemoryStreamTestAPM() { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { byte[] buffer = GetRandomBuffer(1 * 1024 * 1024); MemoryStream stream1 = new MemoryStream(buffer); RESTCommand <NullType> cmd = new RESTCommand <NullType>(TestBase.StorageCredentials, null, null); ExecutionState <NullType> state = new ExecutionState <NullType>(cmd, new NoRetry(), new OperationContext()); StreamDescriptor copyState = new StreamDescriptor(); MultiBufferMemoryStream stream2 = new MultiBufferMemoryStream(null /* bufferManager */); stream1.WriteToAsync(stream2, default(IBufferManager), null, null, false, state, copyState, CancellationToken.None, _ => waitHandle.Set()); waitHandle.WaitOne(); if (state.ExceptionRef != null) { throw state.ExceptionRef; } stream1.Seek(0, SeekOrigin.Begin); stream2.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream1, stream2); MultiBufferMemoryStream stream3 = new MultiBufferMemoryStream(null /* bufferManager */); IAsyncResult ar = stream2.BeginFastCopyTo(stream3, DateTime.Now.AddMinutes(-1), _ => waitHandle.Set(), null); waitHandle.WaitOne(); TestHelper.ExpectedException <TimeoutException>( () => stream3.EndFastCopyTo(ar), "Past expiration time should immediately fail"); stream2.Seek(0, SeekOrigin.Begin); stream3.Seek(0, SeekOrigin.Begin); ar = stream2.BeginFastCopyTo(stream3, DateTime.Now.AddHours(1), _ => waitHandle.Set(), null); waitHandle.WaitOne(); stream2.EndFastCopyTo(ar); stream2.Seek(0, SeekOrigin.Begin); stream3.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream2, stream3); MultiBufferMemoryStream stream4 = new MultiBufferMemoryStream(null, 12345); ar = stream3.BeginFastCopyTo(stream4, null, _ => waitHandle.Set(), null); waitHandle.WaitOne(); stream3.EndFastCopyTo(ar); stream3.Seek(0, SeekOrigin.Begin); stream4.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream3, stream4); state = new ExecutionState <NullType>(cmd, new NoRetry(), new OperationContext()); copyState = new StreamDescriptor(); MemoryStream stream5 = new MemoryStream(); stream4.WriteToAsync(stream5, default(IBufferManager), null, null, false, state, copyState, CancellationToken.None, _ => waitHandle.Set()); waitHandle.WaitOne(); if (state.ExceptionRef != null) { throw state.ExceptionRef; } stream4.Seek(0, SeekOrigin.Begin); stream5.Seek(0, SeekOrigin.Begin); TestHelper.AssertStreamsAreEqual(stream4, stream5); TestHelper.AssertStreamsAreEqual(stream1, stream5); } }