summaryrefslogtreecommitdiff
path: root/test/etap
diff options
context:
space:
mode:
Diffstat (limited to 'test/etap')
-rwxr-xr-xtest/etap/031-doc-to-json.t2
-rwxr-xr-x[-rw-r--r--]test/etap/040-util.t0
-rwxr-xr-x[-rw-r--r--]test/etap/050-stream.t2
-rwxr-xr-x[-rw-r--r--]test/etap/060-kt-merging.t0
-rwxr-xr-x[-rw-r--r--]test/etap/061-kt-missing-leaves.t0
-rwxr-xr-x[-rw-r--r--]test/etap/062-kt-remove-leaves.t0
-rwxr-xr-x[-rw-r--r--]test/etap/063-kt-get-leaves.t0
-rwxr-xr-x[-rw-r--r--]test/etap/064-kt-counting.t0
-rwxr-xr-x[-rw-r--r--]test/etap/065-kt-stemming.t0
-rwxr-xr-x[-rw-r--r--]test/etap/070-couch-db.t0
-rwxr-xr-xtest/etap/080-config-get-set.t116
-rw-r--r--test/etap/081-config-override.1.ini5
-rw-r--r--test/etap/081-config-override.2.ini5
-rwxr-xr-xtest/etap/081-config-override.t200
-rwxr-xr-xtest/etap/082-config-register.t75
-rwxr-xr-xtest/etap/083-config-no-files.t43
16 files changed, 446 insertions, 2 deletions
diff --git a/test/etap/031-doc-to-json.t b/test/etap/031-doc-to-json.t
index 37b23848..37ee9946 100755
--- a/test/etap/031-doc-to-json.t
+++ b/test/etap/031-doc-to-json.t
@@ -9,7 +9,7 @@
main(_) ->
code:add_pathz("src/couchdb"),
- etap:plan(unknown),
+ etap:plan(12),
case (catch test()) of
ok ->
etap:end_tests();
diff --git a/test/etap/040-util.t b/test/etap/040-util.t
index a6b7df33..a6b7df33 100644..100755
--- a/test/etap/040-util.t
+++ b/test/etap/040-util.t
diff --git a/test/etap/050-stream.t b/test/etap/050-stream.t
index 41aa9754..dab2d50c 100644..100755
--- a/test/etap/050-stream.t
+++ b/test/etap/050-stream.t
@@ -3,7 +3,7 @@
main(_) ->
code:add_pathz("src/couchdb"),
- etap:plan(unknown),
+ etap:plan(13),
case (catch test()) of
ok ->
etap:end_tests();
diff --git a/test/etap/060-kt-merging.t b/test/etap/060-kt-merging.t
index 004e004f..004e004f 100644..100755
--- a/test/etap/060-kt-merging.t
+++ b/test/etap/060-kt-merging.t
diff --git a/test/etap/061-kt-missing-leaves.t b/test/etap/061-kt-missing-leaves.t
index c5ee1222..c5ee1222 100644..100755
--- a/test/etap/061-kt-missing-leaves.t
+++ b/test/etap/061-kt-missing-leaves.t
diff --git a/test/etap/062-kt-remove-leaves.t b/test/etap/062-kt-remove-leaves.t
index 566efa06..566efa06 100644..100755
--- a/test/etap/062-kt-remove-leaves.t
+++ b/test/etap/062-kt-remove-leaves.t
diff --git a/test/etap/063-kt-get-leaves.t b/test/etap/063-kt-get-leaves.t
index 9e366ff8..9e366ff8 100644..100755
--- a/test/etap/063-kt-get-leaves.t
+++ b/test/etap/063-kt-get-leaves.t
diff --git a/test/etap/064-kt-counting.t b/test/etap/064-kt-counting.t
index dd00cedd..dd00cedd 100644..100755
--- a/test/etap/064-kt-counting.t
+++ b/test/etap/064-kt-counting.t
diff --git a/test/etap/065-kt-stemming.t b/test/etap/065-kt-stemming.t
index 0de69482..0de69482 100644..100755
--- a/test/etap/065-kt-stemming.t
+++ b/test/etap/065-kt-stemming.t
diff --git a/test/etap/070-couch-db.t b/test/etap/070-couch-db.t
index da1f28ab..da1f28ab 100644..100755
--- a/test/etap/070-couch-db.t
+++ b/test/etap/070-couch-db.t
diff --git a/test/etap/080-config-get-set.t b/test/etap/080-config-get-set.t
new file mode 100755
index 00000000..4824b2aa
--- /dev/null
+++ b/test/etap/080-config-get-set.t
@@ -0,0 +1,116 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+
+default_config() ->
+ "etc/couchdb/default_dev.ini".
+
+main(_) ->
+ code:add_pathz("src/couchdb"),
+ etap:plan(12),
+ case (catch test()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
+ etap:bail(Other)
+ end,
+ ok.
+
+test() ->
+ % start couch_config with default
+ couch_config:start_link([default_config()]),
+
+
+ % Check that we can get values
+
+
+ etap:fun_is(
+ fun(List) -> length(List) > 0 end,
+ couch_config:all(),
+ "Data was loaded from the INI file."
+ ),
+
+ etap:fun_is(
+ fun(List) -> length(List) > 0 end,
+ couch_config:get("daemons"),
+ "There are settings in the [daemons] section of the INI file."
+ ),
+
+ etap:is(
+ couch_config:get("httpd_design_handlers", "_view"),
+ "{couch_httpd_view, handle_view_req}",
+ "The {httpd_design_handlers, view} is the expected default."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "foo", "bar"),
+ "bar",
+ "Returns the default when key doesn't exist in config."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "foo"),
+ undefined,
+ "The default default is the atom 'undefined'."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "port", "bar"),
+ "5984",
+ "Only returns the default when the config setting does not exist."
+ ),
+
+
+ % Check that setting values works.
+
+
+ ok = couch_config:set("log", "level", "severe", false),
+
+ etap:is(
+ couch_config:get("log", "level"),
+ "severe",
+ "Non persisted changes take effect."
+ ),
+
+ etap:is(
+ couch_config:get("new_section", "bizzle"),
+ undefined,
+ "Section 'new_section' does not exist."
+ ),
+
+ ok = couch_config:set("new_section", "bizzle", "bang", false),
+
+ etap:is(
+ couch_config:get("new_section", "bizzle"),
+ "bang",
+ "New section 'new_section' was created for a new key/value pair."
+ ),
+
+
+ % Check that deleting works
+
+
+ ok = couch_config:delete("new_section", "bizzle", false),
+ etap:is(
+ couch_config:get("new_section", "bizzle"),
+ "",
+ "Deleting sets the value to \"\""
+ ),
+
+
+ % Check ge/set/delete binary strings
+
+ ok = couch_config:set(<<"foo">>, <<"bar">>, <<"baz">>, false),
+ etap:is(
+ couch_config:get(<<"foo">>, <<"bar">>),
+ <<"baz">>,
+ "Can get and set with binary section and key values."
+ ),
+ ok = couch_config:delete(<<"foo">>, <<"bar">>, false),
+ etap:is(
+ couch_config:get(<<"foo">>, <<"bar">>),
+ "",
+ "Deleting with binary section/key pairs sets the value to \"\""
+ ),
+
+ ok.
diff --git a/test/etap/081-config-override.1.ini b/test/etap/081-config-override.1.ini
new file mode 100644
index 00000000..f11da1f3
--- /dev/null
+++ b/test/etap/081-config-override.1.ini
@@ -0,0 +1,5 @@
+[couchdb]
+max_dbs_open=10
+
+[httpd]
+port=4895
diff --git a/test/etap/081-config-override.2.ini b/test/etap/081-config-override.2.ini
new file mode 100644
index 00000000..bb67b629
--- /dev/null
+++ b/test/etap/081-config-override.2.ini
@@ -0,0 +1,5 @@
+[httpd]
+port = 80
+
+[fizbang]
+unicode = normalized \ No newline at end of file
diff --git a/test/etap/081-config-override.t b/test/etap/081-config-override.t
new file mode 100755
index 00000000..1d66b58e
--- /dev/null
+++ b/test/etap/081-config-override.t
@@ -0,0 +1,200 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+
+default_config() ->
+ "etc/couchdb/default_dev.ini".
+
+local_config_1() ->
+ "test/etap/081-config-override.1.ini".
+
+local_config_2() ->
+ "test/etap/081-config-override.2.ini".
+
+local_config_write() ->
+ "test/etap/temp.081".
+
+% Run tests and wait for the config gen_server to shutdown.
+run_tests(IniFiles, Tests) ->
+ {ok, Pid} = couch_config:start_link(IniFiles),
+ erlang:monitor(process, Pid),
+ Tests(),
+ couch_config:stop(),
+ receive
+ {'DOWN', _, _, Pid, _} -> ok;
+ _Other -> etap:diag("OTHER: ~p~n", [_Other])
+ after
+ 1000 -> throw({timeout_error, config_stop})
+ end.
+
+main(_) ->
+ code:add_pathz("src/couchdb"),
+ etap:plan(17),
+
+ case (catch test()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
+ etap:bail(Other)
+ end,
+ ok.
+
+test() ->
+
+ CheckStartStop = fun() -> ok end,
+ run_tests([default_config()], CheckStartStop),
+
+ CheckDefaults = fun() ->
+ etap:is(
+ couch_config:get("couchdb", "max_dbs_open"),
+ "100",
+ "{couchdb, max_dbs_open} is 100 by defualt."
+ ),
+
+ etap:is(
+ couch_config:get("httpd","port"),
+ "5984",
+ "{httpd, port} is 5984 by default"
+ ),
+
+ etap:is(
+ couch_config:get("fizbang", "unicode"),
+ undefined,
+ "{fizbang, unicode} is undefined by default"
+ )
+ end,
+
+ run_tests([default_config()], CheckDefaults),
+
+
+ % Check that subsequent files override values appropriately
+
+ CheckOverride = fun() ->
+ etap:is(
+ couch_config:get("couchdb", "max_dbs_open"),
+ "10",
+ "{couchdb, max_dbs_open} was overriden with the value 10"
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "4895",
+ "{httpd, port} was overriden with the value 4895"
+ )
+ end,
+
+ run_tests([default_config(), local_config_1()], CheckOverride),
+
+
+ % Check that overrides can create new sections
+
+ CheckOverride2 = fun() ->
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "80",
+ "{httpd, port} is overriden with the value 80"
+ ),
+
+ etap:is(
+ couch_config:get("fizbang", "unicode"),
+ "normalized",
+ "{fizbang, unicode} was created by override INI file"
+ )
+ end,
+
+ run_tests([default_config(), local_config_2()], CheckOverride2),
+
+
+ % Check that values can be overriden multiple times
+
+ CheckOverride3 = fun() ->
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "80",
+ "{httpd, port} value was taken from the last specified INI file."
+ )
+ end,
+
+ run_tests(
+ [default_config(), local_config_1(), local_config_2()],
+ CheckOverride3
+ ),
+
+ % Check persistence to last file.
+
+ % Empty the file in case it exists.
+ {ok, Fd} = file:open(local_config_write(), write),
+ ok = file:truncate(Fd),
+ ok = file:close(Fd),
+
+ % Open and write a value
+ CheckCanWrite = fun() ->
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "5984",
+ "{httpd, port} is still 5984 by default"
+ ),
+
+ etap:is(
+ couch_config:set("httpd", "port", "8080"),
+ ok,
+ "Writing {httpd, port} is kosher."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "8080",
+ "{httpd, port} was updated to 8080 successfully."
+ ),
+
+ etap:is(
+ couch_config:delete("httpd", "bind_address"),
+ ok,
+ "Deleting {httpd, bind_address} succeeds"
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "bind_address"),
+ "",
+ "{httpd, bind_address} was actually deleted."
+ )
+ end,
+
+ run_tests([default_config(), local_config_write()], CheckCanWrite),
+
+ % Open and check where we don't expect persistence.
+
+ CheckDidntWrite = fun() ->
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "5984",
+ "{httpd, port} was not persisted to the primary INI file."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "bind_address"),
+ "127.0.0.1",
+ "{httpd, bind_address} was not deleted form the primary INI file."
+ )
+ end,
+
+ run_tests([default_config()], CheckDidntWrite),
+
+ % Open and check we have only the persistence we expect.
+ CheckDidWrite = fun() ->
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "8080",
+ "{httpd, port} is still 8080 after reopening the config."
+ ),
+
+ etap:is(
+ couch_config:get("httpd", "bind_address"),
+ "",
+ "{httpd, bind_address} is still \"\" after reopening."
+ )
+ end,
+
+ run_tests([local_config_write()], CheckDidWrite),
+
+ ok.
diff --git a/test/etap/082-config-register.t b/test/etap/082-config-register.t
new file mode 100755
index 00000000..9f454984
--- /dev/null
+++ b/test/etap/082-config-register.t
@@ -0,0 +1,75 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+
+default_config() ->
+ "etc/couchdb/default_dev.ini".
+
+main(_) ->
+ code:add_pathz("src/couchdb"),
+ etap:plan(5),
+ case (catch test()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
+ etap:bail(Other)
+ end,
+ ok.
+
+test() ->
+ couch_config:start_link([default_config()]),
+
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "5984",
+ "{httpd, port} is 5984 by default."
+ ),
+
+ ok = couch_config:set("httpd", "port", "4895", false),
+
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "4895",
+ "{httpd, port} changed to 4895"
+ ),
+
+ SentinelFunc = fun() ->
+ % Ping/Pong to make sure we wait for this
+ % process to die
+ receive {ping, From} -> From ! pong end
+ end,
+ SentinelPid = spawn(SentinelFunc),
+
+ couch_config:register(
+ fun("httpd", "port", Value) ->
+ etap:is(Value, "8080", "Registered function got notification.")
+ end,
+ SentinelPid
+ ),
+
+ ok = couch_config:set("httpd", "port", "8080", false),
+
+ % Implicitly checking that we *don't* call the function
+ etap:is(
+ couch_config:get("httpd", "bind_address"),
+ "127.0.0.1",
+ "{httpd, bind_address} is not '0.0.0.0'"
+ ),
+ ok = couch_config:set("httpd", "bind_address", "0.0.0.0", false),
+
+ % Ping-Pong kill process
+ SentinelPid ! {ping, self()},
+ receive
+ _Any -> ok
+ after 1000 ->
+ throw({timeout_error, registered_pid})
+ end,
+
+ ok = couch_config:set("httpd", "port", "80", false),
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "80",
+ "Implicitly test that the function got de-registered"
+ ),
+
+ ok. \ No newline at end of file
diff --git a/test/etap/083-config-no-files.t b/test/etap/083-config-no-files.t
new file mode 100755
index 00000000..2e4d8e71
--- /dev/null
+++ b/test/etap/083-config-no-files.t
@@ -0,0 +1,43 @@
+#!/usr/bin/env escript
+%% -*- erlang -*-
+
+default_config() ->
+ "etc/couchdb/default_dev.ini".
+
+main(_) ->
+ code:add_pathz("src/couchdb"),
+ etap:plan(3),
+ case (catch test()) of
+ ok ->
+ etap:end_tests();
+ Other ->
+ etap:diag(io_lib:format("Test died abnormally: ~p", [Other])),
+ etap:bail(Other)
+ end,
+ ok.
+
+test() ->
+ couch_config:start_link([]),
+
+ etap:fun_is(
+ fun(KVPairs) -> length(KVPairs) == 0 end,
+ couch_config:all(),
+ "No INI files specified returns 0 key/value pairs."
+ ),
+
+ ok = couch_config:set("httpd", "port", "80", false),
+
+ etap:is(
+ couch_config:get("httpd", "port"),
+ "80",
+ "Created a new non-persisted k/v pair."
+ ),
+
+ ok = couch_config:set("httpd", "bind_address", "127.0.0.1"),
+ etap:is(
+ couch_config:get("httpd", "bind_address"),
+ "127.0.0.1",
+ "Asking for a persistent key/value pair doesn't choke."
+ ),
+
+ ok. \ No newline at end of file