You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by za...@apache.org on 2015/04/07 23:33:04 UTC
[06/32] jclouds git commit: Refactored CDN headers and test classes
Refactored CDN headers and test classes
Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/d13ff0eb
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/d13ff0eb
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/d13ff0eb
Branch: refs/heads/master
Commit: d13ff0ebd972198482c60e5971770ffe3eb53264
Parents: 1814627
Author: Jeremy Daggett <je...@rackspace.com>
Authored: Mon Mar 10 11:40:08 2014 -0700
Committer: Everett Toews <ev...@rackspace.com>
Committed: Thu Apr 3 16:46:35 2014 -0500
----------------------------------------------------------------------
.../v1/options/UpdateCDNContainerOptions.java | 86 +++---
.../v1/reference/CloudFilesHeaders.java | 9 +-
.../v1/features/CloudFilesCDNApiLiveTest.java | 129 ++++++--
.../v1/features/CloudFilesCDNApiMockTest.java | 302 +++++++++++++------
.../options/UpdateCDNContainerOptionsTest.java | 111 +++++++
5 files changed, 476 insertions(+), 161 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d13ff0eb/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptions.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptions.java b/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptions.java
index d044657..0fcb177 100644
--- a/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptions.java
+++ b/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptions.java
@@ -1,5 +1,4 @@
/*
-
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
@@ -19,6 +18,11 @@ package org.jclouds.rackspace.cloudfiles.v1.options;
import static com.google.common.base.Preconditions.checkNotNull;
import static com.google.common.base.Preconditions.checkState;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_DIRECTORY_TYPE;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_ERROR;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_INDEX;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_LISTINGS;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_LISTINGS_CSS;
import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_ENABLED;
import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_LOG_RETENTION;
import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_TTL;
@@ -27,13 +31,11 @@ import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CD
import org.jclouds.http.options.BaseHttpRequestOptions;
+import com.google.common.net.MediaType;
+
/**
- * Contains options supported in the REST API for updating CDN containers.
+ * Options supported for updating CDN containers.
*
- * <a href=
- * "http://docs.rackspace.com/files/api/v1/cf-devguide/content/Update_CDN-Enabled_Container_Metadata-d1e2787.html">
- * Update CDN container</a>.
- *
* @author Jeremy Daggett
*/
public class UpdateCDNContainerOptions extends BaseHttpRequestOptions {
@@ -59,19 +61,18 @@ public class UpdateCDNContainerOptions extends BaseHttpRequestOptions {
/**
* Enables or disables the CDN Container
- * API to enable disable - is this necessary?
*/
public UpdateCDNContainerOptions enabled(boolean enabled) {
headers.put(CDN_ENABLED, Boolean.toString(enabled));
return this;
}
-
+
/**
- * Sets the index page for the Static Website.
+ * Sets the directory marker type for the Static Website.
*/
- public UpdateCDNContainerOptions staticWebsiteIndexPage(String indexPage) {
- checkNotNull(indexPage, "index page cannot be null");
- headers.put("indexPage", indexPage);
+ public UpdateCDNContainerOptions staticWebsiteDirectoryType(MediaType directoryType) {
+ checkNotNull(directoryType, "directoryType cannot be null");
+ headers.put(STATIC_WEB_DIRECTORY_TYPE, directoryType.toString());
return this;
}
@@ -80,7 +81,16 @@ public class UpdateCDNContainerOptions extends BaseHttpRequestOptions {
*/
public UpdateCDNContainerOptions staticWebsiteErrorPage(String errorPage) {
checkNotNull(errorPage, "error page cannot be null");
- headers.put("errorPage", errorPage);
+ headers.put(STATIC_WEB_ERROR, errorPage);
+ return this;
+ }
+
+ /**
+ * Sets the index page for the Static Website.
+ */
+ public UpdateCDNContainerOptions staticWebsiteIndexPage(String indexPage) {
+ checkNotNull(indexPage, "index page cannot be null");
+ headers.put(STATIC_WEB_INDEX, indexPage);
return this;
}
@@ -88,35 +98,37 @@ public class UpdateCDNContainerOptions extends BaseHttpRequestOptions {
* Enables or disables listings for the Static Website.
*/
public UpdateCDNContainerOptions staticWebsiteListings(boolean listings) {
- headers.put("enableListings", Boolean.toString(listings));
+ headers.put(STATIC_WEB_LISTINGS, Boolean.toString(listings));
return this;
}
-
+
/**
- * Sets the CSS pages for the Static Website.
+ * Sets the listings CSS page for the Static Website.
*/
public UpdateCDNContainerOptions staticWebsiteListingsCSS(String listingsCSS) {
checkNotNull(listingsCSS, "listingsCSS page cannot be null");
- headers.put("limit", listingsCSS);
+ headers.put(STATIC_WEB_LISTINGS_CSS, listingsCSS);
return this;
}
public static class Builder {
- /** @see UpdateCDNContainerOptions#ttl */
+ /**
+ * @see UpdateCDNContainerOptions#ttl
+ */
public static UpdateCDNContainerOptions ttl(int ttl) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
return options.ttl(ttl);
}
- /**
- * @see UpdateCDNContainerOptions#logRetention
+ /**
+ * @see UpdateCDNContainerOptions#logRetention
*/
public static UpdateCDNContainerOptions logRetention(boolean logRetention) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
return options.logRetention(logRetention);
}
- /**
+ /**
* @see UpdateCDNContainerOptions#enabled
*/
public static UpdateCDNContainerOptions enabled(boolean enabled) {
@@ -124,40 +136,44 @@ public class UpdateCDNContainerOptions extends BaseHttpRequestOptions {
return options.enabled(enabled);
}
- /**
- * @see UpdateCDNContainerOptions#staticWebsiteIndexPage
+ /**
+ * @see UpdateCDNContainerOptions#staticWebsiteDirectoryType
*/
- public static UpdateCDNContainerOptions staticWebsiteIndexPage(String indexPage) {
+ public static UpdateCDNContainerOptions staticWebsiteDirectoryType(MediaType directoryType) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
- return options.staticWebsiteIndexPage(indexPage);
+ return options.staticWebsiteDirectoryType(directoryType);
}
- /**
- * @see UpdateCDNContainerOptions#staticWebsiteErrorPage
+ /**
+ * @see UpdateCDNContainerOptions#staticWebsiteErrorPage
*/
public static UpdateCDNContainerOptions staticWebsiteErrorPage(String errorPage) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
return options.staticWebsiteErrorPage(errorPage);
}
- /**
- * @see UpdateCDNContainerOptions#staticWebsiteListings
+ /**
+ * @see UpdateCDNContainerOptions#staticWebsiteIndexPage
+ */
+ public static UpdateCDNContainerOptions staticWebsiteIndexPage(String indexPage) {
+ UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
+ return options.staticWebsiteIndexPage(indexPage);
+ }
+
+ /**
+ * @see UpdateCDNContainerOptions#staticWebsiteListings
*/
public static UpdateCDNContainerOptions staticWebsiteListings(boolean enabled) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
return options.staticWebsiteListings(enabled);
}
- /**
- * @see UpdateCDNContainerOptions#staticWebsiteListingsCSS
+ /**
+ * @see UpdateCDNContainerOptions#staticWebsiteListingsCSS
*/
public static UpdateCDNContainerOptions staticWebsiteListingsCSS(String cssPage) {
UpdateCDNContainerOptions options = new UpdateCDNContainerOptions();
return options.staticWebsiteListingsCSS(cssPage);
}
}
-
- public static Builder builder() {
- return new Builder();
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d13ff0eb/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/reference/CloudFilesHeaders.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/reference/CloudFilesHeaders.java b/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/reference/CloudFilesHeaders.java
index 7247700..c6d2bc5 100644
--- a/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/reference/CloudFilesHeaders.java
+++ b/apis/rackspace-cloudfiles/src/main/java/org/jclouds/rackspace/cloudfiles/v1/reference/CloudFilesHeaders.java
@@ -39,7 +39,7 @@ public interface CloudFilesHeaders extends SwiftHeaders {
String CDN_SSL_URI = "X-Cdn-Ssl-Uri";
String CDN_STREAMING_URI = "X-Cdn-Streaming-Uri";
String CDN_IOS_URI = "X-Cdn-Ios-Uri";
-
+
// CDN TTL Limits
int CDN_TTL_MIN = 900;
int CDN_TTL_MAX = 31536000;
@@ -48,11 +48,4 @@ public interface CloudFilesHeaders extends SwiftHeaders {
// CDN Purge
String CDN_PURGE_OBJECT_EMAIL = "X-Purge-Email";
String CDN_PURGE_OBJECT_FAILED = "X-Purge-Failed-Reason";
-
- // CDN Static Web
- String STATIC_WEB_INDEX = CONTAINER_METADATA_PREFIX + "Web-Index";
- String STATIC_WEB_DIRECTORY_TYPE = CONTAINER_METADATA_PREFIX + "Web-Directory-Type";
- String STATIC_WEB_ERROR = CONTAINER_METADATA_PREFIX + "Web-Error";
- String STATIC_WEB_LISTINGS = CONTAINER_METADATA_PREFIX + "Web-Listings";
- String STATIC_WEB_LISTINGS_CSS = CONTAINER_METADATA_PREFIX + "Web-Listings-CSS";
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d13ff0eb/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiLiveTest.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiLiveTest.java b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiLiveTest.java
index 15a9dd9..3e450fd 100644
--- a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiLiveTest.java
+++ b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiLiveTest.java
@@ -16,19 +16,32 @@
*/
package org.jclouds.rackspace.cloudfiles.v1.features;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertNotEquals;
import static org.testng.Assert.assertNotNull;
+import static org.testng.Assert.assertNull;
import static org.testng.Assert.assertTrue;
import java.util.List;
+import org.jclouds.http.options.GetOptions;
+import org.jclouds.io.Payload;
+import org.jclouds.io.Payloads;
+import org.jclouds.openstack.swift.v1.features.ObjectApi;
import org.jclouds.openstack.swift.v1.options.CreateContainerOptions;
import org.jclouds.openstack.swift.v1.options.ListContainerOptions;
import org.jclouds.rackspace.cloudfiles.v1.domain.CDNContainer;
import org.jclouds.rackspace.cloudfiles.v1.internal.BaseCloudFilesApiLiveTest;
+import org.jclouds.rackspace.cloudfiles.v1.options.UpdateCDNContainerOptions;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.io.ByteSource;
+
+
/**
* Tests the live behavior of the {@code CloudFilesCDNApi}.
*
@@ -43,21 +56,44 @@ public class CloudFilesCDNApiLiveTest extends BaseCloudFilesApiLiveTest {
super();
}
- public void testList() throws Exception {
+ public void testEnable() throws Exception {
for (String regionId : regions) {
- CDNApi cdnApi = api.cdnApiInRegion(regionId);
+ assertNotNull(api.cdnApiInRegion(regionId).enable(name));
+
+ CDNContainer container = api.cdnApiInRegion(regionId).get(name);
+ assertCDNContainerNotNull(container);
+ assertTrue(container.isEnabled());
+ }
+ }
+
+ public void testEnableWithTTL() throws Exception {
+ for (String regionId : regions) {
+ assertNotNull(api.cdnApiInRegion(regionId).enable(name, 777777));
+
+ CDNContainer container = api.cdnApiInRegion(regionId).get(name);
+ assertCDNContainerNotNull(container);
+ assertTrue(container.isEnabled());
+ assertTrue(container.getTtl() == 777777);
+ }
+ }
+
+ public void testDisable() throws Exception {
+ for (String regionId : regions) {
+ assertTrue(api.cdnApiInRegion(regionId).disable(name));
+
+ CDNContainer container = api.cdnApiInRegion(regionId).get(name);
+ assertFalse(container.isEnabled());
+ }
+ }
- List<CDNContainer> cdnResponse = cdnApi.list().toList();
+ public void testList() throws Exception {
+ for (String regionId : regions) {
+ List<CDNContainer> cdnResponse = api.cdnApiInRegion(regionId).list().toList();
assertNotNull(cdnResponse);
+
for (CDNContainer cdnContainer : cdnResponse) {
- assertNotNull(cdnContainer.getName());
+ assertCDNContainerNotNull(cdnContainer);
assertTrue(cdnContainer.isEnabled());
- assertNotNull(cdnContainer.isLogRetentionEnabled());
- assertNotNull(cdnContainer.getTtl());
- assertNotNull(cdnContainer.getUri());
- assertNotNull(cdnContainer.getSslUri());
- assertNotNull(cdnContainer.getStreamingUri());
- assertNotNull(cdnContainer.getIosUri());
}
}
}
@@ -66,32 +102,83 @@ public class CloudFilesCDNApiLiveTest extends BaseCloudFilesApiLiveTest {
String lexicographicallyBeforeName = name.substring(0, name.length() - 1);
for (String regionId : regions) {
ListContainerOptions options = ListContainerOptions.Builder.marker(lexicographicallyBeforeName);
+
CDNContainer cdnContainer = api.cdnApiInRegion(regionId).list(options).get(0);
-
- assertNotNull(cdnContainer.getName());
+ assertCDNContainerNotNull(cdnContainer);
assertTrue(cdnContainer.isEnabled());
- assertNotNull(cdnContainer.isLogRetentionEnabled());
- assertNotNull(cdnContainer.getTtl());
- assertNotNull(cdnContainer.getUri());
- assertNotNull(cdnContainer.getSslUri());
- assertNotNull(cdnContainer.getStreamingUri());
- assertNotNull(cdnContainer.getIosUri());
}
}
public void testGet() throws Exception {
for (String regionId : regions) {
- CDNContainer cdnContainer = api.cdnApiInRegion(regionId).get(name);
- assertNotNull(cdnContainer);
+ CDNContainer container = api.cdnApiInRegion(regionId).get(name);
+ assertCDNContainerNotNull(container);
+ assertTrue(container.isEnabled());
+ }
+ }
+
+ public void testPurgeObject() throws Exception {
+ for (String regionId : regions) {
+ String objectName = "testPurge";
+ Payload payload = Payloads.newByteSourcePayload(ByteSource.wrap(new byte[] {1,2,3}));
+ ObjectApi objectApi = api.objectApiInRegionForContainer(regionId, name);
+
+ // create a new object
+ objectApi.replace(objectName, payload, ImmutableMap.<String, String>of());
+
+ CDNApi cdnApi = api.cdnApiInRegion(regionId);
+ assertTrue(cdnApi.purgeObject(name, "testPurge", ImmutableList.<String>of()));
+
+ // delete the object
+ objectApi.delete(objectName);
+ assertNull(objectApi.get(objectName, GetOptions.NONE));
}
}
+ public void testUpdate() throws Exception {
+ for (String regionId : regions) {
+ // enable with a ttl
+ assertNotNull(api.cdnApiInRegion(regionId).enable(name, 777777));
+
+ // now get the container
+ CDNContainer original = api.cdnApiInRegion(regionId).get(name);
+ assertTrue(original.isEnabled());
+ assertCDNContainerNotNull(original);
+
+ // update options
+ UpdateCDNContainerOptions opts = new UpdateCDNContainerOptions()
+ .ttl(1234567)
+ .logRetention(true)
+ .enabled(false);
+ // update the container
+ assertTrue(api.cdnApiInRegion(regionId).update(name, opts));
+
+ // now get the updated container
+ CDNContainer updated = api.cdnApiInRegion(regionId).get(name);
+ assertFalse(updated.isEnabled());
+ assertCDNContainerNotNull(updated);
+
+ assertNotEquals(original.getTtl(), updated.getTtl());
+ assertTrue(updated.isLogRetentionEnabled());
+ }
+ }
+
+ private static final void assertCDNContainerNotNull(CDNContainer container) {
+ assertNotNull(container);
+ assertNotNull(container.getName());
+ assertNotNull(container.getTtl());
+ assertNotNull(container.getUri());
+ assertNotNull(container.getIosUri());
+ assertNotNull(container.getSslUri());
+ assertNotNull(container.getStreamingUri());
+ assertNotNull(container.isLogRetentionEnabled());
+ }
+
@BeforeClass(groups = "live")
public void setup() {
super.setup();
for (String regionId : regions) {
api.containerApiInRegion(regionId).createIfAbsent(name, CreateContainerOptions.NONE);
- api.cdnApiInRegion(regionId).enable(name);
}
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d13ff0eb/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java
index 8e55c2e..18cd36c 100644
--- a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java
+++ b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/features/CloudFilesCDNApiMockTest.java
@@ -16,11 +16,8 @@
*/
package org.jclouds.rackspace.cloudfiles.v1.features;
-import static com.google.common.base.Charsets.US_ASCII;
import static javax.ws.rs.core.HttpHeaders.CONTENT_LENGTH;
import static javax.ws.rs.core.HttpHeaders.CONTENT_TYPE;
-import static javax.ws.rs.core.HttpHeaders.ETAG;
-import static javax.ws.rs.core.HttpHeaders.LAST_MODIFIED;
import static org.jclouds.rackspace.cloudfiles.v1.options.UpdateCDNContainerOptions.Builder.enabled;
import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_ENABLED;
import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_IOS_URI;
@@ -38,14 +35,13 @@ import static org.testng.Assert.assertTrue;
import java.net.URI;
import java.util.List;
-import org.jclouds.io.Payload;
-import org.jclouds.io.Payloads;
import org.jclouds.openstack.swift.v1.options.ListContainerOptions;
import org.jclouds.openstack.v2_0.internal.BaseOpenStackMockTest;
import org.jclouds.rackspace.cloudfiles.v1.CloudFilesApi;
import org.jclouds.rackspace.cloudfiles.v1.domain.CDNContainer;
import org.testng.annotations.Test;
+import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import com.squareup.okhttp.mockwebserver.MockResponse;
import com.squareup.okhttp.mockwebserver.MockWebServer;
@@ -81,6 +77,27 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
}
}
+ public void testListIsEmpty() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+ CDNApi cdnApi = api.cdnApiInRegion("DFW");
+
+ List<CDNContainer> cdnContainers = cdnApi.list().toList();
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/?format=json&enabled_only=true");
+
+ assertTrue(cdnContainers.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
public void testListWithOptions() throws Exception {
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
@@ -90,11 +107,11 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
ListContainerOptions options = ListContainerOptions.Builder.marker("cdn-container-3");
ImmutableList<CDNContainer> containers = api.cdnApiInRegion("DFW").list(options).toList();
-
+
for(CDNContainer container : containers) {
- checkCDNContainer(container);
+ assertCDNContainerNotNull(container);
}
-
+
assertEquals(containers, mockContainers.subList(2, mockContainers.size()));
assertEquals(server.getRequestCount(), 2);
@@ -105,34 +122,60 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
}
}
- public void testEnableAndDisable() throws Exception {
+ public void testListWithOptionsIsEmpty() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+ ListContainerOptions options = ListContainerOptions.Builder.marker("cdn-container-3");
+ FluentIterable<CDNContainer> containers = api.cdnApiInRegion("DFW").list(options);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "GET", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/?format=json&enabled_only=true&marker=cdn-container-3");
+
+ assertNotNull(containers);
+ assertTrue(containers.isEmpty());
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testEnable() throws Exception {
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(201)));
- server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(201)));
- server.enqueue(addCommonHeaders(disabledResponse().setResponseCode(201)));
-
+
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
-
+
// enable a CDN Container
- URI enabledContainer = cdnApi.enable("container-1");
+ URI enabledContainer = api.cdnApiInRegion("DFW").enable("container-1");
assertNotNull(enabledContainer);
-
- // ensure that it is disabled
- assertTrue(cdnApi.disable("container-1"));
-
- // get the container from the CDN and ensure that it is disabled
- CDNContainer disabledContainer = cdnApi.get("container-1");
- checkCDNContainer(disabledContainer);
- assertFalse(disabledContainer.isEnabled());
-
- assertEquals(server.getRequestCount(), 4);
+
+ assertEquals(server.getRequestCount(), 2);
assertAuthentication(server);
assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testEnableFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+ // enable a CDN Container
+ assertNull(api.cdnApiInRegion("DFW").enable("container-1"));
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
- assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
} finally {
server.shutdown();
}
@@ -142,13 +185,12 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(201)));
-
+
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
-
+
// enable a CDN Container with a TTL
- URI enabledContainer = cdnApi.enable("container-1", 777777);
+ URI enabledContainer = api.cdnApiInRegion("DFW").enable("container-1", 777777);
assertNotNull(enabledContainer);
assertEquals(server.getRequestCount(), 2);
@@ -159,6 +201,65 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
}
}
+ public void testEnableWithTTLFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+
+ // enable a CDN Container with a TTL
+ URI enabledContainer = api.cdnApiInRegion("DFW").enable("container-1", 777777);
+ assertNull(enabledContainer);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDisable() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(201)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+
+ // disable a CDN Container
+ assertTrue(api.cdnApiInRegion("DFW").disable("container-1"));
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testDisableFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+
+ // disable a CDN Container
+ boolean disbledContainer = api.cdnApiInRegion("DFW").disable("container-1");
+ assertFalse(disbledContainer);
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "PUT", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
public void testGet() throws Exception {
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
@@ -166,10 +267,9 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
- CDNContainer cdnContainer = cdnApi.get("container-1");
- checkCDNContainer(cdnContainer);
+ CDNContainer cdnContainer = api.cdnApiInRegion("DFW").get("container-1");
+ assertCDNContainerNotNull(cdnContainer);
assertEquals(mockCDNContainer, cdnContainer);
assertEquals(server.getRequestCount(), 2);
@@ -179,17 +279,16 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
server.shutdown();
}
}
-
+
public void testGetFail() throws Exception {
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
-
+
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
- CDNContainer cdnContainer = cdnApi.get("container-1");
+ CDNContainer cdnContainer = api.cdnApiInRegion("DFW").get("container-1");
assertAuthentication(server);
assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
@@ -203,14 +302,32 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
MockWebServer server = mockOpenStackServer();
server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(201)));
-
+
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
-
+
// purge the object
- assertTrue(cdnApi.purgeObject("myContainer", "myObject", emails));
-
+ assertTrue(api.cdnApiInRegion("DFW").purgeObject("myContainer", "myObject", emails));
+
+ assertEquals(server.getRequestCount(), 2);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "DELETE", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ public void testPurgeObjectFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json"))));
+ server.enqueue(addCommonHeaders(new MockResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+
+ // purge the object
+ assertFalse(api.cdnApiInRegion("DFW").purgeObject("myContainer", "myObject", emails));
+
assertEquals(server.getRequestCount(), 2);
assertAuthentication(server);
assertRequest(server.takeRequest(), "DELETE", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/myContainer/myObject");
@@ -221,24 +338,23 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
public void testUpdate() throws Exception {
MockWebServer server = mockOpenStackServer();
- server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")).setResponseCode(200))); //POST
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")).setResponseCode(200)));
server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(200)));
server.enqueue(addCommonHeaders(updatedResponse().setResponseCode(204)));
server.enqueue(addCommonHeaders(updatedResponse().setResponseCode(200)));
-
+
try {
CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
- CDNApi cdnApi = api.cdnApiInRegion("DFW");
-
- CDNContainer cdnContainer = cdnApi.get("container-1");
- checkCDNContainer(cdnContainer);
-
+
+ CDNContainer cdnContainer = api.cdnApiInRegion("DFW").get("container-1");
+ assertCDNContainerNotNull(cdnContainer);
+
// update the CDN Container
- assertTrue(cdnApi.update("container-1", enabled(false).logRetention(true).ttl(7654321)));
-
- cdnContainer = cdnApi.get("container-1");
- checkCDNContainer(cdnContainer);
-
+ assertTrue(api.cdnApiInRegion("DFW").update("container-1", enabled(false).logRetention(true).ttl(7654321)));
+
+ cdnContainer = api.cdnApiInRegion("DFW").get("container-1");
+ assertCDNContainerNotNull(cdnContainer);
+
CDNContainer updatedContainer = CDNContainer.builder()
.name("container-1")
.enabled(false)
@@ -249,9 +365,9 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
.streamingUri(URI.create("http://streaming-id-1.stream.rackspace.com"))
.iosUri(URI.create("http://ios-id-1.iosr.rackspace.com"))
.build();
-
+
assertEquals(updatedContainer, cdnContainer);
-
+
assertEquals(server.getRequestCount(), 4);
assertAuthentication(server);
assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
@@ -262,15 +378,39 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
}
}
- private static void checkCDNContainer(CDNContainer cdnContainer) {
- assertNotNull(cdnContainer.getName());
- assertNotNull(cdnContainer.isEnabled());
- assertNotNull(cdnContainer.isLogRetentionEnabled());
- assertNotNull(cdnContainer.getTtl());
- assertNotNull(cdnContainer.getUri());
- assertNotNull(cdnContainer.getSslUri());
- assertNotNull(cdnContainer.getStreamingUri());
- assertNotNull(cdnContainer.getIosUri());
+ public void testUpdateFail() throws Exception {
+ MockWebServer server = mockOpenStackServer();
+ server.enqueue(addCommonHeaders(new MockResponse().setBody(stringFromResource("/access.json")).setResponseCode(200)));
+ server.enqueue(addCommonHeaders(enabledResponse().setResponseCode(200)));
+ server.enqueue(addCommonHeaders(updatedResponse().setResponseCode(404)));
+
+ try {
+ CloudFilesApi api = api(server.getUrl("/").toString(), "rackspace-cloudfiles");
+
+ CDNContainer cdnContainer = api.cdnApiInRegion("DFW").get("container-1");
+ assertCDNContainerNotNull(cdnContainer);
+
+ // update the CDN Container
+ assertFalse(api.cdnApiInRegion("DFW").update("container-1", enabled(false).logRetention(true).ttl(7654321)));
+
+ assertEquals(server.getRequestCount(), 3);
+ assertAuthentication(server);
+ assertRequest(server.takeRequest(), "HEAD", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ assertRequest(server.takeRequest(), "POST", "/v1/MossoCloudFS_5bcf396e-39dd-45ff-93a1-712b9aba90a9/container-1");
+ } finally {
+ server.shutdown();
+ }
+ }
+
+ private static final void assertCDNContainerNotNull(CDNContainer container) {
+ assertNotNull(container.getName());
+ assertNotNull(container.isEnabled());
+ assertNotNull(container.isLogRetentionEnabled());
+ assertNotNull(container.getTtl());
+ assertNotNull(container.getUri());
+ assertNotNull(container.getSslUri());
+ assertNotNull(container.getStreamingUri());
+ assertNotNull(container.getIosUri());
}
private static final CDNContainer mockCDNContainer = CDNContainer.builder()
@@ -296,19 +436,6 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
.addHeader(CONTENT_LENGTH, "0")
.addHeader(CONTENT_TYPE, "text/plain; charset=UTF-8");
}
-
- private static MockResponse disabledResponse() {
- return new MockResponse()
- .addHeader(CDN_ENABLED, "false")
- .addHeader(CDN_LOG_RETENTION, "false")
- .addHeader(CDN_TTL, "777777")
- .addHeader(CDN_URI,"http://id-1.cdn.rackspace.com")
- .addHeader(CDN_SSL_URI, "https://ssl-id-1.ssl.rackspace.com")
- .addHeader(CDN_STREAMING_URI, "http://streaming-id-1.stream.rackspace.com")
- .addHeader(CDN_IOS_URI, "http://ios-id-1.iosr.rackspace.com")
- .addHeader(CONTENT_LENGTH, "0")
- .addHeader(CONTENT_TYPE, "text/plain; charset=UTF-8");
- }
private static MockResponse updatedResponse() {
return new MockResponse()
@@ -364,23 +491,4 @@ public class CloudFilesCDNApiMockTest extends BaseOpenStackMockTest<CloudFilesAp
.streamingUri(URI.create("http://streaming-id-4.stream.rackspace.com"))
.iosUri(URI.create("http://ios-id-4.iosr.rackspace.com"))
.build());
-
- private static MockResponse objectResponse() {
- return new MockResponse()
- .addHeader(LAST_MODIFIED, "Fri, 12 Jun 2010 13:40:18 GMT")
- .addHeader(ETAG, "8a964ee2a5e88be344f36c22562a6486")
- // TODO: MWS doesn't allow you to return content length w/o content
- // on HEAD!
- .setBody("ABCD".getBytes(US_ASCII))
- .addHeader(CONTENT_LENGTH, "4").addHeader(CONTENT_TYPE, "text/plain; charset=UTF-8");
- }
-
- private static final byte[] NO_CONTENT = new byte[] {};
-
- private static Payload payload(long bytes, String contentType) {
- Payload payload = Payloads.newByteArrayPayload(NO_CONTENT);
- payload.getContentMetadata().setContentLength(bytes);
- payload.getContentMetadata().setContentType(contentType);
- return payload;
- }
}
http://git-wip-us.apache.org/repos/asf/jclouds/blob/d13ff0eb/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
----------------------------------------------------------------------
diff --git a/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
new file mode 100644
index 0000000..3ff8c00
--- /dev/null
+++ b/apis/rackspace-cloudfiles/src/test/java/org/jclouds/rackspace/cloudfiles/v1/options/UpdateCDNContainerOptionsTest.java
@@ -0,0 +1,111 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.jclouds.rackspace.cloudfiles.v1.options;
+
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_DIRECTORY_TYPE;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_ERROR;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_INDEX;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_LISTINGS;
+import static org.jclouds.openstack.swift.v1.reference.SwiftHeaders.STATIC_WEB_LISTINGS_CSS;
+import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_LOG_RETENTION;
+import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_TTL;
+import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_TTL_MAX;
+import static org.jclouds.rackspace.cloudfiles.v1.reference.CloudFilesHeaders.CDN_TTL_MIN;
+import static org.testng.Assert.assertEquals;
+
+import org.testng.annotations.Test;
+
+import com.google.common.collect.ImmutableList;
+import com.google.common.net.MediaType;
+
+/**
+ * Tests behavior of {@link UpdateCDNContainerOptions}.
+ *
+ * @author Jeremy Daggett
+ */
+@Test(groups = "unit")
+public class UpdateCDNContainerOptionsTest {
+
+ public void testTTLInRange() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().ttl(123456);
+ assertEquals(ImmutableList.of("123456"), options.buildRequestHeaders().get(CDN_TTL));
+ }
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void testTTLLessThanMin() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().ttl(CDN_TTL_MIN - 1);
+ options.buildRequestHeaders().get(CDN_TTL);
+ }
+
+ @Test(expectedExceptions = IllegalStateException.class)
+ public void testTTLGreaterThanMax() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().ttl(CDN_TTL_MAX + 1);
+ options.buildRequestHeaders().get(CDN_TTL);
+ }
+
+ public void testEnableLogRetention() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().logRetention(true);
+ assertEquals(ImmutableList.of("true"), options.buildRequestHeaders().get(CDN_LOG_RETENTION));
+ }
+
+ public void testDisableLogRetention() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().logRetention(false);
+ assertEquals(ImmutableList.of("false"), options.buildRequestHeaders().get(CDN_LOG_RETENTION));
+ }
+
+ public void testStaticWebsiteDirectoryType() {
+ MediaType appDir = MediaType.create("application", "directory");
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteDirectoryType(appDir);
+ assertEquals(ImmutableList.of(appDir.toString()), options.buildRequestHeaders().get(STATIC_WEB_DIRECTORY_TYPE));
+ }
+
+ public void testStaticWebsiteIndexPage() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteIndexPage("index.html");
+ assertEquals(ImmutableList.of("index.html"), options.buildRequestHeaders().get(STATIC_WEB_INDEX));
+ }
+
+ public void testStaticWebsiteErrorPage() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteErrorPage("error.html");
+ assertEquals(ImmutableList.of("error.html"), options.buildRequestHeaders().get(STATIC_WEB_ERROR));
+ }
+
+ public void testEnableStaticWebsiteListings() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteListings(true);
+ assertEquals(ImmutableList.of("true"), options.buildRequestHeaders().get(STATIC_WEB_LISTINGS));
+ }
+
+ public void testDiableStaticWebsiteListings() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteListings(false);
+ assertEquals(ImmutableList.of("false"), options.buildRequestHeaders().get(STATIC_WEB_LISTINGS));
+ }
+
+ public void testStaticWebsiteListingsCSS() {
+ UpdateCDNContainerOptions options =
+ new UpdateCDNContainerOptions().staticWebsiteListingsCSS("listings.css");
+ assertEquals(ImmutableList.of("listings.css"), options.buildRequestHeaders().get(STATIC_WEB_LISTINGS_CSS));
+ }
+}