mirror of https://github.com/apache/jclouds.git
s3: explicitly set Expect header on methods that need it
This commit is contained in:
parent
2c3c3fad52
commit
1c2090fd08
|
@ -18,6 +18,7 @@
|
|||
*/
|
||||
package org.jclouds.s3;
|
||||
|
||||
import static com.google.common.net.HttpHeaders.EXPECT;
|
||||
import static org.jclouds.blobstore.attr.BlobScopes.CONTAINER;
|
||||
|
||||
import java.util.Set;
|
||||
|
@ -168,6 +169,7 @@ public interface S3AsyncClient {
|
|||
@Named("PutObject")
|
||||
@PUT
|
||||
@Path("/{key}")
|
||||
@Headers(keys = EXPECT, values = "100-continue")
|
||||
@ResponseParser(ParseETagHeader.class)
|
||||
ListenableFuture<String> putObject(
|
||||
@Bucket @EndpointParam(parser = AssignCorrectHostnameForBucket.class) @BinderParam(BindAsHostPrefixIfConfigured.class) @ParamValidators(BucketNameValidator.class) String bucketName,
|
||||
|
|
|
@ -82,6 +82,7 @@ public class PathBasedS3ClientExpectTest extends BaseS3ClientExpectTest {
|
|||
|
||||
HttpRequest bucketFooExists = HttpRequest.builder().method("PUT")
|
||||
.endpoint("https://s3.amazonaws.com/bucket/object")
|
||||
.addHeader("Expect", "100-continue")
|
||||
.addHeader("Date", CONSTANT_DATE)
|
||||
.addHeader("Authorization", "AWS identity:6gC0m7SYFDPwkUqY5EHV/6i9DfM=")
|
||||
.payload("hello world")
|
||||
|
|
|
@ -20,7 +20,10 @@ package org.jclouds.s3;
|
|||
|
||||
import static com.google.common.net.HttpHeaders.CONTENT_LENGTH;
|
||||
import static com.google.common.net.HttpHeaders.ETAG;
|
||||
import static com.google.common.net.HttpHeaders.EXPECT;
|
||||
import static com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor;
|
||||
import static org.jclouds.Constants.PROPERTY_MAX_RETRIES;
|
||||
import static org.jclouds.Constants.PROPERTY_SO_TIMEOUT;
|
||||
import static org.jclouds.s3.reference.S3Constants.PROPERTY_S3_VIRTUAL_HOST_BUCKETS;
|
||||
import static org.testng.Assert.assertEquals;
|
||||
|
||||
|
@ -46,7 +49,7 @@ import com.google.mockwebserver.RecordedRequest;
|
|||
*
|
||||
* @author Adrian Cole
|
||||
*/
|
||||
@Test
|
||||
@Test(singleThreaded = true)
|
||||
public class S3ClientMockTest {
|
||||
|
||||
private static final Set<Module> modules = ImmutableSet.<Module> of(
|
||||
|
@ -55,7 +58,9 @@ public class S3ClientMockTest {
|
|||
static RestContext<? extends S3Client,? extends S3AsyncClient> getContext(URL server) {
|
||||
Properties overrides = new Properties();
|
||||
overrides.setProperty(PROPERTY_S3_VIRTUAL_HOST_BUCKETS, "false");
|
||||
|
||||
// prevent expect-100 bug http://code.google.com/p/mockwebserver/issues/detail?id=6
|
||||
overrides.setProperty(PROPERTY_SO_TIMEOUT, "0");
|
||||
overrides.setProperty(PROPERTY_MAX_RETRIES, "1");
|
||||
return ContextBuilder.newBuilder("s3")
|
||||
.credentials("accessKey", "secretKey")
|
||||
.endpoint(server.toString())
|
||||
|
@ -79,6 +84,8 @@ public class S3ClientMockTest {
|
|||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT /bucket/object HTTP/1.1");
|
||||
assertEquals(request.getHeaders(CONTENT_LENGTH), ImmutableList.of("0"));
|
||||
// will fail unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals(request.getHeaders(EXPECT), ImmutableList.of("100-continue"));
|
||||
server.shutdown();
|
||||
}
|
||||
|
||||
|
@ -90,12 +97,14 @@ public class S3ClientMockTest {
|
|||
S3Client client = getContext(server.getUrl("/")).getApi();
|
||||
S3Object fileInDir = client.newS3Object();
|
||||
fileInDir.getMetadata().setKey("someDir/fileName");
|
||||
fileInDir.setPayload(new byte[] {});
|
||||
fileInDir.setPayload(new byte[] { 1, 2, 3, 4 });
|
||||
|
||||
assertEquals(client.putObject("bucket", fileInDir), "ABCDEF");
|
||||
|
||||
RecordedRequest request = server.takeRequest();
|
||||
assertEquals(request.getRequestLine(), "PUT /bucket/someDir/fileName HTTP/1.1");
|
||||
// will fail unless -Dsun.net.http.allowRestrictedHeaders=true is set
|
||||
assertEquals(request.getHeaders(EXPECT), ImmutableList.of("100-continue"));
|
||||
|
||||
server.shutdown();
|
||||
}
|
||||
|
|
|
@ -82,6 +82,7 @@ public class S3BlobSignerExpectTest extends BaseBlobSignerExpectTest {
|
|||
protected HttpRequest putBlob() {
|
||||
return HttpRequest.builder().method("PUT")
|
||||
.endpoint("https://container.s3.amazonaws.com/name")
|
||||
.addHeader("Expect", "100-continue")
|
||||
.addHeader("Host", "container.s3.amazonaws.com")
|
||||
.addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
|
||||
.addHeader("Authorization", "AWS identity:j9Dy/lmmvlCKjA4lkqZenLxMkR4=").build();
|
||||
|
@ -98,6 +99,7 @@ public class S3BlobSignerExpectTest extends BaseBlobSignerExpectTest {
|
|||
protected HttpRequest putBlobWithTime() {
|
||||
return HttpRequest.builder().method("PUT")
|
||||
.endpoint("https://container.s3.amazonaws.com/name")
|
||||
.addHeader("Expect", "100-continue")
|
||||
.addHeader("Host", "container.s3.amazonaws.com")
|
||||
.addHeader("Date", "Thu, 05 Jun 2008 16:38:19 GMT")
|
||||
.addHeader("Authorization", "AWS identity:0uvBv1wEskuhFHYJF/L6kEV9A7o=").build();
|
||||
|
|
|
@ -105,7 +105,7 @@ public class AWSS3AsyncClientTest extends S3AsyncClientTest<AWSS3AsyncClient> {
|
|||
blobToS3Object.apply(BindBlobToMultipartFormTest.TEST_BLOB)));
|
||||
|
||||
assertRequestLineEquals(request, "PUT https://bucket." + url + "/hello HTTP/1.1");
|
||||
assertNonPayloadHeadersEqual(request, "Host: bucket." + url + "\n");
|
||||
assertNonPayloadHeadersEqual(request, "Expect: 100-continue\nHost: bucket." + url + "\n");
|
||||
assertPayloadEquals(request, "hello", "text/plain", false);
|
||||
|
||||
assertResponseParserClassEquals(method, request, ParseETagHeader.class);
|
||||
|
|
|
@ -73,6 +73,7 @@ public class AWSS3ClientExpectTest extends BaseAWSS3ClientExpectTest {
|
|||
HttpRequest.builder()
|
||||
.method("PUT")
|
||||
.endpoint("https://test.s3-eu-west-1.amazonaws.com/test")
|
||||
.addHeader("Expect", "100-continue")
|
||||
.addHeader("x-amz-storage-class", "REDUCED_REDUNDANCY")
|
||||
.addHeader("Host", "test.s3-eu-west-1.amazonaws.com")
|
||||
.addHeader("Date", CONSTANT_DATE)
|
||||
|
|
Loading…
Reference in New Issue