You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by zh...@apache.org on 2010/08/05 23:08:53 UTC
svn commit: r982787 - in /shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/http/HttpResponse.java
test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
Author: zhoresh
Date: Thu Aug 5 21:08:53 2010
New Revision: 982787
URL: http://svn.apache.org/viewvc?rev=982787&view=rev
Log:
Update instead of add "Date" header in HttpResponse
http://codereview.appspot.com/1888045/show
Modified:
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java?rev=982787&r1=982786&r2=982787&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java Thu Aug 5 21:08:53 2010
@@ -18,6 +18,7 @@
package org.apache.shindig.gadgets.http;
import com.google.common.base.Supplier;
+import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.google.common.collect.MapMaker;
@@ -28,7 +29,9 @@ import com.google.inject.Inject;
import com.google.inject.name.Named;
import org.apache.commons.lang.StringUtils;
+import org.apache.shindig.common.servlet.HttpUtil;
import org.apache.shindig.common.util.DateUtil;
+import org.apache.shindig.common.util.TimeSource;
import org.apache.shindig.gadgets.encoding.EncodingDetector;
import java.io.ByteArrayInputStream;
@@ -147,6 +150,14 @@ public final class HttpResponse implemen
@Inject(optional = true) @Named("shindig.http.date-drift-limit-ms")
private static long responseDateDriftLimit = DEFAULT_DRIFT_LIMIT_MS;
+ public static void setTimeSource(TimeSource timeSource) {
+ HttpUtil.setTimeSource(timeSource);
+ }
+
+ public static TimeSource getTimeSource() {
+ return HttpUtil.getTimeSource();
+ }
+
// Holds character sets for fast conversion
private static final Map<String, Charset> encodingToCharset = new MapMaker().makeMap();
@@ -358,7 +369,7 @@ public final class HttpResponse implemen
public long getCacheTtl() {
long expiration = getCacheExpiration();
if (expiration != -1) {
- return expiration - System.currentTimeMillis();
+ return expiration - getTimeSource().currentTimeMillis();
}
return -1;
}
@@ -450,7 +461,7 @@ public final class HttpResponse implemen
private static long getAndUpdateDate(Multimap<String, String> headers) {
// Validate the Date header. Must conform to the HTTP date format.
long timestamp = -1;
- long currentTime = System.currentTimeMillis();
+ long currentTime = getTimeSource().currentTimeMillis();
Collection<String> dates = headers.get("Date");
if (!dates.isEmpty()) {
@@ -465,7 +476,7 @@ public final class HttpResponse implemen
}
if (timestamp == -1) {
timestamp = currentTime;
- headers.put("Date", DateUtil.formatRfc1123Date(timestamp));
+ headers.replaceValues("Date", ImmutableList.of(DateUtil.formatRfc1123Date(timestamp)));
}
return timestamp;
}
Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java?rev=982787&r1=982786&r2=982787&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/HttpResponseTest.java Thu Aug 5 21:08:53 2010
@@ -18,9 +18,11 @@
package org.apache.shindig.gadgets.http;
import org.apache.shindig.common.util.DateUtil;
+import org.apache.shindig.common.util.FakeTimeSource;
import org.apache.commons.io.IOUtils;
import org.junit.Assert;
+import org.junit.Before;
import org.junit.Test;
import java.io.ByteArrayInputStream;
@@ -54,6 +56,12 @@ public class HttpResponseTest extends As
return (int)(ts / 1000);
}
+ private static FakeTimeSource timeSource = new FakeTimeSource(System.currentTimeMillis());
+ @Before
+ public void setUp() {
+ HttpResponse.setTimeSource(timeSource);
+ }
+
@Test
public void testEncodingDetectionUtf8WithBom() throws Exception {
HttpResponse response = new HttpResponseBuilder()
@@ -251,7 +259,7 @@ public class HttpResponseTest extends As
.addHeader("Pragma", "junk")
.create();
assertFalse(response.isStrictNoCache());
- int expected = roundToSeconds(System.currentTimeMillis() + response.getDefaultTtl());
+ int expected = roundToSeconds(timeSource.currentTimeMillis() + response.getDefaultTtl());
int expires = roundToSeconds(response.getCacheExpiration());
assertEquals(expected, expires);
assertTrue(response.getCacheTtl() <= response.getDefaultTtl() && response.getCacheTtl() > 0);
@@ -289,7 +297,7 @@ public class HttpResponseTest extends As
@Test
public void testExpires() throws Exception {
int maxAge = 10;
- int time = roundToSeconds(System.currentTimeMillis()) + maxAge;
+ int time = roundToSeconds(timeSource.currentTimeMillis()) + maxAge;
HttpResponse response = new HttpResponseBuilder()
.addHeader("Expires", DateUtil.formatRfc1123Date(1000L * time))
.create();
@@ -314,7 +322,7 @@ public class HttpResponseTest extends As
public void testMaxAgeNoDate() throws Exception {
int maxAge = 10;
// Guess time.
- int expected = roundToSeconds(System.currentTimeMillis()) + maxAge;
+ int expected = roundToSeconds(timeSource.currentTimeMillis()) + maxAge;
HttpResponse response = new HttpResponseBuilder()
.addHeader("Cache-Control", "public, max-age=" + maxAge)
.create();
@@ -328,8 +336,7 @@ public class HttpResponseTest extends As
public void testMaxAgeInvalidDate() throws Exception {
int maxAge = 10;
// Guess time.
- int expected = roundToSeconds(System.currentTimeMillis()) + maxAge;
-
+ int expected = roundToSeconds(timeSource.currentTimeMillis()) + maxAge;
HttpResponse response = new HttpResponseBuilder()
.addHeader("Date", "Wed, 09 Jul 2008 19:18:33 EDT")
.addHeader("Cache-Control", "public, max-age=" + maxAge)
@@ -343,7 +350,7 @@ public class HttpResponseTest extends As
@Test
public void testMaxAgeWithDate() throws Exception {
int maxAge = 10;
- int now = roundToSeconds(System.currentTimeMillis());
+ int now = roundToSeconds(timeSource.currentTimeMillis());
HttpResponse response = new HttpResponseBuilder()
.addHeader("Date", DateUtil.formatRfc1123Date(1000L * now))
.addHeader("Cache-Control", "public, max-age=" + maxAge)
@@ -355,18 +362,20 @@ public class HttpResponseTest extends As
@Test
public void testFixedDate() throws Exception {
- int time = roundToSeconds(System.currentTimeMillis());
+ int time = roundToSeconds(timeSource.currentTimeMillis());
HttpResponse response = new HttpResponseBuilder()
.addHeader("Date", DateUtil.formatRfc1123Date(1000L * time))
.create();
assertEquals(time + roundToSeconds(response.getDefaultTtl()),
roundToSeconds(response.getCacheExpiration()));
+ assertEquals(DateUtil.formatRfc1123Date(timeSource.currentTimeMillis()),
+ response.getHeader("Date"));
assertTtlOk(roundToSeconds(response.getDefaultTtl()), response);
}
@Test
public void testFixedDateOld() throws Exception {
- int time = roundToSeconds(System.currentTimeMillis());
+ int time = roundToSeconds(timeSource.currentTimeMillis());
HttpResponse response = new HttpResponseBuilder()
.addHeader("Date", DateUtil.formatRfc1123Date(1000L * time
- 1000 - HttpResponse.DEFAULT_DRIFT_LIMIT_MS))
@@ -374,12 +383,14 @@ public class HttpResponseTest extends As
// Verify that the old time is ignored:
assertEquals(time + roundToSeconds(response.getDefaultTtl()),
roundToSeconds(response.getCacheExpiration()));
+ assertEquals(DateUtil.formatRfc1123Date(timeSource.currentTimeMillis()),
+ response.getHeader("Date"));
assertTtlOk(roundToSeconds(response.getDefaultTtl()), response);
}
@Test
public void testFixedDateNew() throws Exception {
- int time = roundToSeconds(System.currentTimeMillis());
+ int time = roundToSeconds(timeSource.currentTimeMillis());
HttpResponse response = new HttpResponseBuilder()
.addHeader("Date", DateUtil.formatRfc1123Date(1000L * time
+ 1000 + HttpResponse.DEFAULT_DRIFT_LIMIT_MS))
@@ -393,11 +404,11 @@ public class HttpResponseTest extends As
@Test
public void testNegativeCaching() {
assertTrue("Bad HTTP responses must be cacheable!",
- HttpResponse.error().getCacheExpiration() > System.currentTimeMillis());
+ HttpResponse.error().getCacheExpiration() > timeSource.currentTimeMillis());
assertTrue("Bad HTTP responses must be cacheable!",
- HttpResponse.notFound().getCacheExpiration() > System.currentTimeMillis());
+ HttpResponse.notFound().getCacheExpiration() > timeSource.currentTimeMillis());
assertTrue("Bad HTTP responses must be cacheable!",
- HttpResponse.timeout().getCacheExpiration() > System.currentTimeMillis());
+ HttpResponse.timeout().getCacheExpiration() > timeSource.currentTimeMillis());
long ttl = HttpResponse.error().getCacheTtl();
assertTrue(ttl <= HttpResponse.DEFAULT_TTL && ttl > 0);
}
@@ -446,7 +457,7 @@ public class HttpResponseTest extends As
@Test
public void testSetNoCache() {
- int time = roundToSeconds(System.currentTimeMillis());
+ int time = roundToSeconds(timeSource.currentTimeMillis());
HttpResponse response = new HttpResponseBuilder()
.addHeader("Expires", DateUtil.formatRfc1123Date(1000L * time))
.setStrictNoCache()
@@ -513,7 +524,7 @@ public class HttpResponseTest extends As
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
- long now = System.currentTimeMillis();
+ long now = timeSource.currentTimeMillis();
HttpResponse response = new HttpResponseBuilder()
.addHeader("Foo", "bar")