private async Task DoDownloadToByteArrayAsyncTest(CloudFile file, int fileSize, int bufferSize, int bufferOffset, bool isOverload) { int downloadLength; byte[] buffer = GetRandomBuffer(fileSize); byte[] resultBuffer = new byte[bufferSize]; byte[] resultBuffer2 = new byte[bufferSize]; using (MemoryStream originalFile = new MemoryStream(buffer)) { if (!isOverload) { await file.UploadFromStreamAsync(originalFile); downloadLength = await file.DownloadToByteArrayAsync(resultBuffer, bufferOffset); } else { await file.UploadFromStreamAsync(originalFile); OperationContext context = new OperationContext(); downloadLength = await file.DownloadToByteArrayAsync(resultBuffer, bufferOffset, null, null, context); } 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]); } } } }
private async Task DoUploadFromByteArrayTestAsync(CloudFile file, int bufferSize, int bufferOffset, int count) { byte[] buffer = GetRandomBuffer(bufferSize); byte[] downloadedBuffer = new byte[bufferSize]; int downloadLength; await file.UploadFromByteArrayAsync(buffer, bufferOffset, count); downloadLength = await file.DownloadToByteArrayAsync(downloadedBuffer, 0); Assert.AreEqual(count, downloadLength); for (int i = 0; i < count; i++) { Assert.AreEqual(buffer[i + bufferOffset], downloadedBuffer[i]); } }
private async Task DoDownloadRangeToByteArrayNegativeTestsAsync(CloudFile file) { int fileLength = 1024; int resultBufSize = 1024; byte[] buffer = GetRandomBuffer(fileLength); byte[] resultBuffer = new byte[resultBufSize]; using (MemoryStream stream = new MemoryStream(buffer)) { await file.UploadFromStreamAsync(stream); OperationContext context = new OperationContext(); await TestHelper.ExpectedExceptionAsync(async() => await file.DownloadRangeToByteArrayAsync(resultBuffer, 0, 1024, 1, null, null, context), context, "Try invalid length", HttpStatusCode.RequestedRangeNotSatisfiable); StorageException ex = await TestHelper.ExpectedExceptionAsync <StorageException>(async() => await file.DownloadToByteArrayAsync(resultBuffer, 1024), "Provide invalid offset"); Assert.IsInstanceOfType(ex.InnerException, typeof(NotSupportedException)); ex = await TestHelper.ExpectedExceptionAsync <StorageException>(async() => await file.DownloadRangeToByteArrayAsync(resultBuffer, 1023, 0, 2), "Should fail when offset + length required is greater than size of the buffer"); Assert.IsInstanceOfType(ex.InnerException, typeof(NotSupportedException)); ex = await TestHelper.ExpectedExceptionAsync <StorageException>(async() => await file.DownloadRangeToByteArrayAsync(resultBuffer, 0, 0, -10), "Fail when a negative length is specified"); Assert.IsInstanceOfType(ex.InnerException, typeof(ArgumentOutOfRangeException)); await TestHelper.ExpectedExceptionAsync <ArgumentOutOfRangeException>(async() => await file.DownloadRangeToByteArrayAsync(resultBuffer, -10, 0, 20), "Fail if a negative offset is provided"); ex = await TestHelper.ExpectedExceptionAsync <StorageException>(async() => await file.DownloadRangeToByteArrayAsync(resultBuffer, 0, -10, 20), "Fail if a negative file offset is provided"); Assert.IsInstanceOfType(ex.InnerException, typeof(ArgumentOutOfRangeException)); } }