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 -~----------~----~----~----~------~----~------~--~---
