diff options
Diffstat (limited to 'test')
-rwxr-xr-x | test/etap/031-doc-to-json.t | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/040-util.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/050-stream.t | 2 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/060-kt-merging.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/061-kt-missing-leaves.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/062-kt-remove-leaves.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/063-kt-get-leaves.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/064-kt-counting.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/065-kt-stemming.t | 0 | ||||
-rwxr-xr-x[-rw-r--r--] | test/etap/070-couch-db.t | 0 | ||||
-rwxr-xr-x | test/etap/080-config-get-set.t | 116 | ||||
-rw-r--r-- | test/etap/081-config-override.1.ini | 5 | ||||
-rw-r--r-- | test/etap/081-config-override.2.ini | 5 | ||||
-rwxr-xr-x | test/etap/081-config-override.t | 200 | ||||
-rwxr-xr-x | test/etap/082-config-register.t | 75 | ||||
-rwxr-xr-x | test/etap/083-config-no-files.t | 43 |
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 |