summaryrefslogtreecommitdiff
path: root/test/etap/082-config-register.t
diff options
context:
space:
mode:
authorPaul Joseph Davis <davisp@apache.org>2009-06-24 05:51:41 +0000
committerPaul Joseph Davis <davisp@apache.org>2009-06-24 05:51:41 +0000
commit8a198316eb603850342f8a97bad56e6eaccd1e2f (patch)
treef0da1482557cfc17fff6bcf57c6cca796bde13ad /test/etap/082-config-register.t
parente05e90e517a4ee6c5a710bf6b289a956b1363cd9 (diff)
Lots of tests for couch_config.erl
Refactored couch_config.erl to resolve COUCHDB-384 Tweaked the main Makefile.am to make the cover and check targets depend on the dev target instead of the all target. Added the executable property to all test files to make them easily runnable as standalone tests (as in not via prove). git-svn-id: https://svn.apache.org/repos/asf/couchdb/trunk@787914 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'test/etap/082-config-register.t')
-rwxr-xr-xtest/etap/082-config-register.t75
1 files changed, 75 insertions, 0 deletions
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