added test for range requests with filesystem backend and corrected behavior

This commit is contained in:
Sebastian Annies 2011-08-12 13:48:32 +02:00
parent 5843d5fee9
commit 173592f7d5
3 changed files with 752 additions and 726 deletions

View File

@ -567,7 +567,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore {
String[] firstLast = s.split("\\-");
int offset = Integer.parseInt(firstLast[0]);
int last = Integer.parseInt(firstLast[1]);
int length = (last < data.length) ? last + 1 : data.length - offset;
int length = last - offset + 1; // the range end is included
out.write(data, offset, length);
} else {
return immediateFailedFuture(new IllegalArgumentException("first and last were null!"));

View File

@ -35,7 +35,9 @@ import java.util.Iterator;
import java.util.Properties;
import java.util.Set;
import junit.framework.Assert;
import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.jclouds.blobstore.BlobStore;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.blobstore.BlobStoreContextFactory;
@ -51,6 +53,7 @@ import org.jclouds.blobstore.options.ListContainerOptions;
import org.jclouds.crypto.CryptoStreams;
import org.jclouds.filesystem.reference.FilesystemConstants;
import org.jclouds.filesystem.utils.TestUtils;
import org.jclouds.io.payloads.StringPayload;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@ -112,7 +115,6 @@ public class FilesystemAsyncBlobStoreTest {
/**
* Checks if context parameters are managed in the correct way
*
*/
public void testParameters() {
// no base directory declared in properties
@ -145,7 +147,7 @@ public class FilesystemAsyncBlobStoreTest {
assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
// Testing list with some containers
String[] containerNames = new String[] { "34343", "aaaa", "bbbbb" };
String[] containerNames = new String[]{"34343", "aaaa", "bbbbb"};
containersCreated = new HashSet<String>();
for (String containerName : containerNames) {
blobStore.createContainerInLocation(null, containerName);
@ -707,6 +709,27 @@ public class FilesystemAsyncBlobStoreTest {
}
}
public void testRanges() throws IOException {
String payload = "abcdefgh";
Blob blob = blobStore.blobBuilder("test").payload(new StringPayload(payload)).build();
blobStore.putBlob(CONTAINER_NAME, blob);
GetOptions getOptionsRangeStartAt = new GetOptions();
getOptionsRangeStartAt.startAt(1);
Blob blobRangeStartAt = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeStartAt);
Assert.assertEquals("bcdefgh", IOUtils.toString(blobRangeStartAt.getPayload().getInput()));
GetOptions getOptionsRangeTail = new GetOptions();
getOptionsRangeTail.tail(3);
Blob blobRangeTail = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsRangeTail);
Assert.assertEquals("fgh", IOUtils.toString(blobRangeTail.getPayload().getInput()));
GetOptions getOptionsFragment = new GetOptions();
getOptionsFragment.range(4, 6);
Blob blobFragment = blobStore.getBlob(CONTAINER_NAME, blob.getMetadata().getName(), getOptionsFragment);
Assert.assertEquals("efg", IOUtils.toString(blobFragment.getPayload().getInput()));
}
// public void testInvalidBlobKey() {
// try {
// blobStore.newBlob(File.separator + "testwrongblobkey");

View File

@ -55,6 +55,9 @@ public class GetOptions {
/**
* download the specified range of the object.
* @param start first offset included in the response
* @param end last offset included in the response (inclusive).
* @return itself to enable daisy-chaining of expressions
*/
public GetOptions range(long start, long end) {
checkArgument(start >= 0, "start must be >= 0");