Hi Damien,

Can you take care of blocking / merging commits from / to
branches/0.9.x or should somebody else look after it? I'd
volunteer.

Cheers
Jan
--



On 13 May 2009, at 20:27, [email protected] wrote:

Author: damien
Date: Wed May 13 18:27:11 2009
New Revision: 774474

URL: http://svn.apache.org/viewvc?rev=774474&view=rev
Log:
Adding testing for GET /_changes?continuous=true by adding a GET / _sleep?time=Msecs call, which allows the browser to process the waiting data on the other async XHR request.

Modified:
   couchdb/trunk/etc/couchdb/default.ini.tpl.in
   couchdb/trunk/share/www/script/test/changes.js
   couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
   couchdb/trunk/src/couchdb/couch_query_servers.erl

Modified: couchdb/trunk/etc/couchdb/default.ini.tpl.in
URL: 
http://svn.apache.org/viewvc/couchdb/trunk/etc/couchdb/default.ini.tpl.in?rev=774474&r1=774473&r2=774474&view=diff
= = = = = = = = ======================================================================
--- couchdb/trunk/etc/couchdb/default.ini.tpl.in (original)
+++ couchdb/trunk/etc/couchdb/default.ini.tpl.in Wed May 13 18:27:11 2009
@@ -60,6 +60,7 @@
_restart = {couch_httpd_misc_handlers, handle_restart_req}
_stats = {couch_httpd_stats_handlers, handle_stats_req}
_log = {couch_httpd_misc_handlers, handle_log_req}
+_sleep = {couch_httpd_misc_handlers, handle_sleep_req}

[httpd_db_handlers]
_compact = {couch_httpd_db, handle_compact_req}

Modified: couchdb/trunk/share/www/script/test/changes.js
URL: 
http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/changes.js?rev=774474&r1=774473&r2=774474&view=diff
= = = = = = = = ======================================================================
--- couchdb/trunk/share/www/script/test/changes.js (original)
+++ couchdb/trunk/share/www/script/test/changes.js Wed May 13 18:27:11 2009
@@ -10,29 +10,85 @@
// License for the specific language governing permissions and limitations under
// the License.

+
couchTests.changes = function(debug) {
  var db = new CouchDB("test_suite_db");
  db.deleteDb();
  db.createDb();
  if (debug) debugger;

-
-  var req = CouchDB.newXhr();
-
-  req.open("GET", "/test_suite_db/_changes", false);
-  req.send("");
+  var req = CouchDB.request("GET", "/test_suite_db/_changes");
  var resp = JSON.parse(req.responseText);

  T(resp.results.length == 0 && resp.last_seq==0)

-  var doc = {_id:"foo", bar:1};
-  db.save(doc);
+  var docFoo = {_id:"foo", bar:1};
+  db.save(docFoo);

-  req.open("GET", "/test_suite_db/_changes", false);
-  req.send("");
+  req = CouchDB.request("GET", "/test_suite_db/_changes");
  var resp = JSON.parse(req.responseText);

  T(resp.results.length == 1 && resp.last_seq==1)
-  T(resp.results[0].changes[0].rev == doc._rev)
+  T(resp.results[0].changes[0].rev == docFoo._rev)
+
+  var xhr;
+
+  try {
+    xhr = CouchDB.newXhr();
+  } catch (err) {
+  }
+
+  if (xhr) {
+    // Only test the continuous stuff if we have a real XHR object
+    // with real async support.
+
+    var sleep = function(msecs) {
+ // by making a slow sync request, weallows the waiting XHR request data
+      // to be received.
+      var req = CouchDB.request("GET", "/_sleep?time=" + msecs);
+      T(JSON.parse(req.responseText).ok == true);
+    }
+
+    var parse_changes_line = function(line) {
+      if (line.charAt(line.length-1) == ",") {
+        line = line.substring(0, line.length-1);
+      }
+      return JSON.parse(line);
+    }
+
+    xhr.open("GET", "/test_suite_db/_changes?continuous=true", true);
+    xhr.send("");
+
+    var docBar = {_id:"bar", bar:1};
+    db.save(docBar);
+
+    sleep(100);
+    var lines = xhr.responseText.split("\n");
+
+    T(lines[0]='{"results":[');
+
+    var change = parse_changes_line(lines[1]);
+
+    T(change.seq == 1)
+    T(change.id == "foo")
+
+    change = parse_changes_line(lines[2]);
+
+    T(change.seq == 2)
+    T(change.id == "bar")
+    T(change.changes[0].rev == docBar._rev)
+
+    var docBaz = {_id:"baz", baz:1};
+    db.save(docBaz);
+
+    sleep(100);
+    var lines = xhr.responseText.split("\n");
+
+    change = parse_changes_line(lines[3]);
+
+    T(change.seq == 3);
+    T(change.id == "baz");
+    T(change.changes[0].rev == docBaz._rev);

+  }
};

Modified: couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl
URL: 
http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl?rev=774474&r1=774473&r2=774474&view=diff
= = = = = = = = ======================================================================
--- couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl (original)
+++ couchdb/trunk/src/couchdb/couch_httpd_misc_handlers.erl Wed May 13 18:27:11 2009
@@ -15,7 +15,7 @@
-export([handle_welcome_req/2,handle_favicon_req/ 2,handle_utils_dir_req/2,
    handle_all_dbs_req/1,handle_replicate_req/1,handle_restart_req/1,
    handle_uuids_req/1,handle_config_req/1,handle_log_req/1,
-    handle_task_status_req/1]).
+    handle_task_status_req/1,handle_sleep_req/1]).

-export([increment_update_seq_req/2]).

@@ -56,6 +56,12 @@
handle_utils_dir_req(Req, _) ->
    send_method_not_allowed(Req, "GET,HEAD").

+handle_sleep_req(#httpd{method='GET'}=Req) ->
+    Time = list_to_integer(couch_httpd:qs_value(Req, "time")),
+    receive snicklefart -> ok after Time -> ok end,
+    send_json(Req, {[{ok, true}]});
+handle_sleep_req(Req) ->
+    send_method_not_allowed(Req, "GET,HEAD").

handle_all_dbs_req(#httpd{method='GET'}=Req) ->
    {ok, DbNames} = couch_server:all_databases(),

Modified: couchdb/trunk/src/couchdb/couch_query_servers.erl
URL: 
http://svn.apache.org/viewvc/couchdb/trunk/src/couchdb/couch_query_servers.erl?rev=774474&r1=774473&r2=774474&view=diff
= = = = = = = = ======================================================================
--- couchdb/trunk/src/couchdb/couch_query_servers.erl (original)
+++ couchdb/trunk/src/couchdb/couch_query_servers.erl Wed May 13 18:27:11 2009
@@ -278,7 +278,7 @@
    [{Pid, Lang}] ->
        case Status of
        normal -> ok;
- _ -> ?LOG_DEBUG("Linked process died abnromally: ~p (reason: ~p)", [Pid, Status]) + _ -> ?LOG_DEBUG("Linked process died abnormally: ~p (reason: ~p)", [Pid, Status])
        end,
        {ok, {
            Langs,




Reply via email to