Mercurial > louis > mq > lightsd
changeset 211:4dec7c00cf46
wip testing
author | Louis Opter <kalessin@kalessin.fr> |
---|---|
date | Sat, 01 Aug 2015 01:59:04 -0700 |
parents | 2f35c36d32ae |
children | 61b96816af2f |
files | daemon_module.patch fix_usage_and_version.patch |
diffstat | 2 files changed, 207 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/daemon_module.patch Fri Jul 31 00:26:11 2015 -0700 +++ b/daemon_module.patch Sat Aug 01 01:59:04 2015 -0700 @@ -60,7 +60,7 @@ new file mode 100644 --- /dev/null +++ b/core/daemon.c -@@ -0,0 +1,152 @@ +@@ -0,0 +1,155 @@ +// Copyright (c) 2015, Louis Opter <kalessin@kalessin.fr> +// +// This file is part of lighstd. @@ -154,6 +154,7 @@ +{ +#if LGTD_HAVE_LIBBSD + setproctitle_init(argc, argv, envp); ++ lgtd_daemon_update_proctitle(); +#else + (void)argc; + (void)argv; @@ -201,7 +202,9 @@ + "command_pipes", "%s", it->path + ); + -+ PREFIX("lifx_gateways(found=%d)", LGTD_STATS_GET(gateways)); ++ if (!LIST_EMPTY(&lgtd_lifx_gateways)) { ++ PREFIX("lifx_gateways(found=%d)", LGTD_STATS_GET(gateways)); ++ } + + PREFIX( + "bulbs(found=%d, on=%d)", @@ -405,6 +408,35 @@ -void lgtd_update_proctitle(void); void lgtd_cleanup(void); +diff --git a/core/listen.c b/core/listen.c +--- a/core/listen.c ++++ b/core/listen.c +@@ -30,6 +30,7 @@ + #include "jsonrpc.h" + #include "client.h" + #include "listen.h" ++#include "daemon.h" + #include "lightsd.h" + + struct lgtd_listen_list lgtd_listeners = +@@ -69,6 +70,8 @@ + evconnlistener_free(listener->evlistener); + free(listener); + } ++ ++ lgtd_daemon_update_proctitle(); + } + + bool +@@ -130,6 +133,8 @@ + + evutil_freeaddrinfo(res); + ++ lgtd_daemon_update_proctitle(); ++ + return true; + + error: diff --git a/core/listen.h b/core/listen.h --- a/core/listen.h +++ b/core/listen.h @@ -517,7 +549,7 @@ new file mode 100644 --- /dev/null +++ b/tests/core/daemon/CMakeLists.txt -@@ -0,0 +1,21 @@ +@@ -0,0 +1,24 @@ +INCLUDE_DIRECTORIES( + ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_BINARY_DIR} @@ -525,8 +557,11 @@ + +ADD_CORE_LIBRARY( + test_core_daemon STATIC -+ ${LIGHTSD_SOURCE_DIR}/core/daemon.c ++ ${LIGHTSD_SOURCE_DIR}/core/log.c + ${LIGHTSD_SOURCE_DIR}/core/stats.c ++ ${LIGHTSD_SOURCE_DIR}/lifx/bulb.c ++ ${LIGHTSD_SOURCE_DIR}/lifx/wire_proto.c ++ ${LIGHTSD_SOURCE_DIR}/lifx/tagging.c + ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c + ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c +) @@ -539,15 +574,6 @@ +FOREACH(TEST ${TESTS}) + ADD_DAEMON_TEST(${TEST}) +ENDFOREACH() -diff --git a/tests/core/daemon/mock_listen.h b/tests/core/daemon/mock_listen.h -new file mode 100644 ---- /dev/null -+++ b/tests/core/daemon/mock_listen.h -@@ -0,0 +1,4 @@ -+#pragma once -+ -+struct lgtd_listen_list lgtd_listeners = -+ SLIST_HEAD_INITIALIZER(&lgtd_listeners); diff --git a/tests/core/daemon/mock_pipe.h b/tests/core/daemon/mock_pipe.h new file mode 100644 --- /dev/null @@ -561,15 +587,97 @@ new file mode 100644 --- /dev/null +++ b/tests/core/daemon/test_daemon_update_proctitle.c -@@ -0,0 +1,10 @@ +@@ -0,0 +1,92 @@ ++#undef HAVE_LIBBSD ++#define setproctitle mock_setproctitle +#include "daemon.c" + -+#include "mock_listen.h" ++#include "mock_gateway.h" +#include "mock_pipe.h" + ++#include "tests_utils.h" ++ ++void mock_setproctitle(const char *fmt, ...) ++ __attribute__((format(printf, 1, 2))); ++ ++const char *expected = ""; ++int setproctitle_call_count = 0; ++ ++void ++mock_setproctitle(const char *fmt, ...) ++{ ++ if (strcmp(fmt, "%s")) { ++ errx(1, "unexepected format %s (expected %%s)", fmt); ++ } ++ ++ va_list ap; ++ va_start(ap, fmt); ++ const char *title = va_arg(ap, const char *); ++ va_end(ap); ++ ++ if (strcmp(title, expected)) { ++ errx(1, "unexpected title: %s (expected %s)", title, expected); ++ } ++ ++ setproctitle_call_count++; ++} ++ +int +main(void) +{ ++ expected = "bulbs(found=0, on=0); clients(connected=0)"; ++ lgtd_daemon_update_proctitle(); ++ if (setproctitle_call_count != 1) { ++ errx(1, "setproctitle should have been called"); ++ } ++ ++ expected = ( ++ "lifx_gateways(found=1); " ++ "bulbs(found=0, on=0); " ++ "clients(connected=0)" ++ ); ++ struct lgtd_lifx_gateway *gw_1 = lgtd_tests_insert_mock_gateway(1); ++ if (setproctitle_call_count != 2) { ++ errx(1, "setproctitle should have been called"); ++ } ++ ++ expected = ( ++ "lifx_gateways(found=1); " ++ "bulbs(found=2, on=0); " ++ "clients(connected=0)" ++ ); ++ struct lgtd_lifx_bulb *bulb_2 = lgtd_tests_insert_mock_bulb(gw_1, 2); ++ lgtd_tests_insert_mock_bulb(gw_1, 3); ++ lgtd_daemon_update_proctitle(); ++ if (setproctitle_call_count != 3) { ++ errx(1, "setproctitle should have been called"); ++ } ++ ++ expected = ( ++ "listening_on(foobar.com:[1234]); " ++ "lifx_gateways(found=1); " ++ "bulbs(found=2, on=0); " ++ "clients(connected=0)" ++ ); ++ lgtd_tests_insert_mock_listener("foobar.com", "1234"); ++ lgtd_daemon_update_proctitle(); ++ if (setproctitle_call_count != 4) { ++ errx(1, "setproctitle should have been called"); ++ } ++ ++ expected = ( ++ "listening_on(foobar.com:[1234]); " ++ "lifx_gateways(found=1); " ++ "bulbs(found=2, on=1); " ++ "clients(connected=1)" ++ ); ++ bulb_2->state.power = LGTD_LIFX_POWER_ON; ++ LGTD_STATS_ADD_AND_UPDATE_PROCTITLE(clients, 1); ++ if (setproctitle_call_count != 5) { ++ errx(1, "setproctitle should have been called"); ++ } ++ ++ + return 0; +} diff --git a/tests/core/mock_daemon.h b/tests/core/mock_daemon.h @@ -585,6 +693,23 @@ +{ +} +#endif +diff --git a/tests/core/proto/CMakeLists.txt b/tests/core/proto/CMakeLists.txt +--- a/tests/core/proto/CMakeLists.txt ++++ b/tests/core/proto/CMakeLists.txt +@@ -16,11 +16,11 @@ + ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c + ) + +-FUNCTION(ADD_ROUTER_TEST TEST_SOURCE) ++FUNCTION(ADD_PROTO_TEST TEST_SOURCE) + ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_proto) + ENDFUNCTION() + + FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c") + FOREACH(TEST ${TESTS}) +- ADD_ROUTER_TEST(${TEST}) ++ ADD_PROTO_TEST(${TEST}) + ENDFOREACH() diff --git a/tests/core/proto/test_proto_get_light_state.c b/tests/core/proto/test_proto_get_light_state.c --- a/tests/core/proto/test_proto_get_light_state.c +++ b/tests/core/proto/test_proto_get_light_state.c @@ -849,6 +974,61 @@ +{ +} +#endif +diff --git a/tests/core/tests_utils.c b/tests/core/tests_utils.c +--- a/tests/core/tests_utils.c ++++ b/tests/core/tests_utils.c +@@ -19,6 +19,9 @@ + #include "core/jsonrpc.h" + #include "core/client.h" + #include "core/proto.h" ++#include "core/listen.h" ++#include "core/daemon.h" ++#include "core/stats.h" + #include "lifx/bulb.h" + #include "lifx/gateway.h" + #include "tests_utils.h" +@@ -26,6 +29,9 @@ + struct lgtd_lifx_gateway_list lgtd_lifx_gateways = + LIST_HEAD_INITIALIZER(&lgtd_lifx_gateways); + ++struct lgtd_listen_list lgtd_listeners = ++ SLIST_HEAD_INITIALIZER(&lgtd_listeners); ++ + struct lgtd_lifx_gateway * + lgtd_tests_insert_mock_gateway(int id) + { +@@ -36,6 +42,8 @@ + + LIST_INSERT_HEAD(&lgtd_lifx_gateways, gw, link); + ++ LGTD_STATS_ADD_AND_UPDATE_PROCTITLE(gateways, 1); ++ + return gw; + } + +@@ -112,3 +120,14 @@ + + return site; + } ++ ++struct lgtd_listen * ++lgtd_tests_insert_mock_listener(const char *addr, const char *port) ++{ ++ struct lgtd_listen *listener = calloc(1, sizeof(*listener)); ++ listener->addr = addr; ++ listener->port = port; ++ SLIST_INSERT_HEAD(&lgtd_listeners, listener, link); ++ ++ return listener; ++} +diff --git a/tests/core/tests_utils.h b/tests/core/tests_utils.h +--- a/tests/core/tests_utils.h ++++ b/tests/core/tests_utils.h +@@ -37,3 +37,4 @@ + struct lgtd_lifx_site *lgtd_tests_add_tag_to_gw(struct lgtd_lifx_tag *, + struct lgtd_lifx_gateway *, + int); ++struct lgtd_listen *lgtd_tests_insert_mock_listener(const char *addr, const char *port); diff --git a/tests/lifx/tests_shims.c b/tests/lifx/tests_shims.c --- a/tests/lifx/tests_shims.c +++ b/tests/lifx/tests_shims.c
--- a/fix_usage_and_version.patch Fri Jul 31 00:26:11 2015 -0700 +++ b/fix_usage_and_version.patch Sat Aug 01 01:59:04 2015 -0700 @@ -1,10 +1,21 @@ # HG changeset patch -# Parent fd1b697fb0c8dd39053b9cdf1bb8b40f78c28436 +# Parent 16c122197bf6ffffef579622c276b66b89e197b3 Display the usage when no arguments are passed in and fix -V diff --git a/core/lightsd.c b/core/lightsd.c --- a/core/lightsd.c +++ b/core/lightsd.c +@@ -138,8 +138,8 @@ + { + printf( + "Usage: %s ...\n\n" +- " [-l,--listen addr:port [-l ...]]\n" +- " [-c,--comand-pipe /command/fifo -[c ...]]\n" ++ " [-l,--listen addr:port [+]]\n" ++ " [-c,--comand-pipe /command/fifo [+]]\n" + " [-f,--foreground]\n" + " [-t,--no-timestamps]\n" + " [-h,--help]\n" @@ -217,6 +217,10 @@ }; const char short_opts[] = "l:c:fthv:V";