Add support for Cache-Control header

Fixes #115.
pull/124/head
Andrew Gaul 2016-01-15 11:56:59 -08:00
rodzic 542c9b8112
commit 744d126331
3 zmienionych plików z 40 dodań i 7 usunięć

Wyświetl plik

@ -1313,6 +1313,9 @@ final class S3ProxyHandler extends AbstractHandler {
String headerValue = Strings.nullToEmpty(request.getHeader(
headerName));
if (headerName.equalsIgnoreCase(
HttpHeaders.CACHE_CONTROL)) {
contentMetadata.cacheControl(headerValue);
} else if (headerName.equalsIgnoreCase(
HttpHeaders.CONTENT_DISPOSITION)) {
contentMetadata.contentDisposition(headerValue);
} else if (headerName.equalsIgnoreCase(
@ -2060,6 +2063,8 @@ final class S3ProxyHandler extends AbstractHandler {
BlobMetadata metadata) {
ContentMetadata contentMetadata =
metadata.getContentMetadata();
response.addHeader(HttpHeaders.CACHE_CONTROL,
contentMetadata.getCacheControl());
response.addHeader(HttpHeaders.CONTENT_DISPOSITION,
contentMetadata.getContentDisposition());
response.addHeader(HttpHeaders.CONTENT_ENCODING,
@ -2468,7 +2473,9 @@ final class S3ProxyHandler extends AbstractHandler {
Strings.nullToEmpty(request.getHeader(headerName)));
}
}
builder.contentDisposition(request.getHeader(
builder.cacheControl(request.getHeader(
HttpHeaders.CACHE_CONTROL))
.contentDisposition(request.getHeader(
HttpHeaders.CONTENT_DISPOSITION))
.contentEncoding(request.getHeader(
HttpHeaders.CONTENT_ENCODING))

Wyświetl plik

@ -30,7 +30,6 @@ import com.google.common.util.concurrent.Uninterruptibles;
import org.jclouds.Constants;
import org.jclouds.blobstore.BlobStoreContext;
import org.jclouds.s3.S3ClientLiveTest;
import org.jclouds.s3.domain.S3Object;
import org.testng.SkipException;
import org.testng.annotations.AfterClass;
import org.testng.annotations.Test;
@ -127,9 +126,4 @@ public final class JcloudsS3ClientLiveTest extends S3ClientLiveTest {
return new URL(String.format("%s/%s/%s", URI.create(endpoint),
containerName, key));
}
@Override
protected void assertCacheControl(S3Object newObject, String string) {
// Cache-Control not supported
}
}

Wyświetl plik

@ -70,6 +70,13 @@ import org.junit.Test;
public final class S3ProxyTest {
private static final ByteSource BYTE_SOURCE = ByteSource.wrap(new byte[1]);
private static final Set<String> BLOBSTORE_NO_CACHE_CONTROL_SUPPORT =
ImmutableSet.of(
"atmos",
"rackspace-cloudfiles-uk",
"rackspace-cloudfiles-us",
"openstack-swift"
);
private static final Set<String> SWIFT_BLOBSTORES = ImmutableSet.of(
"rackspace-cloudfiles-uk",
"rackspace-cloudfiles-us",
@ -369,6 +376,7 @@ public final class S3ProxyTest {
@Test
public void testSinglepartUpload() throws Exception {
String blobName = "singlepart-upload";
String cacheControl = "max-age=3600";
String contentDisposition = "attachment; filename=new.jpg";
String contentEncoding = "gzip";
String contentLanguage = "fr";
@ -378,6 +386,7 @@ public final class S3ProxyTest {
"key2", "value2");
Blob blob = s3BlobStore.blobBuilder(blobName)
.payload(BYTE_SOURCE)
.cacheControl(cacheControl)
.contentDisposition(contentDisposition)
.contentEncoding(contentEncoding)
.contentLanguage(contentLanguage)
@ -396,6 +405,10 @@ public final class S3ProxyTest {
}
ContentMetadata newContentMetadata =
newBlob.getMetadata().getContentMetadata();
if (!BLOBSTORE_NO_CACHE_CONTROL_SUPPORT.contains(blobStoreType)) {
assertThat(newContentMetadata.getCacheControl()).isEqualTo(
cacheControl);
}
assertThat(newContentMetadata.getContentDisposition()).isEqualTo(
contentDisposition);
assertThat(newContentMetadata.getContentEncoding()).isEqualTo(
@ -416,6 +429,7 @@ public final class S3ProxyTest {
@Test
public void testMultipartUpload() throws Exception {
String blobName = "multipart-upload";
String cacheControl = "max-age=3600";
String contentDisposition = "attachment; filename=new.jpg";
String contentEncoding = "gzip";
String contentLanguage = "fr";
@ -425,6 +439,7 @@ public final class S3ProxyTest {
"key2", "value2");
BlobMetadata blobMetadata = s3BlobStore.blobBuilder(blobName)
.payload(new byte[0]) // fake payload to add content metadata
.cacheControl(cacheControl)
.contentDisposition(contentDisposition)
.contentEncoding(contentEncoding)
.contentLanguage(contentLanguage)
@ -459,6 +474,10 @@ public final class S3ProxyTest {
}
ContentMetadata newContentMetadata =
newBlob.getMetadata().getContentMetadata();
if (!BLOBSTORE_NO_CACHE_CONTROL_SUPPORT.contains(blobStoreType)) {
assertThat(newContentMetadata.getCacheControl()).isEqualTo(
cacheControl);
}
assertThat(newContentMetadata.getContentDisposition()).isEqualTo(
contentDisposition);
assertThat(newContentMetadata.getContentEncoding()).isEqualTo(
@ -513,6 +532,7 @@ public final class S3ProxyTest {
public void testCopyObjectPreserveMetadata() throws Exception {
String fromName = "from-name";
String toName = "to-name";
String cacheControl = "max-age=3600";
String contentDisposition = "attachment; filename=old.jpg";
String contentEncoding = "gzip";
String contentLanguage = "en";
@ -522,6 +542,7 @@ public final class S3ProxyTest {
"key2", "value2");
Blob fromBlob = s3BlobStore.blobBuilder(fromName)
.payload(BYTE_SOURCE)
.cacheControl(cacheControl)
.contentLength(BYTE_SOURCE.size())
.contentDisposition(contentDisposition)
.contentEncoding(contentEncoding)
@ -542,6 +563,10 @@ public final class S3ProxyTest {
}
ContentMetadata contentMetadata =
toBlob.getMetadata().getContentMetadata();
if (!BLOBSTORE_NO_CACHE_CONTROL_SUPPORT.contains(blobStoreType)) {
assertThat(contentMetadata.getCacheControl()).isEqualTo(
cacheControl);
}
assertThat(contentMetadata.getContentDisposition()).isEqualTo(
contentDisposition);
assertThat(contentMetadata.getContentEncoding()).isEqualTo(
@ -564,6 +589,7 @@ public final class S3ProxyTest {
Blob fromBlob = s3BlobStore.blobBuilder(fromName)
.payload(BYTE_SOURCE)
.contentLength(BYTE_SOURCE.size())
.cacheControl("max-age=3600")
.contentDisposition("attachment; filename=old.jpg")
.contentEncoding("compress")
.contentLanguage("en")
@ -575,11 +601,13 @@ public final class S3ProxyTest {
.build();
s3BlobStore.putBlob(containerName, fromBlob);
String cacheControl = "max-age=1800";
String contentDisposition = "attachment; filename=new.jpg";
String contentEncoding = "gzip";
String contentLanguage = "fr";
String contentType = "audio/mp4";
ContentMetadata contentMetadata = ContentMetadataBuilder.create()
.cacheControl(cacheControl)
.contentDisposition(contentDisposition)
.contentEncoding(contentEncoding)
.contentLanguage(contentLanguage)
@ -602,6 +630,10 @@ public final class S3ProxyTest {
}
ContentMetadata toContentMetadata =
toBlob.getMetadata().getContentMetadata();
if (!BLOBSTORE_NO_CACHE_CONTROL_SUPPORT.contains(blobStoreType)) {
assertThat(contentMetadata.getCacheControl()).isEqualTo(
cacheControl);
}
assertThat(toContentMetadata.getContentDisposition()).isEqualTo(
contentDisposition);
assertThat(toContentMetadata.getContentEncoding()).isEqualTo(