mirror of https://github.com/apache/jclouds.git
added test for range requests with filesystem backend and corrected behavior
This commit is contained in:
parent
5843d5fee9
commit
173592f7d5
|
@ -567,7 +567,7 @@ public class FilesystemAsyncBlobStore extends BaseAsyncBlobStore {
|
||||||
String[] firstLast = s.split("\\-");
|
String[] firstLast = s.split("\\-");
|
||||||
int offset = Integer.parseInt(firstLast[0]);
|
int offset = Integer.parseInt(firstLast[0]);
|
||||||
int last = Integer.parseInt(firstLast[1]);
|
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);
|
out.write(data, offset, length);
|
||||||
} else {
|
} else {
|
||||||
return immediateFailedFuture(new IllegalArgumentException("first and last were null!"));
|
return immediateFailedFuture(new IllegalArgumentException("first and last were null!"));
|
||||||
|
|
|
@ -35,7 +35,9 @@ import java.util.Iterator;
|
||||||
import java.util.Properties;
|
import java.util.Properties;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import junit.framework.Assert;
|
||||||
import org.apache.commons.io.FileUtils;
|
import org.apache.commons.io.FileUtils;
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.jclouds.blobstore.BlobStore;
|
import org.jclouds.blobstore.BlobStore;
|
||||||
import org.jclouds.blobstore.BlobStoreContext;
|
import org.jclouds.blobstore.BlobStoreContext;
|
||||||
import org.jclouds.blobstore.BlobStoreContextFactory;
|
import org.jclouds.blobstore.BlobStoreContextFactory;
|
||||||
|
@ -51,6 +53,7 @@ import org.jclouds.blobstore.options.ListContainerOptions;
|
||||||
import org.jclouds.crypto.CryptoStreams;
|
import org.jclouds.crypto.CryptoStreams;
|
||||||
import org.jclouds.filesystem.reference.FilesystemConstants;
|
import org.jclouds.filesystem.reference.FilesystemConstants;
|
||||||
import org.jclouds.filesystem.utils.TestUtils;
|
import org.jclouds.filesystem.utils.TestUtils;
|
||||||
|
import org.jclouds.io.payloads.StringPayload;
|
||||||
import org.testng.annotations.AfterMethod;
|
import org.testng.annotations.AfterMethod;
|
||||||
import org.testng.annotations.BeforeMethod;
|
import org.testng.annotations.BeforeMethod;
|
||||||
import org.testng.annotations.Test;
|
import org.testng.annotations.Test;
|
||||||
|
@ -112,7 +115,6 @@ public class FilesystemAsyncBlobStoreTest {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if context parameters are managed in the correct way
|
* Checks if context parameters are managed in the correct way
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public void testParameters() {
|
public void testParameters() {
|
||||||
// no base directory declared in properties
|
// 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");
|
assertTrue(containersRetrieved.isEmpty(), "List operation returns a not empty set of container");
|
||||||
|
|
||||||
// Testing list with some containers
|
// Testing list with some containers
|
||||||
String[] containerNames = new String[] { "34343", "aaaa", "bbbbb" };
|
String[] containerNames = new String[]{"34343", "aaaa", "bbbbb"};
|
||||||
containersCreated = new HashSet<String>();
|
containersCreated = new HashSet<String>();
|
||||||
for (String containerName : containerNames) {
|
for (String containerName : containerNames) {
|
||||||
blobStore.createContainerInLocation(null, containerName);
|
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() {
|
// public void testInvalidBlobKey() {
|
||||||
// try {
|
// try {
|
||||||
// blobStore.newBlob(File.separator + "testwrongblobkey");
|
// blobStore.newBlob(File.separator + "testwrongblobkey");
|
||||||
|
|
|
@ -55,6 +55,9 @@ public class GetOptions {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* download the specified range of the object.
|
* 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) {
|
public GetOptions range(long start, long end) {
|
||||||
checkArgument(start >= 0, "start must be >= 0");
|
checkArgument(start >= 0, "start must be >= 0");
|
||||||
|
|
Loading…
Reference in New Issue