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")