summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--share/www/script/couch_tests.js21
-rw-r--r--share/www/script/test/reader_acl.js30
-rw-r--r--src/couchdb/couch_server_sup.erl7
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