couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From fdman...@apache.org
Subject svn commit: r1065448 - /couchdb/trunk/share/www/script/test/replicator_db.js
Date Mon, 31 Jan 2011 00:43:45 GMT
Author: fdmanana
Date: Mon Jan 31 00:43:45 2011
New Revision: 1065448

URL: http://svn.apache.org/viewvc?rev=1065448&view=rev
Log:
Added test swap_rep_db to test case replicator_db.js

The purpose of this test is to verify that replications are stopped and
restarted when the replicator database is dynamically changed.

Modified:
    couchdb/trunk/share/www/script/test/replicator_db.js

Modified: couchdb/trunk/share/www/script/test/replicator_db.js
URL: http://svn.apache.org/viewvc/couchdb/trunk/share/www/script/test/replicator_db.js?rev=1065448&r1=1065447&r2=1065448&view=diff
==============================================================================
--- couchdb/trunk/share/www/script/test/replicator_db.js (original)
+++ couchdb/trunk/share/www/script/test/replicator_db.js Mon Jan 31 00:43:45 2011
@@ -727,6 +727,113 @@ couchTests.replicator_db = function(debu
   }
 
 
+  function swap_rep_db() {
+    var repDb2 = new CouchDB("test_suite_rep_db_2");
+    var dbA = new CouchDB("test_suite_rep_db_a");
+    var dbA_copy = new CouchDB("test_suite_rep_db_a_copy");
+    var dbB = new CouchDB("test_suite_rep_db_b");
+    var dbB_copy = new CouchDB("test_suite_rep_db_b_copy");
+    var dbC = new CouchDB("test_suite_rep_db_c");
+    var dbC_copy = new CouchDB("test_suite_rep_db_c_copy");
+    var repDoc1, repDoc2, repDoc3;
+    var xhr, i, doc, copy, new_doc;
+
+    populate_db(dbA, docs1);
+    populate_db(dbB, docs1);
+    populate_db(dbC, docs1);
+    populate_db(dbA_copy, []);
+    populate_db(dbB_copy, []);
+    populate_db(dbC_copy, []);
+    populate_db(repDb2, []);
+
+    repDoc1 = {
+      _id: "rep1",
+      source: CouchDB.protocol + host + "/" + dbA.name,
+      target: dbA_copy.name,
+      continuous: true
+    };
+    repDoc2 = {
+      _id: "rep2",
+      source: CouchDB.protocol + host + "/" + dbB.name,
+      target: dbB_copy.name,
+      continuous: true
+    };
+    repDoc3 = {
+      _id: "rep3",
+      source: CouchDB.protocol + host + "/" + dbC.name,
+      target: dbC_copy.name,
+      continuous: true
+    };
+
+    TEquals(true, repDb.save(repDoc1).ok);
+    TEquals(true, repDb.save(repDoc2).ok);
+
+    waitForSeq(dbA, dbA_copy);
+    waitForSeq(dbB, dbB_copy);
+
+    xhr = CouchDB.request("PUT", "/_config/replicator/db",{
+      body : JSON.stringify(repDb2.name),
+      headers: {"X-Couch-Persist": "false"}
+    });
+    TEquals(200, xhr.status);
+
+    new_doc = {
+      _id: "foo666",
+      value: 666
+    };
+
+    TEquals(true, dbA.save(new_doc).ok);
+    TEquals(true, dbB.save(new_doc).ok);
+    wait(1000);
+
+    TEquals(true, repDb2.save(repDoc3).ok);
+    waitForSeq(dbC, dbC_copy);
+
+    for (i = 0; i < docs1.length; i++) {
+      doc = docs1[i];
+      copy = dbA_copy.open(doc._id);
+      T(copy !== null);
+      TEquals(doc.value, copy.value);
+      copy = dbB_copy.open(doc._id);
+      T(copy !== null);
+      TEquals(doc.value, copy.value);
+      copy = dbC_copy.open(doc._id);
+      T(copy !== null);
+      TEquals(doc.value, copy.value);
+    }
+
+    // replications rep1 and rep2 should have been stopped when the replicator
+    // database was swapped
+    copy = dbA_copy.open(new_doc._id);
+    TEquals(null, copy);
+    copy = dbB_copy.open(new_doc._id);
+    TEquals(null, copy);
+
+    xhr = CouchDB.request("PUT", "/_config/replicator/db",{
+      body : JSON.stringify(repDb.name),
+      headers: {"X-Couch-Persist": "false"}
+    });
+    TEquals(200, xhr.status);
+
+    // after setting the replicator database to the former, replications rep1
+    // and rep2 should have been resumed, while rep3 was stopped
+    TEquals(true, dbC.save(new_doc).ok);
+    wait(1000);
+
+    waitForSeq(dbA, dbA_copy);
+    waitForSeq(dbB, dbB_copy);
+
+    copy = dbA_copy.open(new_doc._id);
+    T(copy !== null);
+    TEquals(new_doc.value, copy.value);
+    copy = dbB_copy.open(new_doc._id);
+    T(copy !== null);
+    TEquals(new_doc.value, copy.value);
+    copy = dbC_copy.open(new_doc._id);
+    TEquals(null, copy);
+  }
+
+
   function error_state_replication() {
     populate_db(dbA, docs1);
 
@@ -805,6 +912,10 @@ couchTests.replicator_db = function(debu
   restartServer();
   continuous_replication_survives_restart();
 
+  repDb.deleteDb();
+  restartServer();
+  run_on_modified_server(server_config, swap_rep_db);
+
 /*
  * Disabled, since error state would be set on the document only after
  * the exponential backoff retry done by the replicator database listener



Mime
View raw message