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