private static void ValidateCopier(int bufferLength, long?copyLength, long?maxLength, bool inputSync, int inputDelayInMs, int inputFailRequest, bool outputSync, int outputDelayInMs, int outputFailRequest, DateTime?copyTimeout, bool seekable) { byte[] buffer = GetRandomBuffer(bufferLength); // Finds ceiling of division operation int expectedCallCount = (int) (copyLength.HasValue && buffer.Length > copyLength ? (-1L + copyLength + Constants.DefaultBufferSize) / Constants.DefaultBufferSize : (-1L + buffer.Length + Constants.DefaultBufferSize) / Constants.DefaultBufferSize); int totalDelayInMs = (expectedCallCount + 1) * inputDelayInMs + expectedCallCount * outputDelayInMs; DataValidationStream input = new DataValidationStream(buffer, inputSync, inputDelayInMs, inputFailRequest, seekable); DataValidationStream output = new DataValidationStream(buffer, outputSync, outputDelayInMs, outputFailRequest, seekable); RESTCommand <NullType> cmdWithTimeout = new RESTCommand <NullType>(new StorageCredentials(), null) { OperationExpiryTime = copyTimeout }; ExecutionState <NullType> state = new ExecutionState <NullType>(cmdWithTimeout, null, null); StreamDescriptor copyState = new StreamDescriptor(); using (ManualResetEvent waitHandle = new ManualResetEvent(false)) { var mockBufferManager = new MockBufferManager(Constants.DefaultBufferSize); input.WriteToAsync(output, mockBufferManager, copyLength, maxLength, false, state, copyState, _ => waitHandle.Set()); Assert.IsTrue(waitHandle.WaitOne(totalDelayInMs + 10 * 1000)); Assert.AreEqual(0, mockBufferManager.OutstandingBufferCount, "Outstanding buffers not returned to IBufferManager"); } if (inputFailRequest >= 0) { Assert.AreEqual(input.LastException, state.ExceptionRef); Assert.AreEqual(inputFailRequest, input.ReadCallCount); } if (outputFailRequest >= 0) { Assert.AreEqual(output.LastException, state.ExceptionRef); Assert.AreEqual(outputFailRequest, output.WriteCallCount); } if (state.ExceptionRef != null) { throw state.ExceptionRef; } Assert.AreEqual(copyLength.HasValue ? copyLength : buffer.Length, copyState.Length); Assert.AreEqual(copyLength.HasValue ? expectedCallCount : expectedCallCount + 1, input.ReadCallCount); Assert.AreEqual(expectedCallCount, output.WriteCallCount); }
public void ReadMessage_Returns_The_Buffer_To_The_Buffer_Manager() { HttpMessageEncoderFactory factory = new HttpMessageEncoderFactory(); MessageEncoder encoder = factory.Encoder; byte[] bytes = new byte[5] { 0, 1, 2, 3, 4 }; ArraySegment <byte> buffer = new ArraySegment <byte>(bytes); MockBufferManager bufferManager = new MockBufferManager(); HttpMessage message = encoder.ReadMessage(buffer, bufferManager, "someType/someSubType") as HttpMessage; Assert.IsTrue(bufferManager.ReturnBufferCalled, "HttpMessageEncoder.ReadMessage should have returned the buffer to the buffer manager."); Assert.AreSame(bytes, bufferManager.BufferReturned, "HttpMessageEncoder.ReadMessage should have returned the original buffer instance to the buffer manager."); }
public void WriteMessage_Takes_A_Buffer_From_The_BufferManager() { HttpMessageEncoderFactory factory = new HttpMessageEncoderFactory(); MessageEncoder encoder = factory.Encoder; HttpResponseMessage response = new HttpResponseMessage(); response.Content = new ByteArrayContent(new byte[5] { 0, 1, 2, 3, 4 }); HttpMessage message = new HttpMessage(response); MockBufferManager bufferManager = new MockBufferManager(); ArraySegment <byte> buffer = encoder.WriteMessage(message, int.MaxValue, bufferManager); Assert.IsTrue(bufferManager.TakeBufferCalled, "HttpMessageEncoder.WriteMessage should have taken a buffer from the bufferManager."); Assert.AreSame(buffer.Array, bufferManager.BufferTaken, "HttpMessageEncoder.WriteMessage should have returned the array taken from the bufferManager."); }