Port 171-os-daemons-config.t etap test suite to eunit Simplify os_daemon_configer.escript
There is no need to start couch_config, init code paths and include anything, just need to make ejson beams available. Project: http://git-wip-us.apache.org/repos/asf/couchdb/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb/commit/21de05a8 Tree: http://git-wip-us.apache.org/repos/asf/couchdb/tree/21de05a8 Diff: http://git-wip-us.apache.org/repos/asf/couchdb/diff/21de05a8 Branch: refs/heads/1.x.x Commit: 21de05a8a0f974acfa977f92109d89a7b85365a3 Parents: f3103f3 Author: Alexander Shorin <[email protected]> Authored: Tue Jun 3 14:10:25 2014 +0400 Committer: Alexander Shorin <[email protected]> Committed: Wed Dec 2 03:51:26 2015 +0300 ---------------------------------------------------------------------- .gitignore | 2 + configure.ac | 2 + test/couchdb/Makefile.am | 2 + test/couchdb/couch_auth_cache_tests.erl | 40 ++++----- test/couchdb/couchdb_os_daemons_tests.erl | 32 +++++++- .../fixtures/os_daemon_configer.escript.in | 84 +++++++++++++++++++ test/etap/171-os-daemons-config.es | 85 -------------------- test/etap/171-os-daemons-config.t | 74 ----------------- test/etap/Makefile.am | 2 - 9 files changed, 136 insertions(+), 187 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 96c9950..4789429 100644 --- a/.gitignore +++ b/.gitignore @@ -128,6 +128,8 @@ src/snappy/snappy.app stamp-h1 test/.deps/ test/couchdb/run +test/couchdb/fixtures/.deps/ +test/couchdb/fixtures/os_daemon_configer.escript test/couchdb/include/couch_eunit.hrl test/etap/.deps/ test/etap/run http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/configure.ac ---------------------------------------------------------------------- diff --git a/configure.ac b/configure.ac index 3ae7dde..42ea75a 100644 --- a/configure.ac +++ b/configure.ac @@ -759,6 +759,8 @@ AC_CONFIG_FILES([src/ejson/Makefile]) AC_CONFIG_FILES([test/Makefile]) AC_CONFIG_FILES([test/couchdb/run]) AC_CONFIG_FILES([test/couchdb/Makefile]) +AC_CONFIG_FILES([test/couchdb/fixtures/Makefile]) +AC_CONFIG_FILES([test/couchdb/fixtures/os_daemon_configer.escript]) AC_CONFIG_FILES([test/couchdb/include/couch_eunit.hrl]) AC_CONFIG_FILES([test/etap/Makefile]) AC_CONFIG_FILES([test/etap/test_util.erl]) http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/couchdb/Makefile.am ---------------------------------------------------------------------- diff --git a/test/couchdb/Makefile.am b/test/couchdb/Makefile.am index b568335..a1102bd 100644 --- a/test/couchdb/Makefile.am +++ b/test/couchdb/Makefile.am @@ -19,6 +19,7 @@ all: -o $(top_builddir)/test/couchdb/ebin/ $(ERLC_FLAGS) ${TEST} \ $(top_srcdir)/test/couchdb/test_request.erl chmod +x run + chmod +x $(top_builddir)/test/couchdb/fixtures/os_daemon_configer.escript eunit_files = \ couch_auth_cache_tests.erl \ @@ -52,6 +53,7 @@ fixture_files = \ fixtures/couch_stats_aggregates.cfg \ fixtures/couch_stats_aggregates.ini \ fixtures/os_daemon_looper.escript \ + fixtures/os_daemon_configer.escript \ fixtures/logo.png EXTRA_DIST = \ http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/couchdb/couch_auth_cache_tests.erl ---------------------------------------------------------------------- diff --git a/test/couchdb/couch_auth_cache_tests.erl b/test/couchdb/couch_auth_cache_tests.erl index 34f7127..3b2321c 100644 --- a/test/couchdb/couch_auth_cache_tests.erl +++ b/test/couchdb/couch_auth_cache_tests.erl @@ -74,47 +74,43 @@ should_get_nil_on_missed_cache(_) -> ?_assertEqual(nil, couch_auth_cache:get_user_creds("joe")). should_get_right_password_hash(DbName) -> - ?_assert(begin + ?_test(begin PasswordHash = hash_password("pass1"), {ok, _} = update_user_doc(DbName, "joe", "pass1"), Creds = couch_auth_cache:get_user_creds("joe"), ?assertEqual(PasswordHash, - couch_util:get_value(<<"password_sha">>, Creds)), - true + couch_util:get_value(<<"password_sha">>, Creds)) end). should_ensure_doc_hash_equals_cached_one(DbName) -> - ?_assert(begin + ?_test(begin {ok, _} = update_user_doc(DbName, "joe", "pass1"), Creds = couch_auth_cache:get_user_creds("joe"), CachedHash = couch_util:get_value(<<"password_sha">>, Creds), StoredHash = get_user_doc_password_sha(DbName, "joe"), - ?assertEqual(StoredHash, CachedHash), - true + ?assertEqual(StoredHash, CachedHash) end). should_update_password(DbName) -> - ?_assert(begin + ?_test(begin PasswordHash = hash_password("pass2"), {ok, Rev} = update_user_doc(DbName, "joe", "pass1"), {ok, _} = update_user_doc(DbName, "joe", "pass2", Rev), Creds = couch_auth_cache:get_user_creds("joe"), ?assertEqual(PasswordHash, - couch_util:get_value(<<"password_sha">>, Creds)), - true + couch_util:get_value(<<"password_sha">>, Creds)) end). should_cleanup_cache_after_userdoc_deletion(DbName) -> - ?_assert(begin + ?_test(begin {ok, _} = update_user_doc(DbName, "joe", "pass1"), delete_user_doc(DbName, "joe"), - ?assertEqual(nil, couch_auth_cache:get_user_creds("joe")), - true + ?assertEqual(nil, couch_auth_cache:get_user_creds("joe")) end). should_restore_cache_after_userdoc_recreation(DbName) -> - ?_assert(begin + ?_test(begin PasswordHash = hash_password("pass5"), {ok, _} = update_user_doc(DbName, "joe", "pass1"), delete_user_doc(DbName, "joe"), @@ -124,22 +120,20 @@ should_restore_cache_after_userdoc_recreation(DbName) -> Creds = couch_auth_cache:get_user_creds("joe"), ?assertEqual(PasswordHash, - couch_util:get_value(<<"password_sha">>, Creds)), - true + couch_util:get_value(<<"password_sha">>, Creds)) end). should_drop_cache_on_auth_db_change(DbName) -> - ?_assert(begin + ?_test(begin {ok, _} = update_user_doc(DbName, "joe", "pass1"), full_commit(DbName), couch_config:set("couch_httpd_auth", "authentication_db", ?b2l(?tempdb()), false), - ?assertEqual(nil, couch_auth_cache:get_user_creds("joe")), - true + ?assertEqual(nil, couch_auth_cache:get_user_creds("joe")) end). should_restore_cache_on_auth_db_change(DbName) -> - ?_assert(begin + ?_test(begin PasswordHash = hash_password("pass1"), {ok, _} = update_user_doc(DbName, "joe", "pass1"), Creds = couch_auth_cache:get_user_creds("joe"), @@ -157,20 +151,18 @@ should_restore_cache_on_auth_db_change(DbName) -> Creds = couch_auth_cache:get_user_creds("joe"), ?assertEqual(PasswordHash, - couch_util:get_value(<<"password_sha">>, Creds)), - true + couch_util:get_value(<<"password_sha">>, Creds)) end). should_recover_cache_after_shutdown(DbName) -> - ?_assert(begin + ?_test(begin PasswordHash = hash_password("pass2"), {ok, Rev0} = update_user_doc(DbName, "joe", "pass1"), {ok, Rev1} = update_user_doc(DbName, "joe", "pass2", Rev0), full_commit(DbName), shutdown_db(DbName), {ok, Rev1} = get_doc_rev(DbName, "joe"), - ?assertEqual(PasswordHash, get_user_doc_password_sha(DbName, "joe")), - true + ?assertEqual(PasswordHash, get_user_doc_password_sha(DbName, "joe")) end). http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/couchdb/couchdb_os_daemons_tests.erl ---------------------------------------------------------------------- diff --git a/test/couchdb/couchdb_os_daemons_tests.erl b/test/couchdb/couchdb_os_daemons_tests.erl index 1f9f6be..da9294e 100644 --- a/test/couchdb/couchdb_os_daemons_tests.erl +++ b/test/couchdb/couchdb_os_daemons_tests.erl @@ -26,16 +26,24 @@ buf=[] }). +-define(DAEMON_CONFIGER, "os_daemon_configer.escript"). -define(DAEMON_LOOPER, "os_daemon_looper.escript"). -define(DELAY, 100). +-define(FIXTURES_BUILDDIR, + filename:join([?BUILDDIR, "test", "couchdb", "fixtures"])). -define(TIMEOUT, 1000). setup(DName) -> {ok, CfgPid} = couch_config:start_link(?CONFIG_CHAIN), {ok, OsDPid} = couch_os_daemons:start_link(), - couch_config:set("os_daemons", DName, - filename:join([?FIXTURESDIR, DName]), false), + Path = case DName of + ?DAEMON_CONFIGER -> + filename:join([?FIXTURES_BUILDDIR, DName]); + _ -> + filename:join([?FIXTURESDIR, DName]) + end, + couch_config:set("os_daemons", DName, Path, false), timer:sleep(?DELAY), % sleep a bit to let daemon set kill flag {CfgPid, OsDPid}. @@ -75,6 +83,17 @@ os_daemons_test_() -> } }. +configuration_reader_test_() -> + { + "OS Daemon requests CouchDB configuration", + { + foreachx, + fun setup/1, fun teardown/2, + [{?DAEMON_CONFIGER, + fun should_read_write_config_settings_by_daemon/2}] + } + }. + should_check_daemon(DName, _) -> ?_test(begin @@ -133,6 +152,15 @@ should_keep_alive_one_daemon_on_killing_other(DName, _) -> check_daemon(T, DName) end). +should_read_write_config_settings_by_daemon(DName, _) -> + ?_test(begin + % have to wait till daemon run all his tests + % see daemon's script for more info + timer:sleep(?TIMEOUT), + {ok, [D]} = couch_os_daemons:info([table]), + check_daemon(D, DName) + end). + check_daemon(D) -> check_daemon(D, D#daemon.name). http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/couchdb/fixtures/os_daemon_configer.escript.in ---------------------------------------------------------------------- diff --git a/test/couchdb/fixtures/os_daemon_configer.escript.in b/test/couchdb/fixtures/os_daemon_configer.escript.in new file mode 100755 index 0000000..d2ecfa8 --- /dev/null +++ b/test/couchdb/fixtures/os_daemon_configer.escript.in @@ -0,0 +1,84 @@ +#! /usr/bin/env escript +%% -*- erlang -*- +%%! -DTEST -pa @abs_top_builddir@/src/ejson +%% +%% 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. + +read() -> + case io:get_line('') of + eof -> + stop; + Data -> + ejson:decode(Data) + end. + +write(Mesg) -> + Data = iolist_to_binary(ejson:encode(Mesg)), + io:format(binary_to_list(Data) ++ "\n", []). + +get_cfg(Section) -> + write([<<"get">>, Section]), + read(). + +get_cfg(Section, Name) -> + write([<<"get">>, Section, Name]), + read(). + +log(Mesg) -> + write([<<"log">>, Mesg]). + +log(Mesg, Level) -> + write([<<"log">>, Mesg, {[{<<"level">>, Level}]}]). + +test_get_cfg1() -> + Path = list_to_binary(?FILE), + FileName = list_to_binary(filename:basename(?FILE)), + {[{FileName, Path}]} = get_cfg(<<"os_daemons">>). + +test_get_cfg2() -> + Path = list_to_binary(?FILE), + FileName = list_to_binary(filename:basename(?FILE)), + Path = get_cfg(<<"os_daemons">>, FileName), + <<"sequential">> = get_cfg(<<"uuids">>, <<"algorithm">>). + + +test_get_unknown_cfg() -> + {[]} = get_cfg(<<"aal;3p4">>), + null = get_cfg(<<"aal;3p4">>, <<"313234kjhsdfl">>). + +test_log() -> + log(<<"foobar!">>), + log(<<"some stuff!">>, <<"debug">>), + log(2), + log(true), + write([<<"log">>, <<"stuff">>, 2]), + write([<<"log">>, 3, null]), + write([<<"log">>, [1, 2], {[{<<"level">>, <<"debug">>}]}]), + write([<<"log">>, <<"true">>, {[]}]). + +do_tests() -> + test_get_cfg1(), + test_get_cfg2(), + test_get_unknown_cfg(), + test_log(), + loop(io:read("")). + +loop({ok, _}) -> + loop(io:read("")); +loop(eof) -> + init:stop(); +loop({error, _Reason}) -> + init:stop(). + +main([]) -> + do_tests(). http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/etap/171-os-daemons-config.es ---------------------------------------------------------------------- diff --git a/test/etap/171-os-daemons-config.es b/test/etap/171-os-daemons-config.es deleted file mode 100755 index b4a914e..0000000 --- a/test/etap/171-os-daemons-config.es +++ /dev/null @@ -1,85 +0,0 @@ -#! /usr/bin/env escript - -% 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. - -filename() -> - list_to_binary(test_util:source_file("test/etap/171-os-daemons-config.es")). - -read() -> - case io:get_line('') of - eof -> - stop; - Data -> - ejson:decode(Data) - end. - -write(Mesg) -> - Data = iolist_to_binary(ejson:encode(Mesg)), - io:format(binary_to_list(Data) ++ "\n", []). - -get_cfg(Section) -> - write([<<"get">>, Section]), - read(). - -get_cfg(Section, Name) -> - write([<<"get">>, Section, Name]), - read(). - -log(Mesg) -> - write([<<"log">>, Mesg]). - -log(Mesg, Level) -> - write([<<"log">>, Mesg, {[{<<"level">>, Level}]}]). - -test_get_cfg1() -> - FileName = filename(), - {[{<<"foo">>, FileName}]} = get_cfg(<<"os_daemons">>). - -test_get_cfg2() -> - FileName = filename(), - FileName = get_cfg(<<"os_daemons">>, <<"foo">>), - <<"sequential">> = get_cfg(<<"uuids">>, <<"algorithm">>). - -test_get_unknown_cfg() -> - {[]} = get_cfg(<<"aal;3p4">>), - null = get_cfg(<<"aal;3p4">>, <<"313234kjhsdfl">>). - -test_log() -> - log(<<"foobar!">>), - log(<<"some stuff!">>, <<"debug">>), - log(2), - log(true), - write([<<"log">>, <<"stuff">>, 2]), - write([<<"log">>, 3, null]), - write([<<"log">>, [1, 2], {[{<<"level">>, <<"debug">>}]}]), - write([<<"log">>, <<"true">>, {[]}]). - -do_tests() -> - test_get_cfg1(), - test_get_cfg2(), - test_get_unknown_cfg(), - test_log(), - loop(io:read("")). - -loop({ok, _}) -> - loop(io:read("")); -loop(eof) -> - init:stop(); -loop({error, _Reason}) -> - init:stop(). - -main([]) -> - test_util:init_code_path(), - couch_config:start_link(test_util:config_files()), - couch_drv:start_link(), - do_tests(). http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/etap/171-os-daemons-config.t ---------------------------------------------------------------------- diff --git a/test/etap/171-os-daemons-config.t b/test/etap/171-os-daemons-config.t deleted file mode 100755 index e9dc3f3..0000000 --- a/test/etap/171-os-daemons-config.t +++ /dev/null @@ -1,74 +0,0 @@ -#!/usr/bin/env escript -%% -*- erlang -*- - -% 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. - --record(daemon, { - port, - name, - cmd, - kill, - status=running, - cfg_patterns=[], - errors=[], - buf=[] -}). - -config_files() -> - lists:map(fun test_util:build_file/1, [ - "etc/couchdb/default_dev.ini" - ]). - -daemon_cmd() -> - test_util:source_file("test/etap/171-os-daemons-config.es"). - -main(_) -> - test_util:init_code_path(), - - etap:plan(6), - 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(config_files()), - couch_config:set("log", "level", "debug", false), - couch_log:start_link(), - couch_os_daemons:start_link(), - - % "foo" is a required name by this test. - couch_config:set("os_daemons", "foo", daemon_cmd(), false), - timer:sleep(1000), - - {ok, [D1]} = couch_os_daemons:info([table]), - check_daemon(D1, "foo"), - - ok. - -check_daemon(D, Name) -> - BaseName = "171-os-daemons-config.es", - BaseLen = length(BaseName), - CmdLen = length(D#daemon.cmd), - CmdName = lists:sublist(D#daemon.cmd, CmdLen-BaseLen+1, BaseLen), - - etap:is(is_port(D#daemon.port), true, "Daemon port is a port."), - etap:is(D#daemon.name, Name, "Daemon name was set correctly."), - etap:is(CmdName, BaseName, "Command name was set correctly."), - etap:isnt(D#daemon.kill, undefined, "Kill command was set."), - etap:is(D#daemon.errors, [], "No errors occurred while booting."), - etap:is(D#daemon.buf, [], "No extra data left in the buffer."). http://git-wip-us.apache.org/repos/asf/couchdb/blob/21de05a8/test/etap/Makefile.am ---------------------------------------------------------------------- diff --git a/test/etap/Makefile.am b/test/etap/Makefile.am index 13b5b4a..1ec6a48 100644 --- a/test/etap/Makefile.am +++ b/test/etap/Makefile.am @@ -36,8 +36,6 @@ fixture_files = \ fixtures/test.couch tap_files = \ - 171-os-daemons-config.es \ - 171-os-daemons-config.t \ 172-os-daemon-errors.1.sh \ 172-os-daemon-errors.2.sh \ 172-os-daemon-errors.3.sh \
