From 1cd1b1ddff51e94a768ffc70e3e76b8277c1a600 Mon Sep 17 00:00:00 2001 From: Falk Werner Date: Wed, 18 Mar 2020 18:00:53 +0100 Subject: [PATCH] added basic tests for daemon --- CMakeLists.txt | 2 ++ src/webfused/daemon.c | 2 ++ test/test_daemon.cc | 68 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 72 insertions(+) create mode 100644 test/test_daemon.cc diff --git a/CMakeLists.txt b/CMakeLists.txt index c2bcbd4..3b84d16 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -129,6 +129,7 @@ add_executable(alltests test/test_log_manager.cc test/test_stderr_logger.cc test/test_syslog_logger.cc + test/test_daemon.cc ) target_include_directories(alltests PRIVATE @@ -180,6 +181,7 @@ add_custom_target(coverage COMMAND lcov -a coverage/lcov_base.info -a coverage/lcov.info --output-file coverage/lcov.info --rc lcov_branch_coverage=1 COMMAND lcov --remove coverage/lcov.info '/usr/*' --output-file coverage/lcov.info --rc lcov_branch_coverage=1 COMMAND lcov --remove coverage/lcov.info '*/test/*' --output-file coverage/lcov.info --rc lcov_branch_coverage=1 + COMMAND lcov --remove coverage/lcov.info '*/main.c' --output-file coverage/lcov.info --rc lcov_branch_coverage=1 ) add_dependencies(coverage alltests) diff --git a/src/webfused/daemon.c b/src/webfused/daemon.c index b7786cd..8911777 100644 --- a/src/webfused/daemon.c +++ b/src/webfused/daemon.c @@ -56,6 +56,7 @@ static int parse_arguments(int argc, char * argv[], struct args * args) bool result = EXIT_SUCCESS; bool finished = false; + optind = 0; while ((!finished) && (EXIT_SUCCESS == result)) { int option_index = 0; @@ -144,6 +145,7 @@ int wfd_daemon_run(int argc, char * argv[]) wfd_logger_close(); free(args.config_file); + shutdown_requested = false; return result; } diff --git a/test/test_daemon.cc b/test/test_daemon.cc new file mode 100644 index 0000000..a0ed0c5 --- /dev/null +++ b/test/test_daemon.cc @@ -0,0 +1,68 @@ +#include "webfused/daemon.h" + +#include +#include +#include +#include + +TEST(daemon, print_usage) +{ + char argv0[] = "daemon"; + char argv1[] = "--help"; + char * argv[] = { argv0, argv1, NULL}; + + int exit_code = wfd_daemon_run(2, argv); + ASSERT_EQ(EXIT_SUCCESS, exit_code); +} + +TEST(daemon, print_usage_short) +{ + char argv0[] = "daemon"; + char argv1[] = "-h"; + char * argv[] = { argv0, argv1, NULL}; + + int exit_code = wfd_daemon_run(2, argv); + ASSERT_EQ(EXIT_SUCCESS, exit_code); +} + +TEST(daemon, fail_invalid_argument) +{ + char argv0[] = "daemon"; + char argv1[] = "-x"; + char * argv[] = { argv0, argv1, NULL}; + + int exit_code = wfd_daemon_run(2, argv); + ASSERT_EQ(EXIT_FAILURE, exit_code); +} + +TEST(daemon, fail_invalid_config_file) +{ + char argv0[] = "daemon"; + char argv1[] = "-f"; + char argv2[] = "invalid.conf"; + char * argv[] = { argv0, argv1, argv2, NULL}; + + int exit_code = wfd_daemon_run(3, argv); + ASSERT_EQ(EXIT_FAILURE, exit_code); +} + +void defered_raise() +{ + std::this_thread::sleep_for(std::chrono::milliseconds(50)); + raise(SIGINT); +} + +TEST(daemon, run) +{ + char argv0[] = "daemon"; + char argv1[] = "-f"; + char argv2[] = "webfused.conf"; + char * argv[] = { argv0, argv1, argv2, NULL}; + + std::thread thread(defered_raise); + + int exit_code = wfd_daemon_run(3, argv); + ASSERT_EQ(EXIT_SUCCESS, exit_code); + + thread.join(); +}