Repository: jclouds-labs-openstack Updated Branches: refs/heads/master 3243e719e -> de8348dd2
Add live test for signPutBlob. Also, actually perform the blob put and get operations to verify that they succeed. Signed-off-by: Shri Javadekar <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/repo Commit: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/commit/de8348dd Tree: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/tree/de8348dd Diff: http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/diff/de8348dd Branch: refs/heads/master Commit: de8348dd20c6218a5c076293a24a765058180936 Parents: 3243e71 Author: Shri Javadekar <[email protected]> Authored: Mon May 5 23:02:45 2014 -0700 Committer: Jeremy Daggett <[email protected]> Committed: Wed Aug 27 10:02:32 2014 -0700 ---------------------------------------------------------------------- .../RegionScopedBlobStoreContextLiveTest.java | 85 ++++++++++++++++++-- 1 file changed, 78 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/jclouds-labs-openstack/blob/de8348dd/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedBlobStoreContextLiveTest.java ---------------------------------------------------------------------- diff --git a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedBlobStoreContextLiveTest.java b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedBlobStoreContextLiveTest.java index bba85bc..57ce439 100644 --- a/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedBlobStoreContextLiveTest.java +++ b/openstack-swift/src/test/java/org/jclouds/openstack/swift/v1/blobstore/RegionScopedBlobStoreContextLiveTest.java @@ -20,20 +20,38 @@ import static org.jclouds.openstack.keystone.v2_0.config.KeystoneProperties.CRED import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertFalse; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; +import static org.testng.Assert.fail; +import java.io.IOException; +import java.util.Arrays; import java.util.Properties; import java.util.Set; +import java.util.UUID; import java.util.concurrent.ExecutionException; +import org.jclouds.blobstore.BlobRequestSigner; import org.jclouds.blobstore.BlobStore; +import org.jclouds.blobstore.domain.Blob; import org.jclouds.blobstore.domain.PageSet; import org.jclouds.blobstore.domain.StorageMetadata; import org.jclouds.blobstore.integration.internal.BaseBlobStoreIntegrationTest; import org.jclouds.domain.Location; import org.jclouds.http.HttpRequest; +import org.jclouds.http.HttpResponse; +import org.jclouds.io.ByteStreams2; +import org.jclouds.io.MutableContentMetadata; +import org.jclouds.io.Payload; +import org.jclouds.io.Payloads; +import org.jclouds.rest.HttpClient; import org.testng.annotations.Test; import com.google.common.collect.Iterables; +import com.google.common.io.ByteSource; +import com.google.common.io.ByteStreams; +import com.google.common.hash.Hashing; +import com.google.common.net.MediaType; +import com.google.common.net.HttpHeaders; @Test(groups = "live") public class RegionScopedBlobStoreContextLiveTest extends BaseBlobStoreIntegrationTest { @@ -74,7 +92,8 @@ public class RegionScopedBlobStoreContextLiveTest extends BaseBlobStoreIntegrati } @Test - public void testSignBlob() throws InterruptedException, ExecutionException { + public void testSign() throws InterruptedException, ExecutionException, + IOException { RegionScopedBlobStoreContext ctx = RegionScopedBlobStoreContext.class.cast(view); for (String regionId : ctx.getConfiguredRegions()) { BlobStore region = ctx.getBlobStore(regionId); @@ -83,13 +102,65 @@ public class RegionScopedBlobStoreContextLiveTest extends BaseBlobStoreIntegrati continue; } String containerName = Iterables.getLast(containers).getName(); - PageSet<? extends StorageMetadata> blobs = region.list(containerName); - if (blobs.isEmpty()) { - continue; + + final ByteSource input = ByteSource.wrap("str".getBytes()); + final HttpClient client = ctx.utils().http(); + + // test signed put + String blobName = "test-" + UUID.randomUUID(); + Blob blob2 = region.blobBuilder(blobName).forSigning() + .contentLength(input.size()) + .contentMD5(input.hash(Hashing.md5()).asBytes()) + .contentType(MediaType.OCTET_STREAM.toString()).build(); + BlobRequestSigner signer = ctx.getSigner(regionId); + HttpResponse response; + try { + HttpRequest putRequest; + putRequest = signer.signPutBlob(containerName, blob2, 600); + MutableContentMetadata metadata = blob2.getMetadata() + .getContentMetadata(); + HttpRequest.Builder<?> putRequestBuilder = putRequest.toBuilder() + .addHeader(HttpHeaders.CONTENT_TYPE, + metadata.getContentType()); + putRequestBuilder.addHeader(HttpHeaders.CONTENT_LENGTH, + String.valueOf(input.size())); + putRequestBuilder.payload(input); + putRequest = putRequestBuilder.build(); + Payload payload = Payloads.newByteArrayPayload(input.read()); + putRequest.setPayload(payload); + assertNotNull(putRequest, "regionId=" + regionId + ", container=" + + containerName + ", blob=" + blobName); + response = client.invoke(putRequest); + if (response.getStatusCode() != 200 + && response.getStatusCode() != 201) { + fail("Signed PUT expected to return 200 or 201 but returned " + + response.getStatusCode()); + } + } catch (Exception e) { + fail("Failed signed put test: " + e); + } + + // test signed get + try { + HttpRequest getRequest = signer.signGetBlob(containerName, + blobName); + assertNotNull(getRequest, "regionId=" + regionId + ", container=" + + containerName + ", blob=" + blobName); + response = client.invoke(getRequest); + if (response.getStatusCode() != 200) { + fail("Signed GET expected to return 200 but returned " + + response.getStatusCode()); + } + Payload payload = response.getPayload(); + if (!Arrays.equals(ByteStreams2.toByteArrayAndClose( + payload.openStream()), input.read())) { + fail("Data with signed GET not identical to what was put: " + + "Input: " + new String(input.read()) + ", Output :" + + ByteStreams2.asByteSource(payload)); + } + } catch (Exception e) { + fail("Failed signed GET test: " + e); } - String blobName = Iterables.getLast(blobs).getName(); - HttpRequest request = ctx.getSigner(regionId).signGetBlob(containerName, blobName); - assertNotNull(request, "regionId=" + regionId + ", container=" + containerName + ", blob=" + blobName); } } }
