From c5bffcc261019a69aef2c6a6dab4c5b03f9430ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Sat, 10 Oct 2009 19:17:03 +0200 Subject: [PATCH] ke: Add unit tests --- CMakeLists.txt | 2 +- src/CMakeLists.txt | 17 +++++++++++++ src/unittests/test-utils.c | 51 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 src/unittests/test-utils.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 1b58fe4..587c0de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,6 +7,6 @@ SET(PACKAGE_VERSION 2.0.0) SET(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake) #INCLUDE(CTest) -#ENABLE_TESTING() +ENABLE_TESTING() ADD_SUBDIRECTORY(src build) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 7424fc2..ba7c649 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -24,6 +24,7 @@ OPTION(BUILD_STATIC "build a static lighttpd with all modules added") OPTION(BUILD_EXTRA_WARNINGS "extra warnings") OPTION(WITH_BZIP "with bzip2-support for mod_deflate") OPTION(WITH_ZLIB "with deflate-support for mod_deflate") +OPTION(BUILD_UNIT_TESTS "build unit tests for testing") IF(BUILD_STATIC) SET(LIGHTTPD_STATIC 1) @@ -365,3 +366,19 @@ INSTALL(TARGETS ${L_INSTALL_TARGETS} LIBRARY DESTINATION lib ARCHIVE DESTINATION lib/static) ENDIF(NOT WIN32) + +IF(BUILD_UNIT_TESTS) + MACRO(ADD_TEST_BINARY TESTNAME EXENAME SRCFILES) + ADD_EXECUTABLE(${EXENAME} ${SRCFILES}) + + ADD_TARGET_PROPERTIES(${EXENAME} LINK_FLAGS ${COMMON_LDFLAGS}) + ADD_TARGET_PROPERTIES(${EXENAME} COMPILE_FLAGS ${COMMON_CFLAGS}) + + TARGET_LINK_LIBRARIES(${EXENAME} lighttpd-common lighttpd-shared) + + ADD_TEST(${TESTNAME} ${EXENAME}) + ENDMACRO(ADD_TEST_BINARY) + + ADD_TEST_BINARY(Utils-UnitTest test-utils unittests/test-utils.c) + +ENDIF(BUILD_UNIT_TESTS) \ No newline at end of file diff --git a/src/unittests/test-utils.c b/src/unittests/test-utils.c new file mode 100644 index 0000000..69a6bd8 --- /dev/null +++ b/src/unittests/test-utils.c @@ -0,0 +1,51 @@ + +#include + +#define perror(msg) g_error("(%s:%i) %s failed: %s", __FILE__, __LINE__, msg, g_strerror(errno)) + +static void test_send_fd(void) { + int pipefds[2], sockfd[2], rfd = -1; + char buf[6]; + + g_printerr("start\n"); + + if (-1 == pipe(pipefds)) { + perror("pipe"); + } + + if (-1 == socketpair(AF_UNIX, SOCK_STREAM, 0, sockfd)) { + perror("socketpair"); + } + + if (-1 == li_send_fd(sockfd[0], pipefds[0])) { + perror("li_send_fd"); + } + + if (-1 == li_receive_fd(sockfd[1], &rfd)) { + perror("li_receive_fd"); + } + + write(pipefds[1], CONST_STR_LEN("test\0")); + + if (-1 == read(rfd, buf, 5)) { + perror("read"); + } + + buf[5] = '\0'; + g_test_message("received: %s", buf); + + g_assert_cmpstr(buf, ==, "test"); + + close(pipefds[0]); close(pipefds[1]); + close(sockfd[0]); close(sockfd[1]); + close(rfd); +} + + +int main(int argc, char **argv) { + g_test_init(&argc, &argv, NULL); + + g_test_add_func("/utils/send_fd", test_send_fd); + + return g_test_run(); +}