summaryrefslogtreecommitdiff
path: root/test/javascript/tests/config.js
diff options
context:
space:
mode:
Diffstat (limited to 'test/javascript/tests/config.js')
-rw-r--r--test/javascript/tests/config.js222
1 files changed, 0 insertions, 222 deletions
diff --git a/test/javascript/tests/config.js b/test/javascript/tests/config.js
deleted file mode 100644
index e3cacc291..000000000
--- a/test/javascript/tests/config.js
+++ /dev/null
@@ -1,222 +0,0 @@
-// Licensed under the Apache License, Version 2.0 (the "License"); you may not
-// use this file except in compliance with the License. You may obtain a copy of
-// the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-// License for the specific language governing permissions and limitations under
-// the License.
-
-couchTests.elixir = true;
-couchTests.config = function(debug) {
- return console.log('done in test/elixir/test/config_test.exs');
- if (debug) debugger;
-
- // test that /_config returns all the settings
- var xhr = CouchDB.request("GET", "/_node/node1@127.0.0.1/_config");
- var config = JSON.parse(xhr.responseText);
-
- config_port = config.chttpd.port;
-
- /*
- if we run on standard ports, we can't extract
- the number from the URL. Instead we try to guess
- from the protocol what port we are running on.
- If we can't guess, we don't test for the port.
- Overengineering FTW.
- */
- var server_port = CouchDB.host.split(':');
- if(server_port.length == 1 && CouchDB.inBrowser) {
- if(CouchDB.protocol == "http://") {
- port = "80";
- }
- if(CouchDB.protocol == "https://") {
- port = "443";
- }
- } else {
- port = server_port.pop();
- }
-
- if(CouchDB.protocol == "http://") {
- config_port = config.chttpd.port;
- }
- if(CouchDB.protocol == "https://") {
- config_port = config.ssl.port;
- }
-
- if(port && config_port != "0") {
- TEquals(config_port, port, "ports should match");
- }
-
- T(config.couchdb.database_dir);
- T(config.log.level);
-
- // test that settings can be altered, and that an undefined whitelist allows any change
- TEquals(undefined, config.httpd.config_whitelist, "Default whitelist is empty");
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/test/foo",{
- body : JSON.stringify("bar"),
- headers: {"X-Couch-Persist": "false"}
- });
- T(xhr.status == 200);
- xhr = CouchDB.request("GET", "/_node/node1@127.0.0.1/_config/test");
- config = JSON.parse(xhr.responseText);
- T(config.foo == "bar");
-
- // you can get a single key
- xhr = CouchDB.request("GET", "/_node/node1@127.0.0.1/_config/test/foo");
- config = JSON.parse(xhr.responseText);
- T(config == "bar");
-
- // Server-side password hashing, and raw updates disabling that.
- var password_plain = 's3cret';
- var password_hashed = null;
-
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/admins/administrator",{
- body : JSON.stringify(password_plain),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Create an admin in the config");
-
- T(CouchDB.login("administrator", password_plain).ok);
-
- xhr = CouchDB.request("GET", "/_node/node1@127.0.0.1/_config/admins/administrator");
- password_hashed = JSON.parse(xhr.responseText);
- T(password_hashed.match(/^-pbkdf2-/) || password_hashed.match(/^-hashed-/),
- "Admin password is hashed");
-
-/* // XXX: BUGGED
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/admins/administrator?raw=nothanks",{
- body : JSON.stringify(password_hashed),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(400, xhr.status, "CouchDB rejects an invalid 'raw' option");
-
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/admins/administrator?raw=true",{
- body : JSON.stringify(password_hashed),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set an raw, pre-hashed admin password");
-
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/admins/administrator?raw=false",{
- body : JSON.stringify(password_hashed),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set an admin password with raw=false");
-
- // The password is literally the string "-pbkdf2-abcd...".
- T(CouchDB.login("administrator", password_hashed).ok);
-
- xhr = CouchDB.request("GET", "/_node/node1@127.0.0.1/_config/admins/administrator");
- T(password_hashed != JSON.parse(xhr.responseText),
- "Hashed password was not stored as a raw string");
-*/
-
- xhr = CouchDB.request("DELETE", "/_node/node1@127.0.0.1/_config/admins/administrator",{
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Delete an admin from the config");
- T(CouchDB.logout().ok);
-
- // Non-term whitelist values allow further modification of the whitelist.
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- body : JSON.stringify("!This is an invalid Erlang term!"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set config whitelist to an invalid Erlang term");
- xhr = CouchDB.request("DELETE", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Modify whitelist despite it being invalid syntax");
-
- // Non-list whitelist values allow further modification of the whitelist.
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- body : JSON.stringify("{[yes, a_valid_erlang_term, but_unfortunately, not_a_list]}"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set config whitelist to an non-list term");
- xhr = CouchDB.request("DELETE", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Modify whitelist despite it not being a list");
-
- // Keys not in the whitelist may not be modified.
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- body : JSON.stringify("[{httpd,config_whitelist}, {test,foo}]"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set config whitelist to something valid");
-
-/* // XXX BUGGED!
- ["PUT", "DELETE"].forEach(function(method) {
- ["test/not_foo", "not_test/foo", "neither_test/nor_foo"].forEach(function(pair) {
- var path = "/_node/node1@127.0.0.1/_config/" + pair;
- var test_name = method + " to " + path + " disallowed: not whitelisted";
-
- xhr = CouchDB.request(method, path, {
- body : JSON.stringify("Bummer! " + test_name),
- headers: {"X-Couch-Persist": "false"}
- });
- console.log(test_name);
- TEquals(400, xhr.status, test_name);
- });
- });
-*/
-
- // Keys in the whitelist may be modified.
- ["PUT", "DELETE"].forEach(function(method) {
- xhr = CouchDB.request(method, "/_node/node1@127.0.0.1/_config/test/foo",{
- body : JSON.stringify(method + " to whitelisted config variable"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Keys in the whitelist may be modified");
- });
-
- // Non-2-tuples in the whitelist are ignored
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- body : JSON.stringify("[{httpd,config_whitelist}, these, {are}, {nOt, 2, tuples}," +
- " [so], [they, will], [all, become, noops], {test,foo}]"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set config whitelist with some inert values");
- ["PUT", "DELETE"].forEach(function(method) {
- xhr = CouchDB.request(method, "/_node/node1@127.0.0.1/_config/test/foo",{
- body : JSON.stringify(method + " to whitelisted config variable"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Update whitelisted variable despite invalid entries");
- });
-
- // Atoms, binaries, and strings suffice as whitelist sections and keys.
- ["{test,foo}", '{"test","foo"}', '{<<"test">>,<<"foo">>}'].forEach(function(pair) {
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- body : JSON.stringify("[{httpd,config_whitelist}, " + pair + "]"),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Set config whitelist to include " + pair);
-
- var pair_format = {"t":"tuple", '"':"string", "<":"binary"}[pair[1]];
- ["PUT", "DELETE"].forEach(function(method) {
- xhr = CouchDB.request(method, "/_node/node1@127.0.0.1/_config/test/foo",{
- body : JSON.stringify(method + " with " + pair_format),
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Whitelist works with " + pair_format);
- });
- });
-
- xhr = CouchDB.request("DELETE", "/_node/node1@127.0.0.1/_config/httpd/config_whitelist",{
- headers: {"X-Couch-Persist": "false"}
- });
- TEquals(200, xhr.status, "Reset config whitelist to undefined");
-
- // Confirm that the blacklist is functional
- ["daemons", "external", "httpd_design_handlers", "httpd_db_handlers", "native_query_servers", "os_daemons", "query_servers"].forEach(function(section) {
- xhr = CouchDB.request("PUT", "/_node/node1@127.0.0.1/_config/" + section + "/wohali",{
- body: "\"rules\""
- });
- TEquals(403, xhr.status, "Blacklisted config section " + section);
- });
-};