private void DoUploadFromByteArrayTest(CloudFile file, int bufferSize, int bufferOffset, int count, bool isAsync) { byte[] buffer = GetRandomBuffer(bufferSize); byte[] downloadedBuffer = new byte[bufferSize]; int downloadLength; if (isAsync) { IAsyncResult result; using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { result = file.BeginUploadFromByteArray(buffer, bufferOffset, count, ar => waitHandle.Set(), null); waitHandle.WaitOne(); file.EndUploadFromByteArray(result); result = file.BeginDownloadToByteArray(downloadedBuffer, 0, ar => waitHandle.Set(), null); waitHandle.WaitOne(); downloadLength = file.EndDownloadToByteArray(result); } } else { file.UploadFromByteArray(buffer, bufferOffset, count); downloadLength = file.DownloadToByteArray(downloadedBuffer, 0); } Assert.AreEqual(count, downloadLength); for (int i = 0; i < count; i++) { Assert.AreEqual(buffer[i + bufferOffset], downloadedBuffer[i]); } }
/// <summary> /// Single put file and get file /// </summary> /// <param name="fileSize">The file size.</param> /// <param name="bufferOffset">The file offset.</param> /// <param name="option"> 0 - Sunc, 1 - APM and 2 - APM overload.</param> private void DoDownloadToByteArrayTest(CloudFile file, int fileSize, int bufferSize, int bufferOffset, int option) { int downloadLength; byte[] buffer = GetRandomBuffer(fileSize); byte[] resultBuffer = new byte[bufferSize]; byte[] resultBuffer2 = new byte[bufferSize]; using (MemoryStream originalFile = new MemoryStream(buffer)) { if (option == 0) { file.UploadFromStream(originalFile); downloadLength = file.DownloadToByteArray(resultBuffer, bufferOffset); } else if (option == 1) { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { ICancellableAsyncResult result = file.BeginUploadFromStream(originalFile, ar => waitHandle.Set(), null); waitHandle.WaitOne(); file.EndUploadFromStream(result); result = file.BeginDownloadToByteArray(resultBuffer, bufferOffset, ar => waitHandle.Set(), null); waitHandle.WaitOne(); downloadLength = file.EndDownloadToByteArray(result); } } else { using (AutoResetEvent waitHandle = new AutoResetEvent(false)) { ICancellableAsyncResult result = file.BeginUploadFromStream(originalFile, ar => waitHandle.Set(), null); waitHandle.WaitOne(); file.EndUploadFromStream(result); OperationContext context = new OperationContext(); result = file.BeginDownloadToByteArray(resultBuffer, bufferOffset, /* offset */ null, /* accessCondition */ null, /* options */ context, /* operationContext */ ar => waitHandle.Set(), null); waitHandle.WaitOne(); downloadLength = file.EndDownloadToByteArray(result); } } int downloadSize = Math.Min(fileSize, bufferSize - bufferOffset); Assert.AreEqual(downloadSize, downloadLength); for (int i = 0; i < file.Properties.Length; i++) { Assert.AreEqual(buffer[i], resultBuffer[bufferOffset + i]); } for (int j = 0; j < bufferOffset; j++) { Assert.AreEqual(0, resultBuffer2[j]); } if (bufferOffset + fileSize < bufferSize) { for (int k = bufferOffset + fileSize; k < bufferSize; k++) { Assert.AreEqual(0, resultBuffer2[k]); } } } }