You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by kx...@apache.org on 2015/11/11 23:50:28 UTC
[12/16] couchdb commit: updated refs/heads/2876-js-tests to 805a427
Changes test
Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/c24b5945
Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/c24b5945
Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/c24b5945
Branch: refs/heads/2876-js-tests
Commit: c24b594514dc4610b11bb2bdcb0eaec6bc3ee270
Parents: 69a44c0
Author: sebastianro <se...@apache.org>
Authored: Sat Oct 17 16:33:57 2015 +0200
Committer: sebastianro <se...@apache.org>
Committed: Sat Oct 17 16:33:57 2015 +0200
----------------------------------------------------------------------
test/javascript/tests/changes.js | 118 +++++++++++++++++++++-------------
1 file changed, 75 insertions(+), 43 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb/blob/c24b5945/test/javascript/tests/changes.js
----------------------------------------------------------------------
diff --git a/test/javascript/tests/changes.js b/test/javascript/tests/changes.js
index 915a29d..c65ff5c 100644
--- a/test/javascript/tests/changes.js
+++ b/test/javascript/tests/changes.js
@@ -17,7 +17,6 @@ function jsonp(obj) {
}
couchTests.changes = function(debug) {
- return console.log('TODO');
var db;
if (debug) debugger;
@@ -54,23 +53,24 @@ couchTests.changes = function(debug) {
T(resp.results[0].changes[0].rev == docFoo._rev);
// test with callback
-
- run_on_modified_server(
- [{section: "httpd",
- key: "allow_jsonp",
- value: "true"}],
- function() {
- var xhr = CouchDB.request("GET", "/" + db_name + "/_changes?callback=jsonp");
- T(xhr.status == 200);
- jsonp_flag = 0;
- eval(xhr.responseText);
- T(jsonp_flag == 1);
- });
+// TODO: either allow jsonp in the default global config or implement a config chg mechanism analogouts 2 sebastianrothbucher:clustertest - or leave out
+// run_on_modified_server(
+// [{section: "httpd",
+// key: "allow_jsonp",
+// value: "true"}],
+// function() {
+// var xhr = CouchDB.request("GET", "/" + db_name + "/_changes?callback=jsonp");
+// T(xhr.status == 200);
+// jsonp_flag = 0;
+// eval(xhr.responseText);
+// T(jsonp_flag == 1);
+// });
req = CouchDB.request("GET", "/" + db_name + "/_changes?feed=" + feed + "&timeout=10");
var lines = req.responseText.split("\n");
T(JSON.parse(lines[0]).changes[0].rev == docFoo._rev);
- T(JSON.parse(lines[1]).last_seq == 1);
+ // the sequence is not fully ordered and a complex structure now
+ T(JSON.parse(lines[1]).last_seq[0] == 1);
var xhr;
@@ -282,6 +282,11 @@ couchTests.changes = function(debug) {
}
+ // test on a new DB
+ var db_name = get_random_db_name();
+ db = new CouchDB(db_name, {"X-Couch-Full-Commit":"true"});
+ db.createDb();
+
// test the filtered changes
var ddoc = {
_id : "_design/changes_filter",
@@ -436,6 +441,8 @@ couchTests.changes = function(debug) {
// test for userCtx
+// TODO: either make part of global config, or allow 4 config changes - or leave out
+/*
run_on_modified_server(
[{section: "httpd",
key: "authentication_handlers",
@@ -464,20 +471,24 @@ couchTests.changes = function(debug) {
T(resp.results[0].id == docResp.id);
}
);
+*/
req = CouchDB.request("GET", "/" + db_name + "/_changes?limit=1");
resp = JSON.parse(req.responseText);
TEquals(1, resp.results.length);
//filter includes _conflicts
- var id = db.save({'food' : 'pizza'}).id;
- db.bulkSave([{_id: id, 'food' : 'pasta'}], {all_or_nothing:true});
-
- req = CouchDB.request("GET", "/" + db_name + "/_changes?filter=changes_filter/conflicted");
- resp = JSON.parse(req.responseText);
- T(resp.results.length == 1, "filter=changes_filter/conflicted");
+// TODO: all_or_nothing not yet in place
+// var id = db.save({'food' : 'pizza'}).id;
+// db.bulkSave([{_id: id, 'food' : 'pasta'}], {all_or_nothing:true});
+//
+// req = CouchDB.request("GET", "/" + db_name + "/_changes?filter=changes_filter/conflicted");
+// resp = JSON.parse(req.responseText);
+// T(resp.results.length == 1, "filter=changes_filter/conflicted");
// test with erlang filter function
+// TODO: either make part of global config, or allow 4 config changes - or leave out
+/*
run_on_modified_server([{
section: "native_query_servers",
key: "erlang",
@@ -577,9 +588,12 @@ couchTests.changes = function(debug) {
T(line.id == "andmore");
}
});
+*/
// COUCHDB-1037 - empty result for ?limit=1&filter=foo/bar in some cases
- T(db.deleteDb());
+ // test w/ new temp DB
+ db_name = get_random_db_name();
+ db = new CouchDB(db_name, {"X-Couch-Full-Commit":"true"});
T(db.createDb());
ddoc = {
@@ -600,32 +614,42 @@ couchTests.changes = function(debug) {
db.bulkSave(makeDocs(0, 5));
+// TODO: as before tests: for n>1 you can't be sure all docs are there immediately - so either stick w/ -n 1 or implement check-wait-check
+
req = CouchDB.request("GET", "/" + db.name + "/_changes");
resp = JSON.parse(req.responseText);
- TEquals(7, resp.last_seq);
+ // you can't know wether 7 is the last seq as you don't know how many collapse into one number
+ //TEquals(7, resp.last_seq);
TEquals(7, resp.results.length);
req = CouchDB.request(
"GET", "/"+ db.name + "/_changes?limit=1&filter=testdocs/testdocsonly");
resp = JSON.parse(req.responseText);
- TEquals(3, resp.last_seq);
+ // (seq as before)
+ //TEquals(3, resp.last_seq);
TEquals(1, resp.results.length);
- TEquals("0", resp.results[0].id);
+ // also, we can't guarantee ordering
+ T(resp.results[0].id.match("[0-5]"));
req = CouchDB.request(
"GET", "/" + db.name + "/_changes?limit=2&filter=testdocs/testdocsonly");
resp = JSON.parse(req.responseText);
- TEquals(4, resp.last_seq);
+ // (seq as before)
+ //TEquals(4, resp.last_seq);
TEquals(2, resp.results.length);
- TEquals("0", resp.results[0].id);
- TEquals("1", resp.results[1].id);
+ // also, we can't guarantee ordering
+ T(resp.results[0].id.match("[0-5]"));
+ T(resp.results[1].id.match("[0-5]"));
- TEquals(0, CouchDB.requestStats(['couchdb', 'httpd', 'clients_requesting_changes'], true).value);
- CouchDB.request("GET", "/" + db.name + "/_changes");
- TEquals(0, CouchDB.requestStats(['couchdb', 'httpd', 'clients_requesting_changes'], true).value);
+// TODO: either use local port for stats (and aggregate when n>1) or leave out
+// TEquals(0, CouchDB.requestStats(['couchdb', 'httpd', 'clients_requesting_changes'], true).value);
+// CouchDB.request("GET", "/" + db.name + "/_changes");
+// TEquals(0, CouchDB.requestStats(['couchdb', 'httpd', 'clients_requesting_changes'], true).value);
// COUCHDB-1256
- T(db.deleteDb());
+ // test w/ new temp DB
+ db_name = get_random_db_name();
+ db = new CouchDB(db_name, {"X-Couch-Full-Commit":"true"});
T(db.createDb());
T(db.save({"_id":"foo", "a" : 123}).ok);
@@ -640,29 +664,36 @@ couchTests.changes = function(debug) {
req = CouchDB.request("GET", "/" + db.name + "/_changes?style=all_docs");
resp = JSON.parse(req.responseText);
- TEquals(3, resp.last_seq);
+ // (seq as before)
+ //TEquals(3, resp.last_seq);
TEquals(2, resp.results.length);
- req = CouchDB.request("GET", "/" + db.name + "/_changes?style=all_docs&since=2");
+ // we can no longer pass a number into 'since' - but we have the 2nd last above - so we can use it (puh!)
+ req = CouchDB.request("GET", "/" + db.name + "/_changes?style=all_docs&since=" + encodeURIComponent(JSON.stringify(resp.results[0].seq)));
resp = JSON.parse(req.responseText);
- TEquals(3, resp.last_seq);
+ // (seq as before)
+ //TEquals(3, resp.last_seq);
TEquals(1, resp.results.length);
TEquals(2, resp.results[0].changes.length);
// COUCHDB-1852
- T(db.deleteDb());
+ // test w/ new temp DB
+ db_name = get_random_db_name();
+ db = new CouchDB(db_name, {"X-Couch-Full-Commit":"true"});
T(db.createDb());
- // create 4 documents... this assumes the update sequnce will start from 0 and get to 4
+ // create 4 documents... this assumes the update sequnce will start from 0 and then do sth in the cluster
db.save({"bop" : "foom"});
db.save({"bop" : "foom"});
db.save({"bop" : "foom"});
db.save({"bop" : "foom"});
+ // because of clustering, we need the 2nd entry as since value
+ req = CouchDB.request("GET", "/" + db_name + "/_changes");
// simulate an EventSource request with a Last-Event-ID header
req = CouchDB.request("GET", "/" + db_name + "/_changes?feed=eventsource&timeout=0&since=0",
- {"headers": {"Accept": "text/event-stream", "Last-Event-ID": "2"}});
+ {"headers": {"Accept": "text/event-stream", "Last-Event-ID": JSON.stringify(JSON.parse(req.responseText).results[1].seq)}});
// "parse" the eventsource response and collect only the "id: ..." lines
var changes = req.responseText.split('\n')
@@ -672,12 +703,15 @@ couchTests.changes = function(debug) {
.filter(function (el) { return (el[0] === "id"); })
// make sure we only got 2 changes, and they are update_seq=3 and update_seq=4
- T(changes.length === 2);
- T(changes[0][1] === "3");
- T(changes[1][1] === "4");
+// TODO: can't pass in new-style Sequence with Last-Event-ID header
+// T(changes.length === 2);
+// T(changes[0][1] === "3");
+// T(changes[1][1] === "4");
// COUCHDB-1923
- T(db.deleteDb());
+ // test w/ new temp DB
+ db_name = get_random_db_name();
+ db = new CouchDB(db_name, {"X-Couch-Full-Commit":"true"});
T(db.createDb());
var attachmentData = "VGhpcyBpcyBhIGJhc2U2NCBlbmNvZGVkIHRleHQ=";
@@ -744,6 +778,4 @@ couchTests.changes = function(debug) {
T(resp.results[0].doc._attachments['bar.txt'].encoding === "gzip");
T(resp.results[0].doc._attachments['bar.txt'].encoded_length === 47);
- // cleanup
- db.deleteDb();
};