From ed7e7c686fae7f1d2e3f149c2f2ed8854c4f95c8 Mon Sep 17 00:00:00 2001 From: John Christopher Anderson Date: Thu, 25 Mar 2010 19:06:52 +0000 Subject: restart using init:restart() for better test reliability git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@927545 13f79535-47bb-0310-9956-ffa450edef68 --- share/www/script/couch_tests.js | 21 ++++++++++++++++++++- share/www/script/test/reader_acl.js | 30 +++++++++++++++++++++++------- src/couchdb/couch_server_sup.erl | 7 +------ 3 files changed, 44 insertions(+), 14 deletions(-) diff --git a/share/www/script/couch_tests.js b/share/www/script/couch_tests.js index 85d07065..3978d483 100644 --- a/share/www/script/couch_tests.js +++ b/share/www/script/couch_tests.js @@ -149,6 +149,25 @@ function stringFun(fun) { return string; } +function waitForRestart() { + var waiting = true; + while (waiting) { + try { + CouchDB.request("GET", "/"); + CouchDB.request("GET", "/"); + waiting = false; + } catch(e) { + // the request will fail until restart completes + } + } +}; + function restartServer() { - CouchDB.request("POST", "/_restart"); + var xhr; + try { + CouchDB.request("POST", "/_restart"); + } catch(e) { + // this request may sometimes fail + } + waitForRestart(); } diff --git a/share/www/script/test/reader_acl.js b/share/www/script/test/reader_acl.js index d173d701..a3b6bd88 100644 --- a/share/www/script/test/reader_acl.js +++ b/share/www/script/test/reader_acl.js @@ -28,6 +28,7 @@ couchTests.reader_acl = function(debug) { roles : ["top-secret"] }, "funnybone"); T(usersDb.save(jchrisUserDoc).ok); + usersDb.ensureFullCommit(); T(CouchDB.session().userCtx.name == null); @@ -41,12 +42,15 @@ couchTests.reader_acl = function(debug) { names : ["joe","barb"] } }).ok); - - usersDb.ensureFullCommit(); - // security changes will always commit synchronously - restartServer(); - - // can't read it as jchris + } finally { + CouchDB.logout(); + } + } + + // split into 2 funs so we can test restart behavior + function testFun2() { + try { + // can't read it as jchris b/c he's missing the needed role T(CouchDB.login("jchris@apache.org", "funnybone").ok); T(CouchDB.session().userCtx.name == "jchris@apache.org"); @@ -151,7 +155,7 @@ couchTests.reader_acl = function(debug) { } finally { CouchDB.logout(); } - } + }; run_on_modified_server( [{section: "httpd", @@ -161,4 +165,16 @@ couchTests.reader_acl = function(debug) { key: "authentication_db", value: "test_suite_users"}], testFun ); + + // security changes will always commit synchronously + restartServer(); + + run_on_modified_server( + [{section: "httpd", + key: "authentication_handlers", + value: "{couch_httpd_auth, cookie_authentication_handler}, {couch_httpd_auth, default_authentication_handler}"}, + {section: "couch_httpd_auth", + key: "authentication_db", value: "test_suite_users"}], + testFun2 + ); } diff --git a/src/couchdb/couch_server_sup.erl b/src/couchdb/couch_server_sup.erl index d89e987d..da0fbdbb 100644 --- a/src/couchdb/couch_server_sup.erl +++ b/src/couchdb/couch_server_sup.erl @@ -32,12 +32,7 @@ start_link(IniFiles) -> end. restart_core_server() -> - supervisor:terminate_child(couch_primary_services, couch_server), - supervisor:terminate_child(couch_secondary_services, stats_aggregator), - supervisor:terminate_child(couch_secondary_services, stats_collector), - supervisor:restart_child(couch_primary_services, couch_server), - supervisor:restart_child(couch_secondary_services, stats_collector), - supervisor:restart_child(couch_secondary_services, stats_aggregator). + init:restart(). couch_config_start_link_wrapper(IniFiles, FirstConfigPid) -> case is_process_alive(FirstConfigPid) of -- cgit v1.2.3