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";