From 5b12583a8934dfcce3e56bc15a40842ce7c64464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Tue, 1 Dec 2015 23:01:24 +0100 Subject: [PATCH] Add iomux signal test --- test/iomux_signal_test.c | 41 --------------- test/test_iomux_signal.c | 107 +++++++++++++++++++++++++++++++++++++++ test/test_runner.c | 5 +- 3 files changed, 111 insertions(+), 42 deletions(-) delete mode 100644 test/iomux_signal_test.c create mode 100644 test/test_iomux_signal.c diff --git a/test/iomux_signal_test.c b/test/iomux_signal_test.c deleted file mode 100644 index fc7984f..0000000 --- a/test/iomux_signal_test.c +++ /dev/null @@ -1,41 +0,0 @@ -#include "ucore/iomux_signal.h" -#include -#include -#include -#include -#include - -void sig_handler(struct IOMux *mux, int signo, void *cookie) -{ - char sig_str[64]; - snprintf(sig_str, sizeof sig_str, "Got signal %d\n", signo); - - write(STDOUT_FILENO, sig_str, strlen(sig_str)); -} - -int main(int argc, char *argv[]) -{ - - struct IOMux *mux = iomux_create(IOMUX_TYPE_EPOLL); - int rc; - - rc = iomux_register_unixsignal(mux, SIGKILL, sig_handler, NULL); - assert(rc != 0); - rc = iomux_register_unixsignal(mux, SIGUSR1, sig_handler, NULL); - assert(rc == 0); - rc = iomux_unregister_unixsignal(mux, SIGINT); - assert(rc == 0); - rc = iomux_unregister_unixsignal(mux, SIGUSR1); - assert(rc == 0); - rc = iomux_register_unixsignal(mux, SIGINT, sig_handler, NULL); - assert(rc == 0); - rc = iomux_register_unixsignal(mux, SIGUSR1, sig_handler, NULL); - assert(rc == 0); - rc = iomux_register_unixsignal(mux, SIGUSR1, sig_handler, NULL); - assert(rc != 0); - - iomux_run(mux); - iomux_delete(mux); - - return 0; -} diff --git a/test/test_iomux_signal.c b/test/test_iomux_signal.c new file mode 100644 index 0000000..a3e6406 --- /dev/null +++ b/test/test_iomux_signal.c @@ -0,0 +1,107 @@ +#include +#include +#include +#include +#include "ucore/iomux_signal.h" + + +static enum IOMUX_TYPE g_iomux_type = IOMUX_TYPE_DEFAULT; +static int g_usr1_seen; +static int g_usr2_seen; +static void set_iomux_type_select(void) +{ + g_iomux_type = IOMUX_TYPE_SELECT; + g_usr2_seen = g_usr1_seen = 0; +} + +static void set_iomux_type_epoll(void) +{ + g_iomux_type = IOMUX_TYPE_EPOLL; + g_usr2_seen = g_usr1_seen = 0; +} + + +static void usr1_handler(struct IOMux *mux, int signo, void *cookie) +{ + ck_assert_int_eq(signo, SIGUSR1); + g_usr1_seen++; + raise(SIGUSR2); +} + +static void usr2_handler(struct IOMux *mux, int signo, void *cookie) +{ + int *val = cookie; + int rc; + + ck_assert_int_eq(signo, SIGUSR2); + ck_assert_int_eq(*val, 0x1234); + g_usr2_seen++; + + rc = iomux_unregister_unixsignal(mux, SIGUSR2); + ck_assert_int_eq(rc, 0); + + rc = iomux_unregister_unixsignal(mux, SIGUSR1); + ck_assert_int_eq(rc, 0); +} + +START_TEST (test_iomux_signal_simple) + + + struct IOMux *mux = iomux_create(g_iomux_type); + int rc; + int cookie = 0x1234; + + //can't handle SIGKILL + rc = iomux_register_unixsignal(mux, SIGKILL, usr1_handler, NULL); + ck_assert_int_ne(rc, 0); + + rc = iomux_register_unixsignal(mux, SIGUSR1, usr1_handler, NULL); + ck_assert_int_eq(rc, 0); + + //not priorly registred + rc = iomux_unregister_unixsignal(mux, SIGINT); + ck_assert_int_ne(rc, 0); + + rc = iomux_unregister_unixsignal(mux, SIGUSR1); + ck_assert_int_eq(rc, 0); + + rc = iomux_register_unixsignal(mux, SIGUSR1, usr1_handler, NULL); + ck_assert_int_eq(rc, 0); + + rc = iomux_register_unixsignal(mux, SIGUSR2, usr2_handler, &cookie); + ck_assert_int_eq(rc, 0); + + //already registred + rc = iomux_register_unixsignal(mux, SIGUSR1, usr1_handler, NULL); + ck_assert_int_ne(rc, 0); + + raise(SIGUSR1); + iomux_run(mux); + + + iomux_delete(mux); + + ck_assert_int_eq(g_usr1_seen, 1); + ck_assert_int_eq(g_usr2_seen, 1); +END_TEST + + +Suite *iomux_signal_suite(void) +{ + Suite *s = suite_create("iomux_signal"); + TCase *select_tc = tcase_create("iomux signal select tests"); + TCase *epoll_tc = tcase_create("iomux signal epoll tests"); + + tcase_add_test(select_tc, test_iomux_signal_simple); + tcase_add_test(epoll_tc, test_iomux_signal_simple); + + tcase_add_checked_fixture(select_tc, set_iomux_type_select, NULL); + + tcase_add_checked_fixture(epoll_tc, set_iomux_type_epoll, NULL); + + suite_add_tcase(s, select_tc); + suite_add_tcase(s, epoll_tc); + + return s; +} + diff --git a/test/test_runner.c b/test/test_runner.c index f95502c..4554656 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -33,6 +33,7 @@ extern Suite *val_str_suite(void); extern Suite *ticket_lock_suite(void); extern Suite *restart_counter_suite(void); extern Suite *iomux_suite(void); +extern Suite *iomux_signal_suite(void); static suite_func suites[] = { bitvec_suite, @@ -60,7 +61,9 @@ static suite_func suites[] = { val_str_suite, ticket_lock_suite, restart_counter_suite, - iomux_suite + iomux_suite, + iomux_signal_suite + }; void