Revision: 6058
Author: [email protected]
Date: Tue Sep  1 10:44:31 2009
Log: Fixes a concurrency issue in CookieTest where two instances of the  
test can cause each other to fail.

Patch by: jlabanca
Review by: jgw (desk)


http://code.google.com/p/google-web-toolkit/source/detail?r=6058

Modified:
  /trunk/user/test/com/google/gwt/user/client/CookieTest.java

=======================================
--- /trunk/user/test/com/google/gwt/user/client/CookieTest.java Mon Jun  8  
13:11:55 2009
+++ /trunk/user/test/com/google/gwt/user/client/CookieTest.java Tue Sep  1  
10:44:31 2009
@@ -25,6 +25,7 @@
   */
  public class CookieTest extends GWTTestCase {

+  @Override
    public String getModuleName() {
      return "com.google.gwt.user.User";
    }
@@ -59,26 +60,36 @@
     * but does not expire before that time.
     */
    public void testExpires() {
+    // Generate a random ID for the cookies. Since cookies are shared  
across
+    // browser instances, its possible for multiple instances of this test  
to
+    // run concurrently (eg. hosted and web mode tests).  If that happens,
+    // the cookies will be cleared while we wait for the timer to fire.
+    int uniqueId = Random.nextInt(9000000) + 1000000;
+    final String earlyCookie = "shouldExpireEarly" + uniqueId;
+    final String lateCookie = "shouldExpireLate" + uniqueId;
+    final String sessionCookie = "shouldNotExpire" + uniqueId;
+
      // Test that the cookie expires in 5 seconds
      Date expiresEarly = new Date(new Date().getTime() + (5 * 1000));
      Date expiresLate  = new Date(new Date().getTime() + (60 * 1000));
-    Cookies.setCookie("shouldExpireEarly", "early", expiresEarly);
-    Cookies.setCookie("shouldExpireLate", "late", expiresLate);
-    Cookies.setCookie("shouldNotExpire", "forever", null);
+    Cookies.setCookie(earlyCookie, "early", expiresEarly);
+    Cookies.setCookie(lateCookie, "late", expiresLate);
+    Cookies.setCookie(sessionCookie, "forever", null);

      // Wait until the cookie expires before checking it
      Timer timer = new Timer() {
+      @Override
        public void run() {
          // Verify that the early expiring cookie does NOT exist
-        assertNull(Cookies.getCookie("shouldExpireEarly"));
+        assertNull(Cookies.getCookie(earlyCookie));

          // Verify that the late expiring cookie does exist
-        assertEquals(Cookies.getCookie("shouldExpireLate"), "late");
+        assertEquals(Cookies.getCookie(lateCookie), "late");

          // Verify the session cookie doesn't expire
-        assertEquals(Cookies.getCookie("shouldNotExpire"), "forever");
-        Cookies.removeCookie("shouldNotExpire");
-        assertNull(Cookies.getCookie("shouldNotExpire"));
+        assertEquals(Cookies.getCookie(sessionCookie), "forever");
+        Cookies.removeCookie(sessionCookie);
+        assertNull(Cookies.getCookie(sessionCookie));

          // Finish the test
          finishTest();
@@ -96,11 +107,12 @@
      clearCookies();

      // Set a few cookies
+    int curCount = Cookies.getCookieNames().size();
      Cookies.setCookie("test1", "value1");
      Cookies.setCookie("test2", "value2");
      Cookies.setCookie("test3", "value3");
      Collection<String> cookies = Cookies.getCookieNames();
-    assertEquals(3, cookies.size());
+    assertEquals(curCount + 3, cookies.size());

      // Remove a cookie
      Cookies.removeCookie("test2");
@@ -120,20 +132,20 @@
      assertEquals(null, Cookies.getCookie("test2"));
      assertEquals(null, Cookies.getCookie("test3"));
      cookies = Cookies.getCookieNames();
-    assertEquals(0, cookies.size());
+    assertEquals(curCount, cookies.size());

      // Add/remove URI encoded cookies
      Cookies.setCookie("test1-test1", "value1 value1");
      Cookies.removeCookie("test1-test1");
      cookies = Cookies.getCookieNames();
-    assertEquals(0, cookies.size());
+    assertEquals(curCount, cookies.size());

      // Add/remove cookies that are not URI encoded
      Cookies.setUriEncode(false);
      Cookies.setCookie("test1+test1", "value1+value1");
      Cookies.removeCookie("test1+test1");
      cookies = Cookies.getCookieNames();
-    assertEquals(0, cookies.size());
+    assertEquals(curCount, cookies.size());

      // Make sure unencoded cookies with bogus format are not added
      try {
@@ -181,12 +193,15 @@
    }

    /**
-   * Clear out all existing cookies.
+   * Clear out all existing cookies, except the ones used in
+   * {...@link #testExpires()}.
     */
    private void clearCookies() {
      Collection<String> cookies = Cookies.getCookieNames();
      for (String cookie : cookies) {
-      Cookies.removeCookie(cookie);
+      if (!cookie.startsWith("should")) {
+        Cookies.removeCookie(cookie);
+      }
      }
    }

@@ -204,11 +219,12 @@
      Cookies.setUriEncode(false);

      // Set a few cookies
+    int curCount = Cookies.getCookieNames().size();
      Cookies.setCookie("test1+test1", "value1", null, null, "/", false);
      Cookies.setCookie("test2", "value2+value2", null, null, "/", false);
      Cookies.setCookie("test3", "value3", null, null, "/", false);
      Collection<String> cookies = Cookies.getCookieNames();
-    assertEquals(3, cookies.size());
+    assertEquals(curCount + 3, cookies.size());

      // Remove a cookie
      Cookies.removeCookie("test2", "/");
@@ -228,7 +244,7 @@
      assertEquals(null, Cookies.getCookie("test2"));
      assertEquals(null, Cookies.getCookie("test3"));
      cookies = Cookies.getCookieNames();
-    assertEquals(0, cookies.size());
+    assertEquals(curCount, cookies.size());

      // First clear all cookies
      clearCookies();
@@ -241,7 +257,7 @@
      Cookies.setCookie("test2", "value2+value2", null, null, "/", false);
      Cookies.setCookie("test3", "value3", null, null, "/", false);
      cookies = Cookies.getCookieNames();
-    assertEquals(3, cookies.size());
+    assertEquals(curCount + 3, cookies.size());

      // Remove a cookie
      Cookies.removeCookie("test2", "/");
@@ -261,6 +277,6 @@
      assertEquals(null, Cookies.getCookie("test2"));
      assertEquals(null, Cookies.getCookie("test3"));
      cookies = Cookies.getCookieNames();
-    assertEquals(0, cookies.size());
+    assertEquals(curCount, cookies.size());
    }
  }

--~--~---------~--~----~------------~-------~--~----~
http://groups.google.com/group/Google-Web-Toolkit-Contributors
-~----------~----~----~----~------~----~------~--~---

Reply via email to