diff --git a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java index d238ab81e1..deace8af95 100644 --- a/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java +++ b/apis/openstack-swift/src/main/java/org/jclouds/openstack/swift/v1/domain/SwiftObject.java @@ -53,7 +53,7 @@ public class SwiftObject implements Comparable { Multimap headers, Map metadata, Payload payload) { this.name = checkNotNull(name, "name"); this.uri = checkNotNull(uri, "uri of %s", uri); - this.etag = checkNotNull(etag, "etag of %s", name).replace("\"", ""); + this.etag = etag != null ? etag.replace("\"", "") : null; this.lastModified = checkNotNull(lastModified, "lastModified of %s", name); this.headers = headers == null ? ImmutableMultimap. of() : checkNotNull(headers, "headers of %s", name); this.metadata = metadata == null ? ImmutableMap. of() : metadata; diff --git a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java index aff7b18f1c..7f1bc03843 100644 --- a/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java +++ b/blobstore/src/test/java/org/jclouds/blobstore/integration/internal/BaseBlobIntegrationTest.java @@ -426,6 +426,32 @@ public class BaseBlobIntegrationTest extends BaseBlobStoreIntegrationTest { } } + @Test(groups = { "integration", "live" }) + public void testGetRangeMultipart() throws InterruptedException, IOException { + String container = getContainerName(); + InputStream expect = null; + InputStream actual = null; + try { + String name = "apples"; + long length = getMinimumMultipartBlobSize(); + ByteSource byteSource = TestUtils.randomByteSource().slice(0, length); + Blob blob = view.getBlobStore().blobBuilder(name) + .payload(byteSource) + .contentLength(length) + .build(); + view.getBlobStore().putBlob(container, blob, new PutOptions().multipart(true)); + blob = view.getBlobStore().getBlob(container, name, range(0, 5)); + validateMetadata(blob.getMetadata(), container, name); + expect = byteSource.slice(0, 6).openStream(); + actual = blob.getPayload().openStream(); + assertThat(actual).hasContentEqualTo(expect); + } finally { + Closeables2.closeQuietly(expect); + Closeables2.closeQuietly(actual); + returnContainer(container); + } + } + private String addObjectAndValidateContent(String sourcecontainer, String sourceKey) throws InterruptedException { String eTag = addBlobToContainer(sourcecontainer, sourceKey); validateContent(sourcecontainer, sourceKey);