From eefb0b2d6ed65a9f8e17931e69eef56d1c92430e Mon Sep 17 00:00:00 2001 From: Paul Joseph Davis Date: Sat, 26 Sep 2009 02:46:41 +0000 Subject: Fix the UUID's test failures when clocks are out of sync. Changes the tests for cache busting by using ETag's. Left the date tests commented out just in case someone thinks I'm crazy and sees a better solution. git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@819091 13f79535-47bb-0310-9956-ffa450edef68 --- share/www/script/test/uuids.js | 19 ++++++++++++++----- src/couchdb/couch_httpd_misc_handlers.erl | 17 +++++++++++------ 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/share/www/script/test/uuids.js b/share/www/script/test/uuids.js index 50621678..4de7ce90 100644 --- a/share/www/script/test/uuids.js +++ b/share/www/script/test/uuids.js @@ -11,16 +11,25 @@ // the License. couchTests.uuids = function(debug) { + var etags = []; var testHashBustingHeaders = function(xhr) { T(xhr.getResponseHeader("Cache-Control").match(/no-cache/)); T(xhr.getResponseHeader("Pragma") == "no-cache"); - var currentTime = new Date(); - var expiresHeader = Date.parse(xhr.getResponseHeader("Expires")); - var dateHeader = Date.parse(xhr.getResponseHeader("Date")); + var newetag = xhr.getResponseHeader("ETag"); + T(etags.indexOf(newetag) < 0); + etags[etags.length] = newetag; + + // Removing the time based tests as they break easily when + // running CouchDB on a remote server in regards to the browser + // running the Futon test suite. + // + //var currentTime = new Date(); + //var expiresHeader = Date.parse(xhr.getResponseHeader("Expires")); + //var dateHeader = Date.parse(xhr.getResponseHeader("Date")); - T(expiresHeader < currentTime); - T(currentTime - dateHeader < 3000); + //T(expiresHeader < currentTime); + //T(currentTime - dateHeader < 3000); }; var db = new CouchDB("test_suite_db", {"X-Couch-Full-Commit":"false"}); diff --git a/src/couchdb/couch_httpd_misc_handlers.erl b/src/couchdb/couch_httpd_misc_handlers.erl index 37ed709f..24eaa82e 100644 --- a/src/couchdb/couch_httpd_misc_handlers.erl +++ b/src/couchdb/couch_httpd_misc_handlers.erl @@ -106,13 +106,18 @@ handle_restart_req(Req) -> handle_uuids_req(#httpd{method='GET'}=Req) -> Count = list_to_integer(couch_httpd:qs_value(Req, "count", "1")), - CacheBustingHeaders = [{"Date", httpd_util:rfc1123_date()}, - {"Cache-Control", "no-cache"}, - % Past date, ON PURPOSE! - {"Expires", "Fri, 01 Jan 1990 00:00:00 GMT"}, - {"Pragma", "no-cache"}], UUIDs = [couch_uuids:new() || _ <- lists:seq(1, Count)], - send_json(Req, 200, CacheBustingHeaders, {[{<<"uuids">>, UUIDs}]}); + couch_httpd:etag_respond(Req, erlang:md5(UUIDs), fun() -> + CacheBustingHeaders = [ + {"Date", httpd_util:rfc1123_date()}, + {"Cache-Control", "no-cache"}, + % Past date, ON PURPOSE! + {"Expires", "Fri, 01 Jan 1990 00:00:00 GMT"}, + {"Pragma", "no-cache"}, + {"ETag", erlang:md5(UUIDs)} + ], + send_json(Req, 200, CacheBustingHeaders, {[{<<"uuids">>, UUIDs}]}) + end); handle_uuids_req(Req) -> send_method_not_allowed(Req, "GET"). -- cgit v1.2.3