diff --git a/libtap/Makefile.am b/libtap/Makefile.am index df881372..8b4a243d 100644 --- a/libtap/Makefile.am +++ b/libtap/Makefile.am @@ -1,52 +1,52 @@ MAINTAINERCLEANFILES = Makefile.in sources = libtap.c libversion = 0:0:0 AM_CFLAGS = -fPIC # override global LIBS that pulls in lots of craft we don't need here LIBS = -lpthread include_HEADERS = libtap.h noinst_HEADERS = libtap-private.h pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = libtap.pc lib_LTLIBRARIES = libtap.la libtap_la_SOURCES = $(sources) libtap_la_LDFLAGS = -Wl,-version-script,libtap_exported_sym \ --export-dynamic \ -version-info $(libversion) TESTS = $(check_PROGRAMS) noinst_PROGRAMS = $(check_PROGRAMS) check_PROGRAMS = tap_test -tap_test_SOURCES = $(sources) ../utils.c +tap_test_SOURCES = $(sources) tap_test_CPPFLAGS = -DTEST \ -DABSBUILDDIR=\"$(abs_builddir)\" install-exec-local: $(INSTALL) -d $(DESTDIR)/$(DEFAULT_CONFIG_DIR) $(INSTALL) -d $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/down.d $(INSTALL) -d $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/post-down.d $(INSTALL) -d $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/pre-up.d $(INSTALL) -d $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/up.d uninstall-local: rmdir $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/down.d || :; rmdir $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/post-down.d || :; rmdir $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/pre-up.d || :; rmdir $(DESTDIR)/$(DEFAULT_CONFIG_DIR)/up.d || :; rmdir $(DESTDIR)/$(DEFAULT_CONFIG_DIR) || :; diff --git a/tests/Makefile.am b/tests/Makefile.am index 322b4d83..3edd6afc 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -1,58 +1,46 @@ MAINTAINERCLEANFILES = Makefile.in VALGRIND = valgrind -q --error-exitcode=127 --track-fds=yes --leak-check=full HELGRIND = valgrind -v --tool=helgrind check-valgrind: $(check_PROGRAMS) $(MAKE) TESTS_ENVIRONMENT="$(VALGRIND)" check check-helgrind: $(check_PROGRAMS) $(MAKE) TESTS_ENVIRONMENT="$(HELGRIND)" check noinst_PROGRAMS = \ ping_test \ khandle_test \ lookup_bench \ $(check_PROGRAMS) check_PROGRAMS = \ netutils_test \ listener_test \ timediff_test TESTS = $(check_PROGRAMS) AM_CPPFLAGS = -DTEST \ -I$(srcdir)/../ \ -I$(srcdir)/../libtap/ \ -I$(srcdir)/../libknet/ \ -I$(srcdir)/../libvty/ AM_LDFLAGS = \ $(top_builddir)/libtap/libtap.la \ $(top_builddir)/libknet/libknet.a \ $(top_builddir)/libvty/libvty.a -ping_test_SOURCES = \ - ping_test.c \ - ../utils.c +ping_test_SOURCES = ping_test.c -khandle_test_SOURCES = \ - khandle_test.c \ - ../utils.c +khandle_test_SOURCES = khandle_test.c -lookup_bench_SOURCES = \ - lookup_bench.c \ - ../utils.c +lookup_bench_SOURCES = lookup_bench.c -listener_test_SOURCES = \ - listener_test.c \ - ../utils.c +listener_test_SOURCES = listener_test.c -netutils_test_SOURCES = \ - netutils_test.c \ - ../utils.c +netutils_test_SOURCES = netutils_test.c -timediff_test_SOURCES = \ - timediff_test.c \ - ../utils.c +timediff_test_SOURCES = timediff_test.c diff --git a/tests/khandle_test.c b/tests/khandle_test.c index 9323803e..2e2d5d9c 100644 --- a/tests/khandle_test.c +++ b/tests/khandle_test.c @@ -1,56 +1,56 @@ #include "config.h" +#include #include #include #include #include #include "libknet.h" -#include "utils.h" #define HOST_LIST_SIZE 8192 #define HOST_LIST_LOOP 64 static int host_loop(knet_handle_t knet_h, struct knet_host *host, struct knet_host_search *search) { host->active = 1; search->param1++; return KNET_HOST_FOREACH_NEXT; } int main(int argc, char *argv[]) { int sock, i, j; knet_handle_t knet_h; struct knet_host_search search; sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { - log_error("Unable to create new socket"); + printf("Unable to create new socket\n"); exit(EXIT_FAILURE); } knet_h = knet_handle_new(sock, 1); for (i = 0; i < HOST_LIST_SIZE; i++) knet_host_add(knet_h, i); search.param1 = 0; for (i = 0; i < HOST_LIST_SIZE; i++) { for (j = 0; j < HOST_LIST_LOOP; j++) { knet_host_foreach(knet_h, host_loop, &search); } knet_host_remove(knet_h, i); } printf("Loop count: %u times\n", (unsigned int) search.param1); if (knet_handle_free(knet_h) != 0) { - log_error("Unable to free knet_handle"); + printf("Unable to free knet_handle\n"); exit(EXIT_FAILURE); } return 0; } diff --git a/tests/listener_test.c b/tests/listener_test.c index 394de773..b4edf350 100644 --- a/tests/listener_test.c +++ b/tests/listener_test.c @@ -1,132 +1,134 @@ #include "config.h" +#include +#include +#include #include #include #include "libknet-private.h" -#include "utils.h" #define KNET_TEST_PORT 50000 static knet_handle_t knet_h; struct knet_listener *listener; static void test_add_listener(void) { struct sockaddr_in *address; listener = malloc(sizeof(struct knet_listener)); if (listener == NULL) { - log_error("Unable to create listener"); + printf("Unable to create listener\n"); exit(EXIT_FAILURE); } memset(listener, 0, sizeof(struct knet_listener)); address = (struct sockaddr_in *) &listener->address; address->sin_family = AF_INET; address->sin_port = htons(KNET_TEST_PORT); address->sin_addr.s_addr = INADDR_ANY; if (knet_listener_add(knet_h, listener) != 0) { - log_error("Unable to add listener"); + printf("Unable to add listener\n"); exit(EXIT_FAILURE); } } static void test_add_host(void) { struct knet_host *host; if (knet_host_add(knet_h, 1) != 0) { - log_error("Unable to add host to knet_handle"); + printf("Unable to add host to knet_handle\n"); exit(EXIT_FAILURE); } knet_host_get(knet_h, 1, &host); host->link[0].sock = listener->sock; host->link[0].ready = 1; knet_host_release(knet_h, &host); } int main(int argc, char *argv[]) { int err, sock; struct epoll_event ev; sock = socket(AF_UNIX, SOCK_STREAM, 0); if (sock < 0) { - log_error("Unable to create new socket"); + printf("Unable to create new socket\n"); exit(EXIT_FAILURE); } if ((knet_h = knet_handle_new(sock, 1)) == NULL) { - log_error("Unable to create new knet_handle_t"); + printf("Unable to create new knet_handle_t\n"); exit(EXIT_FAILURE); } - log_info("Adding listener to handle"); + printf("Adding listener to handle\n"); test_add_listener(); memset(&ev, 0, sizeof(struct epoll_event)); /* don't try this at home :) */ err = epoll_ctl(knet_h->epollfd, EPOLL_CTL_ADD, listener->sock, &ev); if (err != -1) { - log_error("Listener file descriptor not found in epollfd"); + printf("Listener file descriptor not found in epollfd\n"); exit(EXIT_FAILURE); } - log_error("Listener file descriptor was added to epollfd"); + printf("Listener file descriptor was added to epollfd\n"); - log_info("Adding host to handle"); + printf("Adding host to handle\n"); test_add_host(); err = knet_listener_remove(knet_h, listener); if (err != -EBUSY) { - log_error("Listener socket should be in use"); + printf("Listener socket should be in use\n"); exit(EXIT_FAILURE); } - log_error("Unable to remove listener with active links"); + printf("Unable to remove listener with active links\n"); - log_info("Removing host from handle"); + printf("Removing host from handle\n"); err = knet_host_remove(knet_h, 1); if (err != 0) { - log_error("Unable to remove host from knet_handle"); + printf("Unable to remove host from knet_handle\n"); exit(EXIT_FAILURE); } - log_info("Removing listener"); + printf("Removing listener\n"); err = knet_listener_remove(knet_h, listener); if (err != 0) { - log_error("Unable to remove listener from knet_handle"); + printf("Unable to remove listener from knet_handle\n"); exit(EXIT_FAILURE); } /* don't try this at home :) */ err = epoll_ctl(knet_h->epollfd, EPOLL_CTL_DEL, listener->sock, &ev); if (err != -1) { - log_error("Listener file was present in epollfd"); + printf("Listener file was present in epollfd\n"); exit(EXIT_FAILURE); } - log_error("Listener file descriptor was removed from epollfd"); + printf("Listener file descriptor was removed from epollfd\n"); if (knet_handle_free(knet_h) != 0) { - log_error("Unable to free knet_handle"); + printf("Unable to free knet_handle\n"); exit(EXIT_FAILURE); } return 0; } diff --git a/tests/lookup_bench.c b/tests/lookup_bench.c index fc027163..01a6edbf 100644 --- a/tests/lookup_bench.c +++ b/tests/lookup_bench.c @@ -1,55 +1,56 @@ #include "config.h" +#include #include #include +#include #include "libknet.h" #include "libknet-private.h" #include "netutils.h" -#include "utils.h" #define KNET_PORT 50000 #define KNET_BENCH_LOOPNUM 100000000 int main(int argc, char *argv[]) { struct knet_link *head; struct sockaddr_in address; struct timespec bench_start, bench_end; unsigned long long i, bench_diff; head = malloc(sizeof(struct knet_link)); if (head == NULL) { - log_error("Unable to create knet_link"); + printf("Unable to create knet_link\n"); exit(EXIT_FAILURE); } memset(head, 0, sizeof(struct knet_link)); address.sin_family = AF_INET; address.sin_port = htons(KNET_PORT); address.sin_addr.s_addr = htonl(INADDR_LOOPBACK); memmove(&head->address, &address, sizeof(address)); clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &bench_start); for (i = 0; i < KNET_BENCH_LOOPNUM; i++) { cmpaddr((struct sockaddr_storage *) &address, sizeof(address), (struct sockaddr_storage *) &head->address, sizeof(head->address)); } clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &bench_end); printf("start sec: %3lu, nsec: %9lu\n end sec: %3lu, nsec: %9lu\n", bench_start.tv_sec, bench_start.tv_nsec, bench_end.tv_sec, bench_end.tv_nsec); timespec_diff(bench_start, bench_end, &bench_diff); printf("end - start = %llums\n", bench_diff); return 0; } diff --git a/tests/netutils_test.c b/tests/netutils_test.c index 54cf25fe..28f88b28 100644 --- a/tests/netutils_test.c +++ b/tests/netutils_test.c @@ -1,182 +1,184 @@ #include "config.h" +#include #include #include +#include +#include #include #include #include "netutils.h" -#include "utils.h" static void check_ipv4(void) { int err; char *buf[2]; struct sockaddr_in addr, addrck; memset(&addr, 0, sizeof(struct sockaddr_in)); memset(&addrck, 0, sizeof(struct sockaddr_in)); - log_info("Checking strtoaddr on 192.168.0.1:50000"); + printf("Checking strtoaddr on 192.168.0.1:50000\n"); addrck.sin_family = AF_INET; addrck.sin_addr.s_addr = htonl(0xc0a80001); /* 192.168.0.1 */ addrck.sin_port = htons(50000); err = strtoaddr("192.168.0.1", "50000", (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); if (err != 0) { - log_error("Unable to convert 192.168.0.1:50000"); + printf("Unable to convert 192.168.0.1:50000\n"); exit(EXIT_FAILURE); } if (memcmp(&addr, &addrck, sizeof(struct sockaddr_in)) != 0) { errno = EINVAL; - log_error("Check on 192.168.0.1:50000 failed"); + printf("Check on 192.168.0.1:50000 failed\n"); exit(EXIT_FAILURE); } - log_info("Checking addrtostr on 192.168.0.1:50000"); + printf("Checking addrtostr on 192.168.0.1:50000\n"); err = addrtostr((struct sockaddr *) &addrck, sizeof(struct sockaddr_in), buf); if (err != 0) { - log_error("Unable to convert 192.168.0.1:50000"); + printf("Unable to convert 192.168.0.1:50000\n"); exit(EXIT_FAILURE); } if (strcmp(buf[0], "192.168.0.1") != 0) { errno = EINVAL; - log_error("Wrong address conversion: %s", buf[0]); + printf("Wrong address conversion: %s\n", buf[0]); exit(EXIT_FAILURE); } if (strcmp(buf[1], "50000") != 0) { errno = EINVAL; - log_error("Wrong port conversion: %s", buf[1]); + printf("Wrong port conversion: %s\n", buf[1]); exit(EXIT_FAILURE); } addrtostr_free(buf); } static void check_ipv6(void) { int err; char *buf[2]; struct sockaddr_in6 addr, addrck; memset(&addr, 0, sizeof(struct sockaddr_in6)); memset(&addrck, 0, sizeof(struct sockaddr_in6)); - log_info("Checking strtoaddr on [fd00::1]:50000"); + printf("Checking strtoaddr on [fd00::1]:50000\n"); addrck.sin6_family = AF_INET6; addrck.sin6_addr.s6_addr16[0] = htons(0xfd00); /* fd00::1 */ addrck.sin6_addr.s6_addr16[7] = htons(0x0001); addrck.sin6_port = htons(50000); err = strtoaddr("fd00::1", "50000", (struct sockaddr *) &addr, sizeof(struct sockaddr_in6)); if (err != 0) { - log_error("Unable to convert [fd00::1]:50000"); + printf("Unable to convert [fd00::1]:50000\n"); exit(EXIT_FAILURE); } if (memcmp(&addr, &addrck, sizeof(struct sockaddr_in6)) != 0) { errno = EINVAL; - log_error("Check on 192.168.0.1:50000 failed"); + printf("Check on 192.168.0.1:50000 failed\n"); exit(EXIT_FAILURE); } - log_info("Checking addrtostr on [fd00::1]:50000"); + printf("Checking addrtostr on [fd00::1]:50000\n"); err = addrtostr((struct sockaddr *) &addrck, sizeof(struct sockaddr_in6), buf); if (err != 0) { - log_error("Unable to convert 192.168.0.1:50000"); + printf("Unable to convert 192.168.0.1:50000\n"); exit(EXIT_FAILURE); } if (strcmp(buf[0], "fd00::1") != 0) { errno = EINVAL; - log_error("Wrong address conversion: %s", buf[0]); + printf("Wrong address conversion: %s\n", buf[0]); exit(EXIT_FAILURE); } if (strcmp(buf[1], "50000") != 0) { errno = EINVAL; - log_error("Wrong port conversion: %s", buf[1]); + printf("Wrong port conversion: %s\n", buf[1]); exit(EXIT_FAILURE); } addrtostr_free(buf); } static void check_resolve(void) { int err; struct sockaddr_in addr; - log_info("Checking host resolution"); + printf("Checking host resolution\n"); err = strtoaddr("localhost", "50000", (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); if (err == 0) { errno = EINVAL; - log_error("Host resolution should not be enabled"); + printf("Host resolution should not be enabled\n"); exit(EXIT_FAILURE); } - log_info("Checking port resolution"); + printf("Checking port resolution\n"); err = strtoaddr("127.0.0.1", "ssh", (struct sockaddr *) &addr, sizeof(struct sockaddr_in)); if (err == 0) { errno = EINVAL; - log_error("Port resolution should not be enabled"); + printf("Port resolution should not be enabled\n"); exit(EXIT_FAILURE); } } int main(int argc, char *argv[]) { int err; char *buf[2]; struct sockaddr_storage address; if (argc == 1) { /* automated tests */ check_ipv4(); check_ipv6(); check_resolve(); exit(EXIT_SUCCESS); } else if (argc != 3) { printf("usage: %s [host] [port]\n", argv[0]); exit(EXIT_SUCCESS); } err = strtoaddr(argv[1], argv[2], (struct sockaddr *) &address, sizeof(struct sockaddr_storage)); if (err != 0) { - log_error("Unable to convert strings to sockaddr"); + printf("Unable to convert strings to sockaddr\n"); exit(EXIT_FAILURE); } err = addrtostr((struct sockaddr *) &address, sizeof(struct sockaddr_storage), buf); if (err != 0) { - log_error("Unable to convert sockaddr to strings"); + printf("Unable to convert sockaddr to strings\n"); exit(EXIT_FAILURE); } printf("host: %s port: %s\n", buf[0], buf[1]); addrtostr_free(buf); return 0; } diff --git a/tests/ping_test.c b/tests/ping_test.c index eb3992be..41591787 100644 --- a/tests/ping_test.c +++ b/tests/ping_test.c @@ -1,211 +1,211 @@ #include "config.h" +#include #include #include #include #include #include #include #include "libknet.h" -#include "utils.h" static int knet_sock[2]; static knet_handle_t knet_h; static in_port_t tok_inport(char *str) { int value = atoi(str); if ((value < 0) || (value > UINT16_MAX)) return 0; return (in_port_t) value; } static int tok_inaddrport(char *str, struct sockaddr_in *addr) { char *strhost, *strport, *tmp = NULL; strhost = strtok_r(str, ":", &tmp); strport = strtok_r(NULL, ":", &tmp); if (strport == NULL) addr->sin_port = htons(KNET_RING_DEFPORT); else addr->sin_port = htons(tok_inport(strport)); return inet_aton(strhost, &addr->sin_addr); } static void print_usage(char *name) { printf("usage: %s [:] [:port] [...]\n", name); printf("example: %s 0.0.0.0 192.168.0.2\n", name); } static void argv_to_hosts(int argc, char *argv[]) { int err, i; struct sockaddr_in *address; struct knet_host *host; struct knet_listener *listener; listener = malloc(sizeof(struct knet_listener)); if (listener == NULL) { - log_error("Unable to create listener"); + printf("Unable to create listener\n"); exit(EXIT_FAILURE); } memset(listener, 0, sizeof(struct knet_listener)); address = (struct sockaddr_in *) &listener->address; address->sin_family = AF_INET; err = tok_inaddrport(argv[1], address); if (err < 0) { - log_error("Unable to convert ip address: %s", argv[1]); + printf("Unable to convert ip address: %s\n", argv[1]); exit(EXIT_FAILURE); } err = knet_listener_add(knet_h, listener); if (err != 0) { - log_error("Unable to start knet listener"); + printf("Unable to start knet listener\n"); exit(EXIT_FAILURE); } for (i = 2; i < argc; i++) { if (knet_host_add(knet_h, i - 1) != 0) { - log_error("Unable to add new knet_host"); + printf("Unable to add new knet_host\n"); exit(EXIT_FAILURE); } knet_host_get(knet_h, i - 1, &host); host->link[0].sock = listener->sock; host->link[0].address.ss_family = AF_INET; knet_link_timeout(&host->link[0], 1000, 5000, 2048); host->link[0].ready = 1; err = tok_inaddrport(argv[i], (struct sockaddr_in *) &host->link[0].address); if (err < 0) { - log_error("Unable to convert ip address: %s", argv[i]); + printf("Unable to convert ip address: %s", argv[i]); exit(EXIT_FAILURE); } knet_host_release(knet_h, &host); } } /* Testing the latency/timeout: * # tc qdisc add dev lo root handle 1:0 netem delay 1s limit 1000 * # tc -d qdisc show dev lo * # tc qdisc del dev lo root */ static int print_link(knet_handle_t khandle, struct knet_host *host, struct knet_host_search *data) { int i; for (i = 0; i < KNET_MAX_LINK; i++) { if (host->link[i].ready != 1) continue; printf("host %p, link %p latency is %llums, status: %s\n", host, &host->link[i], host->link[i].latency, (host->link[i].enabled == 0) ? "disabled" : "enabled"); } return KNET_HOST_FOREACH_NEXT; } static void sigint_handler(int signum) { int err; printf("Cleaning up...\n"); if (knet_h != NULL) { err = knet_handle_free(knet_h); if (err != 0) { - log_error("Unable to cleanup before exit"); + printf("Unable to cleanup before exit\n"); exit(EXIT_FAILURE); } } exit(EXIT_SUCCESS); } int main(int argc, char *argv[]) { char buff[1024]; size_t len; fd_set rfds; struct timeval tv; struct knet_host_search print_search; if (argc < 3) { print_usage(argv[0]); exit(EXIT_FAILURE); } if (socketpair(AF_UNIX, SOCK_STREAM, IPPROTO_IP, knet_sock) != 0) { - log_error("Unable to create socket"); + printf("Unable to create socket\n"); exit(EXIT_FAILURE); } knet_h = NULL; if (signal(SIGINT, sigint_handler) == SIG_ERR) { - log_error("Unable to configure SIGINT handler"); + printf("Unable to configure SIGINT handler\n"); exit(EXIT_FAILURE); } if ((knet_h = knet_handle_new(knet_sock[0], 1)) == NULL) { - log_error("Unable to create new knet_handle_t"); + printf("Unable to create new knet_handle_t\n"); exit(EXIT_FAILURE); } argv_to_hosts(argc, argv); knet_handle_setfwd(knet_h, 1); while (1) { knet_host_foreach(knet_h, print_link, &print_search); - log_info("Sending 'Hello World!' frame"); + printf("Sending 'Hello World!' frame\n"); write(knet_sock[1], "Hello World!", 13); tv.tv_sec = 5; tv.tv_usec = 0; select_loop: FD_ZERO(&rfds); FD_SET(knet_sock[1], &rfds); len = select(FD_SETSIZE, &rfds, NULL, NULL, &tv); /* uncomment this to replicate the one-message problem */ /* usleep(500000); */ if (len < 0) { - log_error("Unable select over knet_handle_t"); + printf("Unable select over knet_handle_t\n"); exit(EXIT_FAILURE); } else if (FD_ISSET(knet_sock[1], &rfds)) { len = read(knet_sock[1], buff, sizeof(buff)); printf("Received data (%zu bytes): '%s'\n", len, buff); } if ((tv.tv_sec > 0) || (tv.tv_usec > 0)) goto select_loop; } /* FIXME: allocated hosts should be free'd */ return 0; } diff --git a/tests/timediff_test.c b/tests/timediff_test.c index 860dd666..fb7c6a1d 100644 --- a/tests/timediff_test.c +++ b/tests/timediff_test.c @@ -1,48 +1,48 @@ #include "config.h" +#include #include #include -#include "utils.h" #include "libknet-private.h" #define timespec_set(x, sec, nsec) \ do { \ x.tv_sec = sec; \ x.tv_nsec = nsec; \ } while (0); static void check_timespec_diff(void) { unsigned long long diff; struct timespec start, end; timespec_set(start, 1, 30000); timespec_set(end, start.tv_sec, start.tv_nsec + 10000); timespec_diff(start, end, &diff); - log_info("Checking 10000 == %llu", diff); + printf("Checking 10000 == %llu\n", diff); if (diff != 10000) { - log_error("Failure!"); + printf("Failure!\n"); exit(EXIT_FAILURE); } timespec_set(end, start.tv_sec + 5, start.tv_nsec - 5000); timespec_diff(start, end, &diff); - log_info("Checking 4999995000 == %llu", diff); + printf("Checking 4999995000 == %llu\n", diff); if (diff != 4999995000llu) { - log_error("Failure!"); + printf("Failure!\n"); exit(EXIT_FAILURE); } } int main(int argc, char *argv[]) { check_timespec_diff(); return 0; }