diff --git a/providers/azureblob/pom.xml b/providers/azureblob/pom.xml index fa39b104277..1cc22975ecc 100644 --- a/providers/azureblob/pom.xml +++ b/providers/azureblob/pom.xml @@ -33,7 +33,7 @@ https://${jclouds.identity}.blob.core.windows.net - 2012-02-12 + 2013-08-15 ${test.azure.identity} ${test.azure.credential} diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobApiMetadata.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobApiMetadata.java index ade52bc9e21..c193852c4e6 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobApiMetadata.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobApiMetadata.java @@ -62,7 +62,7 @@ protected Builder() { .name("Microsoft Azure Blob Service API") .identityName("Account Name") .credentialName("Access Key") - .version("2012-02-12") + .version("2013-08-15") .defaultEndpoint("https://${jclouds.identity}.blob.core.windows.net") .documentation(URI.create("http://msdn.microsoft.com/en-us/library/dd135733.aspx")) .defaultProperties(AzureBlobApiMetadata.defaultProperties()) diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobClient.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobClient.java index 7223888040d..368dda01e5e 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobClient.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/AzureBlobClient.java @@ -415,7 +415,8 @@ BlobProperties getBlobProperties( @PUT @Path("{container}/{name}") @QueryParams(keys = { "comp" }, values = { "metadata" }) - void setBlobMetadata( + @ResponseParser(ParseETagHeader.class) + String setBlobMetadata( @PathParam("container") @ParamValidators(ContainerNameValidator.class) String container, @PathParam("name") String name, @BinderParam(BindMapToHeadersWithPrefix.class) Map metadata); diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java index 2a208f48454..dcf6aaff1fc 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToMultipartRequest.java @@ -55,7 +55,10 @@ public R bindToRequest(R request, Object input) { // bind BlockList-specific headers ImmutableMap.Builder headers = ImmutableMap.builder(); ContentMetadata contentMetadata = blob.getProperties().getContentMetadata(); - // TODO: bind x-ms-blob-content-disposition after upgrading to API 2013-08-15 + String contentDisposition = contentMetadata.getContentDisposition(); + if (contentDisposition != null) { + headers.put("x-ms-blob-content-disposition", contentDisposition); + } String contentEncoding = contentMetadata.getContentEncoding(); if (contentEncoding != null) { headers.put("x-ms-blob-content-encoding", contentEncoding); diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java index cc2a2f0351b..2a258d1bb33 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/binders/BindAzureBlobMetadataToRequest.java @@ -59,6 +59,11 @@ public R bindToRequest(R request, Object input) { headers.put("x-ms-blob-type", blob.getProperties().getType().toString()); + String contentDisposition = blob.getPayload().getContentMetadata().getContentDisposition(); + if (contentDisposition != null) { + headers.put("x-ms-blob-content-disposition", contentDisposition); + } + switch (blob.getProperties().getType()) { case PAGE_BLOB: headers.put(HttpHeaders.CONTENT_LENGTH, "0"); diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java index a59ca8b6796..544acf68061 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/AccountNameEnumerationResultsHandler.java @@ -16,7 +16,10 @@ */ package org.jclouds.azureblob.xml; +import static com.google.common.base.Throwables.propagate; + import java.net.URI; +import java.net.URISyntaxException; import java.util.Date; import java.util.Map; import java.util.SortedSet; @@ -50,7 +53,7 @@ public class AccountNameEnumerationResultsHandler extends private String marker; private int maxResults; private String nextMarker; - private URI currentUrl; + private String currentName; private Date currentLastModified; private String currentETag; private boolean inMetadata; @@ -75,7 +78,7 @@ public void startElement(String uri, String localName, String qName, Attributes } else if (qName.equals("Metadata")) { inMetadata = true; } else if (qName.equals("EnumerationResults")) { - accountUrl = URI.create(attributes.getValue("AccountName").toString().trim()); + accountUrl = URI.create(attributes.getValue("ServiceEndpoint").trim()); } } @@ -101,14 +104,20 @@ public void endElement(String uri, String name, String qName) { nextMarker = currentText.toString().trim(); nextMarker = (nextMarker.equals("")) ? null : nextMarker; } else if (qName.equals("Container")) { + URI currentUrl; + try { + currentUrl = new URI(accountUrl.getScheme(), accountUrl.getHost(), "/" + currentName, null); + } catch (URISyntaxException use) { + throw propagate(use); + } containerMetadata.add(new ContainerPropertiesImpl(currentUrl, currentLastModified, currentETag, currentMetadata)); - currentUrl = null; + currentName = null; currentLastModified = null; currentETag = null; currentMetadata = Maps.newHashMap(); - } else if (qName.equals("Url")) { - currentUrl = URI.create(currentText.toString().trim()); + } else if (qName.equals("Name")) { + currentName = currentText.toString().trim(); } else if (qName.equals("Last-Modified")) { currentLastModified = dateParser.rfc822DateParse(currentText.toString().trim()); } else if (qName.equals("Etag")) { diff --git a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/ContainerNameEnumerationResultsHandler.java b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/ContainerNameEnumerationResultsHandler.java index 09735957866..c22d9b82a4e 100644 --- a/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/ContainerNameEnumerationResultsHandler.java +++ b/providers/azureblob/src/main/java/org/jclouds/azureblob/xml/ContainerNameEnumerationResultsHandler.java @@ -54,7 +54,6 @@ public class ContainerNameEnumerationResultsHandler extends ParseSax.HandlerWith private String marker; private int maxResults; private String nextMarker; - private URI currentUrl; private URI containerUrl; private Date currentLastModified; private String currentETag; @@ -103,7 +102,7 @@ public void startElement(String uri, String localName, String qName, Attributes inBlob = true; inMetadata = true; } else if (qName.equals("EnumerationResults")) { - containerUrl = URI.create(attributes.getValue("ContainerName").toString().trim()); + containerUrl = URI.create(attributes.getValue("ServiceEndpoint").trim() + attributes.getValue("ContainerName").trim()); } } @@ -131,6 +130,7 @@ public void endElement(String uri, String name, String qName) { } else if (qName.equals("LeaseStatus")) { currentLeaseStatus = LeaseStatus.fromValue(currentText.toString().trim()); } else if (qName.equals("Blob")) { + URI currentUrl = uriBuilder(containerUrl + "/" + currentName).build(); BlobProperties md = new BlobPropertiesImpl(currentBlobType, currentName, containerUrl.getPath().replace("/", ""), currentUrl, currentLastModified, currentETag, currentSize, currentContentType, currentContentMD5, currentContentEncoding, currentContentLanguage, currentExpires, @@ -138,7 +138,6 @@ public void endElement(String uri, String name, String qName) { blobMetadata.add(md); currentBlobType = null; currentName = null; - currentUrl = null; currentLastModified = null; currentETag = null; currentSize = -1; @@ -149,8 +148,6 @@ public void endElement(String uri, String name, String qName) { currentLeaseStatus = null; currentExpires = null; currentMetadata = Maps.newHashMap(); - } else if (qName.equals("Url")) { - currentUrl = uriBuilder(currentText.toString().trim()).build(); } else if (qName.equals("Last-Modified")) { currentLastModified = dateParser.rfc822DateParse(currentText.toString().trim()); } else if (qName.equals("Etag")) { diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java index de8d90cd221..e9929003a99 100644 --- a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java +++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientLiveTest.java @@ -29,6 +29,7 @@ import java.net.URI; import java.security.SecureRandom; import java.util.Arrays; +import java.util.Map; import java.util.Set; import org.jclouds.azure.storage.AzureStorageResponseException; @@ -231,32 +232,26 @@ public void testObjectOperations() throws Exception { // Test HEAD of object BlobProperties metadata = getApi().getBlobProperties(privateContainer, object.getProperties().getName()); - // TODO assertEquals(metadata.getName(), - // object.getProperties().getName()); - // we can't check this while hacking around lack of content-md5, as GET of - // the first byte will - // show incorrect length 1, the returned size, as opposed to the real - // length. This is an ok - // tradeoff, as a container list will contain the correct size of the - // objects in an - // inexpensive fashion - // http://code.google.com/p/jclouds/issues/detail?id=92 - // assertEquals(metadata.getSize(), data.length()); + assertEquals(metadata.getName(), object.getProperties().getName()); + assertEquals(metadata.getContentMetadata().getContentLength(), Long.valueOf(data.length())); assertEquals(metadata.getContentMetadata().getContentType(), "text/plain"); - // Azure doesn't return the Content-MD5 on head request.. - assertEquals(base16().lowerCase().encode(md5), + assertEquals(base16().lowerCase().encode(metadata.getContentMetadata().getContentMD5()), base16().lowerCase().encode(object.getProperties().getContentMetadata().getContentMD5())); assertEquals(metadata.getETag(), newEtag); assertEquals(metadata.getMetadata().entrySet().size(), 1); assertEquals(metadata.getMetadata().get("mykey"), "metadata-value"); - // // Test POST to update object's metadata - // Multimap userMetadata = LinkedHashMultimap.create(); - // userMetadata.put("New-Metadata-1", "value-1"); - // userMetadata.put("New-Metadata-2", "value-2"); - // assertTrue(getApi().setBlobProperties(privateContainer, - // object.getProperties().getName(), - // userMetadata)); + // Test POST to update object's metadata + Map userMetadata = ImmutableMap.builder() + .put("new_metadata_1", "value-1") + .put("new_metadata_2", "value-2") + .build(); + String eTag = getApi().setBlobMetadata(privateContainer, object.getProperties().getName(), userMetadata); + assertThat(eTag).isNotNull(); + + // Azure ETag are timestamps not content hash + String eTag2 = getApi().setBlobMetadata(privateContainer, object.getProperties().getName(), userMetadata); + assertThat(eTag2).isNotNull().isNotEqualTo(eTag); // Test GET of missing object assert getApi().getBlob(privateContainer, "non-existent-object") == null; @@ -264,21 +259,14 @@ public void testObjectOperations() throws Exception { // Test GET of object (including updated metadata) AzureBlob getBlob = getApi().getBlob(privateContainer, object.getProperties().getName()); assertEquals(Strings2.toStringAndClose(getBlob.getPayload().openStream()), data); - // TODO assertEquals(getBlob.getName(), object.getProperties().getName()); + assertEquals(getBlob.getProperties().getName(), object.getProperties().getName()); assertEquals(getBlob.getPayload().getContentMetadata().getContentLength(), Long.valueOf(data.length())); assertEquals(getBlob.getProperties().getContentMetadata().getContentType(), "text/plain"); assertEquals(base16().lowerCase().encode(md5), base16().lowerCase().encode(getBlob.getProperties().getContentMetadata().getContentMD5())); - assertEquals(newEtag, getBlob.getProperties().getETag()); - // wait until we can update metadata - // assertEquals(getBlob.getProperties().getMetadata().entries().size(), - // 2); - // assertEquals( - // Iterables.getLast(getBlob.getProperties().getMetadata().get("New-Metadata-1")), - // "value-1"); - // assertEquals( - // Iterables.getLast(getBlob.getProperties().getMetadata().get("New-Metadata-2")), - // "value-2"); + assertEquals(getBlob.getProperties().getMetadata().size(), 2); + assertEquals(getBlob.getProperties().getMetadata().get("new_metadata_1"), "value-1"); + assertEquals(getBlob.getProperties().getMetadata().get("new_metadata_2"), "value-2"); assertEquals(metadata.getMetadata().entrySet().size(), 1); assertEquals(metadata.getMetadata().get("mykey"), "metadata-value"); @@ -290,7 +278,9 @@ public void testObjectOperations() throws Exception { .maxResults(1).includeMetadata()); assertEquals(response.size(), 1); assertEquals(Iterables.getOnlyElement(response).getName(), object.getProperties().getName()); - assertEquals(Iterables.getOnlyElement(response).getMetadata(), ImmutableMap.of("mykey", "metadata-value")); + assertEquals(Iterables.getOnlyElement(response).getMetadata().size(), 2); + assertEquals(Iterables.getOnlyElement(response).getMetadata().get("new_metadata_1"), "value-1"); + assertEquals(Iterables.getOnlyElement(response).getMetadata().get("new_metadata_2"), "value-2"); // Test PUT with invalid ETag (as if object's data was corrupted in // transit) diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java index 18a266af820..7d6540016dc 100644 --- a/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java +++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/AzureBlobClientTest.java @@ -62,7 +62,7 @@ public void testListContainers() throws SecurityException, NoSuchMethodException GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of()); assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/?comp=list HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseSax.class); @@ -77,7 +77,7 @@ public void testListContainersOptions() throws SecurityException, NoSuchMethodEx assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/?comp=list&maxresults=1&marker=marker&prefix=prefix HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseSax.class); @@ -92,7 +92,7 @@ public void testCreateContainer() throws SecurityException, NoSuchMethodExceptio assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/container?restype=container HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class); @@ -106,7 +106,7 @@ public void testDeleteContainer() throws SecurityException, NoSuchMethodExceptio assertRequestLineEquals(request, "DELETE https://identity.blob.core.windows.net/container?restype=container HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); @@ -125,7 +125,7 @@ public void testCreateContainerOptions() throws SecurityException, NoSuchMethodE assertNonPayloadHeadersEqual(request, "x-ms-blob-public-access: blob\n" + "x-ms-meta-foo: bar\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class); @@ -139,7 +139,7 @@ public void testCreateRootContainer() throws SecurityException, NoSuchMethodExce GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of()); assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/$root?restype=container HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class); @@ -152,7 +152,7 @@ public void testDeleteRootContainer() throws SecurityException, NoSuchMethodExce GeneratedHttpRequest request = processor.createRequest(method, ImmutableList.of()); assertRequestLineEquals(request, "DELETE https://identity.blob.core.windows.net/$root?restype=container HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); @@ -169,7 +169,7 @@ public void testCreateRootContainerOptions() throws SecurityException, NoSuchMet assertNonPayloadHeadersEqual(request, "x-ms-blob-public-access: blob\n" + "x-ms-meta-foo: bar\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReturnTrueIf2xx.class); @@ -183,7 +183,7 @@ public void testListBlobs() throws SecurityException, NoSuchMethodException, IOE assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/container?restype=container&comp=list HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseSax.class); @@ -197,7 +197,7 @@ public void testListRootBlobs() throws SecurityException, NoSuchMethodException, assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/$root?restype=container&comp=list HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseSax.class); @@ -211,7 +211,7 @@ public void testContainerProperties() throws SecurityException, NoSuchMethodExce assertRequestLineEquals(request, "HEAD https://identity.blob.core.windows.net/container?restype=container HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseContainerPropertiesFromHeaders.class); @@ -225,7 +225,7 @@ public void testGetPublicAccessForContainer() throws SecurityException, NoSuchMe assertRequestLineEquals(request, "HEAD https://identity.blob.core.windows.net/container?restype=container&comp=acl HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParsePublicAccessHeader.class); @@ -250,7 +250,7 @@ private void setAndVerifyPublicAccessForContainer(PublicAccess access, String ex "PUT https://identity.blob.core.windows.net/container?restype=container&comp=acl HTTP/1.1"); assertNonPayloadHeadersEqual(request, expectedHeader + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseETagHeader.class); @@ -267,7 +267,7 @@ public void testSetResourceMetadata() throws SecurityException, NoSuchMethodExce "PUT https://identity.blob.core.windows.net/container?restype=container&comp=metadata HTTP/1.1"); assertNonPayloadHeadersEqual(request, "x-ms-meta-key: value\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); @@ -280,7 +280,7 @@ public void testGetBlob() throws SecurityException, NoSuchMethodException, IOExc GeneratedHttpRequest request = processor.createRequest(method, ImmutableList. of("container", "blob")); assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/container/blob HTTP/1.1"); - assertNonPayloadHeadersEqual(request, "x-ms-version: 2012-02-12\n"); + assertNonPayloadHeadersEqual(request, "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertResponseParserClassEquals(method, request, ParseBlobFromHeadersAndHttpContent.class); @@ -296,10 +296,10 @@ public void testSetBlobMetadata() throws SecurityException, NoSuchMethodExceptio "PUT https://identity.blob.core.windows.net/container/blob?comp=metadata HTTP/1.1"); assertNonPayloadHeadersEqual(request, "x-ms-meta-key: value\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); - assertResponseParserClassEquals(method, request, ReleasePayloadAndReturn.class); + assertResponseParserClassEquals(method, request, ParseETagHeader.class); assertSaxResponseParserClassEquals(method, null); assertFallbackClassEquals(method, null); } diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/AzureBlobRequestSignerTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/AzureBlobRequestSignerTest.java index 586e361f2e9..839503cc338 100644 --- a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/AzureBlobRequestSignerTest.java +++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/AzureBlobRequestSignerTest.java @@ -60,9 +60,9 @@ public void testSignGetBlob() throws ArrayIndexOutOfBoundsException, SecurityExc assertRequestLineEquals(request, "GET https://identity.blob.core.windows.net/container/name HTTP/1.1"); assertNonPayloadHeadersEqual( request, - "Authorization: SharedKeyLite identity:3rx56J9eAw/0GH2pym1hBmMGQmGju4DkVDcRsBWBtAk=\n" + + "Authorization: SharedKeyLite identity:cP8Cm4r3hBbhkD/OUg5t8nRwt3SkLKOIppKIb1lRce4=\n" + "Date: Thu, 05 Jun 2008 16:38:19 GMT\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertEquals(request.getFilters().size(), 0); @@ -75,9 +75,9 @@ public void testSignRemoveBlob() throws ArrayIndexOutOfBoundsException, Security assertRequestLineEquals(request, "DELETE https://identity.blob.core.windows.net/container/name HTTP/1.1"); assertNonPayloadHeadersEqual( request, - "Authorization: SharedKeyLite identity:EN3SE/jB9anhgqIqJMmrTCzZpuqjL41BIZnaE9PEBaU=\n" + + "Authorization: SharedKeyLite identity:G6nXsRjrJy8HoVF74MGnuDS358KkBz/GScBROvIZSls=\n" + "Date: Thu, 05 Jun 2008 16:38:19 GMT\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertPayloadEquals(request, null, null, false); assertEquals(request.getFilters().size(), 0); @@ -99,11 +99,11 @@ public void testSignPutBlob() throws ArrayIndexOutOfBoundsException, SecurityExc assertRequestLineEquals(request, "PUT https://identity.blob.core.windows.net/container/name HTTP/1.1"); assertNonPayloadHeadersEqual( request, - "Authorization: SharedKeyLite identity:V0gyrdMZzwQrCvxEfq6eBe8PL233yJ91+aNcISEzjfE=\n" + + "Authorization: SharedKeyLite identity:S2cKS4t1F8ZlLOxzgOZkO8bLeCP3vEko5CTsyIKlcJE=\n" + "Date: Thu, 05 Jun 2008 16:38:19 GMT\n" + "Expect: 100-continue\n" + "x-ms-blob-type: BlockBlob\n" + - "x-ms-version: 2012-02-12\n"); + "x-ms-version: 2013-08-15\n"); assertContentHeadersEqual(request, "text/plain", null, null, null, 2L, hashCode.asBytes(), new Date(1000)); assertEquals(request.getFilters().size(), 0); diff --git a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java index 85e77be7169..1a1ebd5e828 100644 --- a/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java +++ b/providers/azureblob/src/test/java/org/jclouds/azureblob/blobstore/integration/AzureBlobIntegrationLiveTest.java @@ -65,14 +65,6 @@ public void testSetBlobAccess() throws Exception { throw new SkipException("unsupported in Azure"); } - // according to docs, content disposition is not persisted - // http://msdn.microsoft.com/en-us/library/dd179440.aspx - @Override - protected void checkContentDisposition(Blob blob, String contentDisposition) { - assert blob.getPayload().getContentMetadata().getContentDisposition() == null; - assert blob.getMetadata().getContentMetadata().getContentDisposition() == null; - } - public void testMultipartChunkedFileStreamPowerOfTwoSize() throws IOException, InterruptedException { final long limit = MultipartUploadStrategy.MAX_BLOCK_SIZE; ByteSource input = TestUtils.randomByteSource().slice(0, limit); diff --git a/providers/azureblob/src/test/resources/test_list_blobs.xml b/providers/azureblob/src/test/resources/test_list_blobs.xml index 71e1bcddff3..ab040a3598b 100644 --- a/providers/azureblob/src/test/resources/test_list_blobs.xml +++ b/providers/azureblob/src/test/resources/test_list_blobs.xml @@ -1,5 +1,7 @@ - + 4 @@ -46,4 +48,4 @@ newblob2.txt - \ No newline at end of file + diff --git a/providers/azureblob/src/test/resources/test_list_blobs_options.xml b/providers/azureblob/src/test/resources/test_list_blobs_options.xml index ddc9bc3e466..55a33f41b06 100644 --- a/providers/azureblob/src/test/resources/test_list_blobs_options.xml +++ b/providers/azureblob/src/test/resources/test_list_blobs_options.xml @@ -1,6 +1,7 @@ + ServiceEndpoint="https://jclouds.blob.core.windows.net/" + ContainerName="adriancole-blobstore3"> 1 / @@ -23,4 +24,4 @@ 2!68!MDAwMDA2IWFwcGxlcyEwMDAwMjghOTk5OS0xMi0zMVQyMzo1OTo1OS45OTk5OTk5WiE- - \ No newline at end of file + diff --git a/providers/azureblob/src/test/resources/test_list_containers.xml b/providers/azureblob/src/test/resources/test_list_containers.xml index 6ffb0ed33e0..348f2665455 100644 --- a/providers/azureblob/src/test/resources/test_list_containers.xml +++ b/providers/azureblob/src/test/resources/test_list_containers.xml @@ -1,19 +1,19 @@ - + 3 - http://myaccount.blob.core.windows.net/audio + audio Wed, 13 Aug 2008 20:39:39 GMT 0x8CACB9BD7C6B1B2 - http://myaccount.blob.core.windows.net/images + images Wed, 14 Aug 2008 20:39:39 GMT 0x8CACB9BD7C1EEEC - http://myaccount.blob.core.windows.net/textfiles + textfiles Wed, 15 Aug 2008 20:39:39 GMT 0x8CACB9BD7BACAC3 diff --git a/providers/azureblob/src/test/resources/test_list_containers_options.xml b/providers/azureblob/src/test/resources/test_list_containers_options.xml index 913e89c108c..4a1c45e4816 100644 --- a/providers/azureblob/src/test/resources/test_list_containers_options.xml +++ b/providers/azureblob/src/test/resources/test_list_containers_options.xml @@ -1,21 +1,21 @@ - + prefix marker 1 - http://myaccount.blob.core.windows.net/audio + audio Wed, 13 Aug 2008 20:39:39 GMT 0x8CACB9BD7C6B1B2 - http://myaccount.blob.core.windows.net/images + images Wed, 14 Aug 2008 20:39:39 GMT 0x8CACB9BD7C1EEEC - http://myaccount.blob.core.windows.net/textfiles + textfiles Wed, 15 Aug 2008 20:39:39 GMT 0x8CACB9BD7BACAC3