Port 172-os-daemons-errors.t etap test suite to eunit Merged into couchdb_os_daemons_tests suite. Removed errors redirection to /dev/null to explicitly signal that permissions are set correctly.
Project: http://git-wip-us.apache.org/repos/asf/couchdb-couch/repo Commit: http://git-wip-us.apache.org/repos/asf/couchdb-couch/commit/45044d86 Tree: http://git-wip-us.apache.org/repos/asf/couchdb-couch/tree/45044d86 Diff: http://git-wip-us.apache.org/repos/asf/couchdb-couch/diff/45044d86 Branch: refs/heads/1963-eunit-bigcouch Commit: 45044d8678eacc7cb645d21e75a87f12bf9fec9b Parents: 8ec1126 Author: Alexander Shorin <[email protected]> Authored: Tue Jun 3 15:54:33 2014 +0400 Committer: Russell Branca <[email protected]> Committed: Mon Aug 11 13:13:59 2014 -0700 ---------------------------------------------------------------------- test/couchdb/couchdb_os_daemons_tests.erl | 64 ++++++++++++++++++++- test/couchdb/fixtures/os_daemon_bad_perm.sh | 17 ++++++ test/couchdb/fixtures/os_daemon_can_reboot.sh | 15 +++++ test/couchdb/fixtures/os_daemon_die_on_boot.sh | 15 +++++ test/couchdb/fixtures/os_daemon_die_quickly.sh | 15 +++++ 5 files changed, 125 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/45044d86/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 dd07e82..aa949c9 100644 --- a/test/couchdb/couchdb_os_daemons_tests.erl +++ b/test/couchdb/couchdb_os_daemons_tests.erl @@ -28,6 +28,10 @@ -define(DAEMON_CONFIGER, "os_daemon_configer.escript"). -define(DAEMON_LOOPER, "os_daemon_looper.escript"). +-define(DAEMON_BAD_PERM, "os_daemon_bad_perm.sh"). +-define(DAEMON_CAN_REBOOT, "os_daemon_can_reboot.sh"). +-define(DAEMON_DIE_ON_BOOT, "os_daemon_die_on_boot.sh"). +-define(DAEMON_DIE_QUICKLY, "os_daemon_die_quickly.sh"). -define(DELAY, 100). -define(TIMEOUT, 1000). @@ -84,6 +88,20 @@ configuration_reader_test_() -> fun setup/1, fun teardown/2, [{?DAEMON_CONFIGER, fun should_read_write_config_settings_by_daemon/2}] + + } + }. + +error_test_() -> + { + "OS Daemon process error tests", + { + foreachx, + fun setup/1, fun teardown/2, + [{?DAEMON_BAD_PERM, fun should_fail_due_to_lack_of_permissions/2}, + {?DAEMON_DIE_ON_BOOT, fun should_die_on_boot/2}, + {?DAEMON_DIE_QUICKLY, fun should_die_quickly/2}, + {?DAEMON_CAN_REBOOT, fun should_not_being_halted/2}] } }. @@ -154,13 +172,57 @@ should_read_write_config_settings_by_daemon(DName, _) -> check_daemon(D, DName) end). +should_fail_due_to_lack_of_permissions(DName, _) -> + ?_test(should_halts(DName, 1000)). + +should_die_on_boot(DName, _) -> + ?_test(should_halts(DName, 1000)). + +should_die_quickly(DName, _) -> + ?_test(should_halts(DName, 4000)). + +should_not_being_halted(DName, _) -> + ?_test(begin + timer:sleep(1000), + {ok, [D1]} = couch_os_daemons:info([table]), + check_daemon(D1, DName, 0), + + % Should reboot every two seconds. We're at 1s, so wait + % until 3s to be in the middle of the next invocation's + % life span. + + timer:sleep(2000), + {ok, [D2]} = couch_os_daemons:info([table]), + check_daemon(D2, DName, 1), + + % If the kill command changed, that means we rebooted the process. + ?assertNotEqual(D1#daemon.kill, D2#daemon.kill) + end). + +should_halts(DName, Time) -> + timer:sleep(Time), + {ok, [D]} = couch_os_daemons:info([table]), + check_dead(D, DName), + couch_config:delete("os_daemons", DName, false). check_daemon(D) -> check_daemon(D, D#daemon.name). check_daemon(D, Name) -> + check_daemon(D, Name, 0). + +check_daemon(D, Name, Errs) -> ?assert(is_port(D#daemon.port)), ?assertEqual(Name, D#daemon.name), ?assertNotEqual(undefined, D#daemon.kill), - ?assertEqual([], D#daemon.errors), + ?assertEqual(running, D#daemon.status), + ?assertEqual(Errs, length(D#daemon.errors)), ?assertEqual([], D#daemon.buf). + +check_dead(D, Name) -> + ?assert(is_port(D#daemon.port)), + ?assertEqual(Name, D#daemon.name), + ?assertNotEqual(undefined, D#daemon.kill), + ?assertEqual(halted, D#daemon.status), + ?assertEqual(nil, D#daemon.errors), + ?assertEqual(nil, D#daemon.buf). http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/45044d86/test/couchdb/fixtures/os_daemon_bad_perm.sh ---------------------------------------------------------------------- diff --git a/test/couchdb/fixtures/os_daemon_bad_perm.sh b/test/couchdb/fixtures/os_daemon_bad_perm.sh new file mode 100644 index 0000000..345c8b4 --- /dev/null +++ b/test/couchdb/fixtures/os_daemon_bad_perm.sh @@ -0,0 +1,17 @@ +#!/bin/sh -e +# +# 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. +# +# Please do not make this file executable as that's the error being tested. + +sleep 5 http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/45044d86/test/couchdb/fixtures/os_daemon_can_reboot.sh ---------------------------------------------------------------------- diff --git a/test/couchdb/fixtures/os_daemon_can_reboot.sh b/test/couchdb/fixtures/os_daemon_can_reboot.sh new file mode 100755 index 0000000..5bc10e8 --- /dev/null +++ b/test/couchdb/fixtures/os_daemon_can_reboot.sh @@ -0,0 +1,15 @@ +#!/bin/sh -e +# +# 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. + +sleep 2 http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/45044d86/test/couchdb/fixtures/os_daemon_die_on_boot.sh ---------------------------------------------------------------------- diff --git a/test/couchdb/fixtures/os_daemon_die_on_boot.sh b/test/couchdb/fixtures/os_daemon_die_on_boot.sh new file mode 100755 index 0000000..256ee79 --- /dev/null +++ b/test/couchdb/fixtures/os_daemon_die_on_boot.sh @@ -0,0 +1,15 @@ +#!/bin/sh -e +# +# 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. + +exit 1 http://git-wip-us.apache.org/repos/asf/couchdb-couch/blob/45044d86/test/couchdb/fixtures/os_daemon_die_quickly.sh ---------------------------------------------------------------------- diff --git a/test/couchdb/fixtures/os_daemon_die_quickly.sh b/test/couchdb/fixtures/os_daemon_die_quickly.sh new file mode 100755 index 0000000..f5a1368 --- /dev/null +++ b/test/couchdb/fixtures/os_daemon_die_quickly.sh @@ -0,0 +1,15 @@ +#!/bin/sh -e +# +# 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. + +sleep 1
