From 162e1a61ffdcff8023ed6f2cb86b9054c79c991a Mon Sep 17 00:00:00 2001 From: Marek Vavrusa <marek@vavrusa.com> Date: Thu, 14 Oct 2010 20:04:28 +0200 Subject: [PATCH] Bugfixes for libtap and tests. --- Makefile | 2 +- src/tests/libtap/tap.c | 8 ++++++ src/tests/main.c | 2 +- src/tests/server_tests.c | 58 ++++++++++++++++++++++++++++------------ 4 files changed, 51 insertions(+), 19 deletions(-) diff --git a/Makefile b/Makefile index e64beae96..2693c7258 100644 --- a/Makefile +++ b/Makefile @@ -23,7 +23,7 @@ TESTS_FILES = $(TESTS_DIR)/main.c $(TESTS_DIR)/libtap/tap.c OBJS = $(addprefix $(OBJ_DIR), $(addsuffix .o, $(basename $(notdir $(SRC_FILES))))) CC = gcc -CFLAGS += -Wall -std=gnu99 -D _XOPEN_SOURCE=600 -D_GNU_SOURCE +CFLAGS += -Wall -std=gnu99 -D _XOPEN_SOURCE=600 -D_GNU_SOURCE -g LDFLAGS += -lpthread -lurcu -lldns all: cutedns unittests diff --git a/src/tests/libtap/tap.c b/src/tests/libtap/tap.c index 0119ca8e0..05e08efc8 100644 --- a/src/tests/libtap/tap.c +++ b/src/tests/libtap/tap.c @@ -168,6 +168,10 @@ diag (const char *fmt, ...) { write(fileno(stderr), begin, end - begin + 1); begin = end + 1; + if(*begin == '\0') { + break; + } + end = strchr(begin + 1, '\n'); } @@ -206,6 +210,10 @@ note (const char *fmt, ...) { write(fileno(stdout), begin, end - begin + 1); begin = end + 1; + if(*begin == '\0') { + break; + } + end = strchr(begin + 1, '\n'); } diff --git a/src/tests/main.c b/src/tests/main.c index 0901d455c..24ed2ddd8 100644 --- a/src/tests/main.c +++ b/src/tests/main.c @@ -26,7 +26,7 @@ int main(int argc, char * argv[]) // Run tests id = 0; while(tests[id] != NULL) { - note("Testing unit: %s ...\n", tests[id]->name); + diag("Testing unit: %s", tests[id]->name); tests[id]->run(argc, argv); ++id; } diff --git a/src/tests/server_tests.c b/src/tests/server_tests.c index 9d49354d5..d7e3c11da 100644 --- a/src/tests/server_tests.c +++ b/src/tests/server_tests.c @@ -17,7 +17,7 @@ unit_api server_tests_api = { * Unit implementation. */ -static const int SERVER_TEST_COUNT = 3; +static const int SERVER_TEST_COUNT = 4; /*! Test: create server. */ cute_server* test_server_create() @@ -31,6 +31,12 @@ int test_server_start(cute_server* s, char **filenames, uint zones) return cute_start(s, filenames, zones) == 0; } +/*! Test: finish server. */ +int test_server_finish(cute_server* s) +{ + return cute_wait(s) == 0; +} + /*! Test: stop server. */ int test_server_destroy(cute_server* s) { @@ -41,34 +47,52 @@ int test_server_destroy(cute_server* s) /*! API: return number of tests. */ int server_tests_count(int argc, char * argv[]) { - return SERVER_TEST_COUNT * (argc - 1) + 1; + return SERVER_TEST_COUNT + 1; +} + +// Signal handler +static void interrupt_handle(int s) +{ } /*! API: run tests. */ int server_tests_run(int argc, char * argv[]) { - int ret = 0; cute_server* server = 0; + int ret = 0; - /* For each zone, try to run and teardown server. */ - for(int i = 1; i < argc; ++i) { + // Register service and signal handler + struct sigaction sa; + sa.sa_handler = interrupt_handle; + sigemptyset(&sa.sa_mask); + sa.sa_flags = 0; + sigaction(SIGCLOSE, &sa, NULL); // Interrupt - //! Test server for correct initialization - server = test_server_create(); - ok(server != 0, "server: initialized"); - //! Test server startup - ret = 0; - lives_ok({ - ret = test_server_start(server, argv + i, 1); - }, "server: not crashing on runtime"); + //! Test server for correct initialization + server = test_server_create(); + ok(server != 0, "server: initialized"); - //! Test server exit code - ok(ret, "server: started ok"); + //! Test server startup + ret = 0; + lives_ok({ + ret = test_server_start(server, argv + 1, argc - 1); + }, "server: not crashing on runtime"); - //! Test server for correct deinitialization - ok(test_server_destroy(server), "server: deinit"); + //! Test server exit code + ok(ret, "server: started ok"); + if(ret) { + cute_stop(server); } + //! Test server waiting for finish + //skip(!ret, 1); + ok(test_server_finish(server), "server: waiting for finish"); + //endskip; + + //! Test server for correct deinitialization + ok(test_server_destroy(server), "server: deinit"); + + return 0; } -- GitLab