changeset 203:39cc928ec475

got one bulb test running, didn't expect all the cmake changes...
author Louis Opter <kalessin@kalessin.fr>
date Thu, 23 Jul 2015 00:09:57 -0700
parents 045df907f18a
children e3b49c843612
files tag_untag_testing.patch
diffstat 1 files changed, 423 insertions(+), 153 deletions(-) [+]
line wrap: on
line diff
--- a/tag_untag_testing.patch	Wed Jul 22 21:30:24 2015 -0700
+++ b/tag_untag_testing.patch	Thu Jul 23 00:09:57 2015 -0700
@@ -1,6 +1,59 @@
 # HG changeset patch
-# Parent  e1c9800ece5cb3b9d8ed9265f7c1b07e2b66a746
+# Parent  0212ce4961c923eba962c246c4d2d5de75bd6fb3
 
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -1,4 +1,4 @@
+-CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
++CMAKE_MINIMUM_REQUIRED(VERSION 2.8.11)  # first version TARGET_INCLUDE_DIRECTORIES
+ 
+ PROJECT(LIGHTSD C)
+ 
+@@ -58,10 +58,11 @@
+ ENDIF ()
+ 
+ INCLUDE_DIRECTORIES(
+-    ${LIGHTSD_SOURCE_DIR}/compat/generic
+     ${LIGHTSD_BINARY_DIR}/compat
++    ${LIGHTSD_BINARY_DIR}/compat/generic
+ )
+ 
++ADD_SUBDIRECTORY(compat)
+ ADD_SUBDIRECTORY(core)
+ ADD_SUBDIRECTORY(lifx)
+ ADD_SUBDIRECTORY(tests)
+diff --git a/CMakeScripts/AddTestFromSources.cmake b/CMakeScripts/AddTestFromSources.cmake
+--- a/CMakeScripts/AddTestFromSources.cmake
++++ b/CMakeScripts/AddTestFromSources.cmake
+@@ -1,11 +1,11 @@
+-FUNCTION(ADD_TEST_FROM_C_SOURCES TEST_SOURCE TEST_LIB)
++FUNCTION(ADD_TEST_FROM_C_SOURCES TEST_SOURCE)
+     STRING(LENGTH ${TEST_SOURCE} TEST_NAME_LEN)
+     STRING(LENGTH "test_" PREFIX_LEN)
+     MATH(EXPR TEST_NAME_LEN "${TEST_NAME_LEN} - 2 - ${PREFIX_LEN}")
+     STRING(SUBSTRING ${ARGV0} ${PREFIX_LEN} ${TEST_NAME_LEN} TEST_NAME)
+-    ADD_EXECUTABLE(${TEST_NAME} ${TEST_SOURCE} ${ARGN})
+-    IF (TEST_LIB)
+-        TARGET_LINK_LIBRARIES(${TEST_NAME} ${TEST_LIB})
++    ADD_EXECUTABLE(${TEST_NAME} ${TEST_SOURCE})
++    IF (ARGN)
++        TARGET_LINK_LIBRARIES(${TEST_NAME} ${ARGN})
+     ENDIF ()
+     ADD_TEST(test_${TEST_NAME} ${TEST_NAME})
+ ENDFUNCTION()
+diff --git a/compat/CMakeLists.txt b/compat/CMakeLists.txt
+new file mode 100644
+--- /dev/null
++++ b/compat/CMakeLists.txt
+@@ -0,0 +1,1 @@
++ADD_SUBDIRECTORY(generic)
+diff --git a/compat/generic/CMakeLists.txt b/compat/generic/CMakeLists.txt
+new file mode 100644
+--- /dev/null
++++ b/compat/generic/CMakeLists.txt
+@@ -0,0 +1,1 @@
++FILE(COPY sys DESTINATION ${CMAKE_CURRENT_BINARY_DIR})
 diff --git a/lifx/bulb.c b/lifx/bulb.c
 --- a/lifx/bulb.c
 +++ b/lifx/bulb.c
@@ -9,9 +62,9 @@
      assert(bulb->gw);
  
 +#ifndef NDEBUG
-+    // FIXME: Yeah, so an unit test would be better because it can be easily
-+    // automated, but this looks so much easier to do and this code path is
-+    // often exercised:
++    // FIXME: Yeah, so an unit test lgtd_lifx_gateway_remove_and_close_bulb
++    // would be better because it can be automated, but this looks so much
++    // easier to do and this code path is often exercised:
 +    int tag_id;
 +    LGTD_LIFX_WIRE_FOREACH_TAG_ID(tag_id, bulb->state.tags) {
 +        int n = 0;
@@ -21,13 +74,69 @@
 +                n++;
 +            }
 +        }
-+        assert(bulb->gw->tag_refcounts[i] == n - 1);
++        assert(bulb->gw->tag_refcounts[tag_id] == n - 1);
 +    }
 +#endif
 +
      LGTD_STATS_ADD_AND_UPDATE_PROCTITLE(bulbs, -1);
      if (bulb->state.power == LGTD_LIFX_POWER_ON) {
          LGTD_STATS_ADD_AND_UPDATE_PROCTITLE(bulbs_powered_on, -1);
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -1,1 +1,14 @@
++FUNCTION(ADD_CORE_LIBRARY LIBNAME)
++    ADD_LIBRARY(${LIBNAME} ${ARGN})
++    TARGET_LINK_LIBRARIES(${LIBNAME} ${TIME_MONOTONIC_LIBRARY})
++    TARGET_INCLUDE_DIRECTORIES(
++        ${LIBNAME} PUBLIC
++        ${LIGHTSD_SOURCE_DIR}/core/
++        ${LIGHTSD_BINARY_DIR}/core/
++    )
++    IF (HAVE_LIBBSD)
++        TARGET_LINK_LIBRARIES(${LIBNAME} ${LIBBSD_LIBRARY})
++    ENDIF (HAVE_LIBBSD)
++ENDFUNCTION()
++
+ ADD_ALL_SUBDIRECTORIES()
+diff --git a/tests/core/CMakeLists.txt b/tests/core/CMakeLists.txt
+--- a/tests/core/CMakeLists.txt
++++ b/tests/core/CMakeLists.txt
+@@ -2,9 +2,11 @@
+     ${LIGHTSD_SOURCE_DIR}
+     ${LIGHTSD_SOURCE_DIR}/core/
+     ${CMAKE_CURRENT_SOURCE_DIR}
++    ${CMAKE_CURRENT_SOURCE_DIR}/../lifx
+     ${LIGHTSD_BINARY_DIR}
+     ${LIGHTSD_BINARY_DIR}/core/
+     ${CMAKE_CURRENT_BINARY_DIR}
++    ${CMAKE_CURRENT_BINARY_DIR}/../lifx
+ )
+ 
+ ADD_ALL_SUBDIRECTORIES()
+diff --git a/tests/core/jsonrpc/CMakeLists.txt b/tests/core/jsonrpc/CMakeLists.txt
+--- a/tests/core/jsonrpc/CMakeLists.txt
++++ b/tests/core/jsonrpc/CMakeLists.txt
+@@ -3,7 +3,7 @@
+     ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ 
+-ADD_LIBRARY(
++ADD_CORE_LIBRARY(
+     test_core_jsonrpc STATIC
+     ${LIGHTSD_SOURCE_DIR}/core/jsmn.c
+     ${LIGHTSD_SOURCE_DIR}/core/log.c
+@@ -13,10 +13,6 @@
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c
+ )
+-TARGET_LINK_LIBRARIES(test_core_jsonrpc ${TIME_MONOTONIC_LIBRARY})
+-IF (HAVE_LIBBSD)
+-    TARGET_LINK_LIBRARIES(test_core_jsonrpc ${LIBBSD_LIBRARY})
+-ENDIF (HAVE_LIBBSD)
+ 
+ FUNCTION(ADD_JSONRPC_TEST TEST_SOURCE)
+     ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_jsonrpc)
 diff --git a/tests/core/jsonrpc/test_jsonrpc_build_target_list.c b/tests/core/jsonrpc/test_jsonrpc_build_target_list.c
 --- a/tests/core/jsonrpc/test_jsonrpc_build_target_list.c
 +++ b/tests/core/jsonrpc/test_jsonrpc_build_target_list.c
@@ -360,142 +469,29 @@
  #include "test_jsonrpc_utils.h"
  
  int
-diff --git a/tests/core/mock_gateway.h b/tests/core/mock_gateway.h
-new file mode 100644
---- /dev/null
-+++ b/tests/core/mock_gateway.h
-@@ -0,0 +1,131 @@
-+#pragma once
-+
-+#include "time_monotonic.h"
-+#include "lifx/bulb.h"
-+#include "lifx/gateway.h"
-+
-+struct lgtd_lifx_tag;
-+struct lgtd_lifx_gateway;
-+
-+#ifndef MOCKED_LIFX_GATEWAY_SEND_TO_SITE
-+bool
-+lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw,
-+                               enum lgtd_lifx_packet_type pkt_type,
-+                               const void *pkt)
-+{
-+    (void)gw;
-+    (void)pkt_type;
-+    (void)pkt;
-+    return false;
-+}
-+#endif
-+
-+#ifndef MOCKED_LIFX_GATEWAY_ALLOCATE_TAG_ID
-+int
-+lgtd_lifx_gateway_allocate_tag_id(struct lgtd_lifx_gateway *gw,
-+                                  int tag_id,
-+                                  const char *tag_label)
-+{
-+    (void)gw;
-+    (void)tag_id;
-+    (void)tag_label;
-+    return -1;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_HANDLE_PAN_GATEWAY
-+void
-+lgtd_lifx_gateway_handle_pan_gateway(struct lgtd_lifx_gateway *gw,
-+                                     const struct lgtd_lifx_packet_header *hdr,
-+                                     const struct lgtd_lifx_packet_pan_gateway *pkt)
-+{
-+    (void)gw;
-+    (void)hdr;
-+    (void)pkt;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_HANDLE_LIGHT_STATUS
-+void
-+lgtd_lifx_gateway_handle_light_status(struct lgtd_lifx_gateway *gw,
-+                                      const struct lgtd_lifx_packet_header *hdr,
-+                                      const struct lgtd_lifx_packet_light_status *pkt)
-+{
-+    (void)gw;
-+    (void)hdr;
-+    (void)pkt;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_HANDLE_POWER_STATE
-+void
-+lgtd_lifx_gateway_handle_power_state(struct lgtd_lifx_gateway *gw,
-+                                     const struct lgtd_lifx_packet_header *hdr,
-+                                     const struct lgtd_lifx_packet_power_state *pkt)
-+{
-+    (void)gw;
-+    (void)hdr;
-+    (void)pkt;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_HANDLE_TAG_LABELS
-+void
-+lgtd_lifx_gateway_handle_tag_labels(struct lgtd_lifx_gateway *gw,
-+                                    const struct lgtd_lifx_packet_header *hdr,
-+                                    const struct lgtd_lifx_packet_tag_labels *pkt)
-+{
-+    (void)gw;
-+    (void)hdr;
-+    (void)pkt;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_HANDLE_TAGS
-+void
-+lgtd_lifx_gateway_handle_tags(struct lgtd_lifx_gateway *gw,
-+                              const struct lgtd_lifx_packet_header *hdr,
-+                              const struct lgtd_lifx_packet_tags *pkt)
-+{
-+    (void)gw;
-+    (void)hdr;
-+    (void)pkt;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_DEALLOCATE_TAG_ID
-+void
-+lgtd_lifx_gateway_deallocate_tag_id(struct lgtd_lifx_gateway *gw, int tag_id)
-+{
-+    (void)gw;
-+    (void)tag_id;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_GET_TAG_ID
-+int
-+lgtd_lifx_gateway_get_tag_id(const struct lgtd_lifx_gateway *gw,
-+                             const struct lgtd_lifx_tag *tag)
-+{
-+    int tag_id;
-+    LGTD_LIFX_WIRE_FOREACH_TAG_ID(tag_id, gw->tag_ids) {
-+        if (gw->tags[tag_id] == tag) {
-+            return tag_id;
-+        }
-+    }
-+
-+    return -1;
-+}
-+#endif
-+
-+#ifndef LGTD_LIFX_GATEWAY_UPDATE_TAG_REFCOUNTS
-+void
-+lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *gw,
-+                                       uint64_t bulb_tags,
-+                                       uint64_t pkt_tags)
-+{
-+    (void)gw;
-+    (void)bulb_tags;
-+    (void)pkt_tags;
-+}
-+#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
+@@ -3,7 +3,7 @@
+     ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ 
+-ADD_LIBRARY(
++ADD_CORE_LIBRARY(
+     test_core_proto STATIC
+     ${LIGHTSD_SOURCE_DIR}/core/log.c
+     ${LIGHTSD_SOURCE_DIR}/core/jsonrpc.c
+@@ -15,10 +15,6 @@
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c
+ )
+-TARGET_LINK_LIBRARIES(test_core_proto ${TIME_MONOTONIC_LIBRARY})
+-IF (HAVE_LIBBSD)
+-    TARGET_LINK_LIBRARIES(test_core_proto ${LIBBSD_LIBRARY})
+-ENDIF (HAVE_LIBBSD)
+ 
+ FUNCTION(ADD_ROUTER_TEST TEST_SOURCE)
+     ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_proto)
 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
@@ -688,6 +684,32 @@
  #include "tests_utils.h"
  
  #define MOCKED_ROUTER_TARGETS_TO_DEVICES
+diff --git a/tests/core/router/CMakeLists.txt b/tests/core/router/CMakeLists.txt
+--- a/tests/core/router/CMakeLists.txt
++++ b/tests/core/router/CMakeLists.txt
+@@ -3,7 +3,7 @@
+     ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ 
+-ADD_LIBRARY(
++ADD_CORE_LIBRARY(
+     test_core_router STATIC
+     ${LIGHTSD_SOURCE_DIR}/core/log.c
+     ${LIGHTSD_SOURCE_DIR}/core/proto.c
+@@ -16,12 +16,7 @@
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_utils.c
+ )
+ 
+-TARGET_LINK_LIBRARIES(
+-    test_core_router ${EVENT2_CORE_LIBRARY} ${TIME_MONOTONIC_LIBRARY}
+-)
+-IF (HAVE_LIBBSD)
+-    TARGET_LINK_LIBRARIES(test_core_router ${LIBBSD_LIBRARY})
+-ENDIF (HAVE_LIBBSD)
++TARGET_LINK_LIBRARIES(test_core_router ${EVENT2_CORE_LIBRARY})
+ 
+ FUNCTION(ADD_ROUTER_TEST TEST_SOURCE)
+     ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_core_router)
 diff --git a/tests/core/router/tests_router_utils.h b/tests/core/router/tests_router_utils.h
 --- a/tests/core/router/tests_router_utils.h
 +++ b/tests/core/router/tests_router_utils.h
@@ -819,33 +841,35 @@
 new file mode 100644
 --- /dev/null
 +++ b/tests/lifx/bulb/CMakeLists.txt
-@@ -0,0 +1,27 @@
+@@ -0,0 +1,29 @@
 +INCLUDE_DIRECTORIES(
 +    ${CMAKE_CURRENT_SOURCE_DIR}
 +    ${CMAKE_CURRENT_BINARY_DIR}
 +)
 +
-+ADD_LIBRARY(
-+    test_lifx_bulb STATIC
++ADD_CORE_LIBRARY(
++    test_lifx_bulb_core STATIC
 +    ${LIGHTSD_SOURCE_DIR}/core/log.c
 +    ${LIGHTSD_SOURCE_DIR}/core/router.c
 +    ${LIGHTSD_SOURCE_DIR}/core/stats.c
-+    ${LIGHTSD_SOURCE_DIR}/lifx/bulb.c
-+    ${LIGHTSD_SOURCE_DIR}/lifx/wire_proto.c
 +    ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
 +)
-+TARGET_LINK_LIBRARIES(test_lifx_bulb ${TIME_MONOTONIC_LIBRARY})
-+IF (HAVE_LIBBSD)
-+    TARGET_LINK_LIBRARIES(test_lifx_bulb ${LIBBSD_LIBRARY})
-+ENDIF (HAVE_LIBBSD)
 +
-+FUNCTION(ADD_GATEWAY_TEST TEST_SOURCE)
-+    ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_lifx_bulb)
++ADD_LIBRARY(
++    test_lifx_bulb STATIC
++    ${LIGHTSD_SOURCE_DIR}/lifx/bulb.c
++    ${LIGHTSD_SOURCE_DIR}/lifx/wire_proto.c
++)
++
++FUNCTION(ADD_BULB_TEST TEST_SOURCE)
++    ADD_TEST_FROM_C_SOURCES(
++        ${TEST_SOURCE} test_lifx_bulb_core test_lifx_bulb
++    )
 +ENDFUNCTION()
 +
 +FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c")
 +FOREACH(TEST ${TESTS})
-+    ADD_GATEWAY_TEST(${TEST})
++    ADD_BULB_TEST(${TEST})
 +ENDFOREACH()
 diff --git a/tests/lifx/bulb/test_bulb_close.c b/tests/lifx/bulb/test_bulb_close.c
 new file mode 100644
@@ -857,3 +881,249 @@
 new file mode 100644
 diff --git a/tests/lifx/bulb/test_bulb_set_tags.c b/tests/lifx/bulb/test_bulb_set_tags.c
 new file mode 100644
+--- /dev/null
++++ b/tests/lifx/bulb/test_bulb_set_tags.c
+@@ -0,0 +1,43 @@
++#include "bulb.c"
++
++#define MOCKED_LGTD_LIFX_GATEWAY_UPDATE_TAG_REFCOUNTS
++#include "mock_gateway.h"
++
++static bool update_tag_refcouts_called = false;
++
++void
++lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *gw,
++                                       uint64_t bulb_tags,
++                                       uint64_t pkt_tags)
++{
++    if (gw != (void *)0xdeaf) {
++        errx(1, "got wrong gw %p (expected 0xdeaf)", gw);
++    }
++
++    if (bulb_tags != 0x2a) {
++        errx(1, "got bulb_tags %#jx (expected 0x2a)", (uintmax_t)bulb_tags);
++    }
++
++    if (pkt_tags != 0xfeed) {
++        errx(1, "got pkt_tags %#jx (expected 0xfeed)", (uintmax_t)pkt_tags);
++    }
++
++    update_tag_refcouts_called = true;
++}
++
++int
++main(void)
++{
++    struct lgtd_lifx_bulb bulb = {
++        .state = { .tags = 0x2a },
++        .gw = (void *)0xdeaf
++    };
++
++    lgtd_lifx_bulb_set_tags(&bulb, 0xfeed);
++
++    if (!update_tag_refcouts_called) {
++        errx(1, "lgtd_lifx_gateway_update_tag_refcounts wasn't called");
++    }
++
++    return 0;
++}
+diff --git a/tests/lifx/gateway/CMakeLists.txt b/tests/lifx/gateway/CMakeLists.txt
+--- a/tests/lifx/gateway/CMakeLists.txt
++++ b/tests/lifx/gateway/CMakeLists.txt
+@@ -3,25 +3,27 @@
+     ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ 
+-ADD_LIBRARY(
+-    test_lifx_gateway STATIC
++ADD_CORE_LIBRARY(
++    test_lifx_gateway_core STATIC
+     ${LIGHTSD_SOURCE_DIR}/core/log.c
+     ${LIGHTSD_SOURCE_DIR}/core/proto.c
+     ${LIGHTSD_SOURCE_DIR}/core/router.c
+     ${LIGHTSD_SOURCE_DIR}/core/stats.c
++    ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
++)
++
++ADD_LIBRARY(
++    test_lifx_gateway STATIC
+     ${LIGHTSD_SOURCE_DIR}/lifx/broadcast.c
+     ${LIGHTSD_SOURCE_DIR}/lifx/bulb.c
+     ${LIGHTSD_SOURCE_DIR}/lifx/timer.c
+     ${LIGHTSD_SOURCE_DIR}/lifx/wire_proto.c
+-    ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
+ )
+-TARGET_LINK_LIBRARIES(test_lifx_gateway ${TIME_MONOTONIC_LIBRARY})
+-IF (HAVE_LIBBSD)
+-    TARGET_LINK_LIBRARIES(test_lifx_gateway ${LIBBSD_LIBRARY})
+-ENDIF (HAVE_LIBBSD)
+ 
+ FUNCTION(ADD_GATEWAY_TEST TEST_SOURCE)
+-    ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_lifx_gateway)
++    ADD_TEST_FROM_C_SOURCES(
++        ${TEST_SOURCE} test_lifx_gateway_core test_lifx_gateway
++    )
+ ENDFUNCTION()
+ 
+ FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c")
+diff --git a/tests/lifx/mock_gateway.h b/tests/lifx/mock_gateway.h
+new file mode 100644
+--- /dev/null
++++ b/tests/lifx/mock_gateway.h
+@@ -0,0 +1,131 @@
++#pragma once
++
++#include "core/time_monotonic.h"
++#include "lifx/bulb.h"
++#include "lifx/gateway.h"
++
++struct lgtd_lifx_tag;
++struct lgtd_lifx_gateway;
++
++#ifndef MOCKED_LIFX_GATEWAY_SEND_TO_SITE
++bool
++lgtd_lifx_gateway_send_to_site(struct lgtd_lifx_gateway *gw,
++                               enum lgtd_lifx_packet_type pkt_type,
++                               const void *pkt)
++{
++    (void)gw;
++    (void)pkt_type;
++    (void)pkt;
++    return false;
++}
++#endif
++
++#ifndef MOCKED_LIFX_GATEWAY_ALLOCATE_TAG_ID
++int
++lgtd_lifx_gateway_allocate_tag_id(struct lgtd_lifx_gateway *gw,
++                                  int tag_id,
++                                  const char *tag_label)
++{
++    (void)gw;
++    (void)tag_id;
++    (void)tag_label;
++    return -1;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_HANDLE_PAN_GATEWAY
++void
++lgtd_lifx_gateway_handle_pan_gateway(struct lgtd_lifx_gateway *gw,
++                                     const struct lgtd_lifx_packet_header *hdr,
++                                     const struct lgtd_lifx_packet_pan_gateway *pkt)
++{
++    (void)gw;
++    (void)hdr;
++    (void)pkt;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_HANDLE_LIGHT_STATUS
++void
++lgtd_lifx_gateway_handle_light_status(struct lgtd_lifx_gateway *gw,
++                                      const struct lgtd_lifx_packet_header *hdr,
++                                      const struct lgtd_lifx_packet_light_status *pkt)
++{
++    (void)gw;
++    (void)hdr;
++    (void)pkt;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_HANDLE_POWER_STATE
++void
++lgtd_lifx_gateway_handle_power_state(struct lgtd_lifx_gateway *gw,
++                                     const struct lgtd_lifx_packet_header *hdr,
++                                     const struct lgtd_lifx_packet_power_state *pkt)
++{
++    (void)gw;
++    (void)hdr;
++    (void)pkt;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_HANDLE_TAG_LABELS
++void
++lgtd_lifx_gateway_handle_tag_labels(struct lgtd_lifx_gateway *gw,
++                                    const struct lgtd_lifx_packet_header *hdr,
++                                    const struct lgtd_lifx_packet_tag_labels *pkt)
++{
++    (void)gw;
++    (void)hdr;
++    (void)pkt;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_HANDLE_TAGS
++void
++lgtd_lifx_gateway_handle_tags(struct lgtd_lifx_gateway *gw,
++                              const struct lgtd_lifx_packet_header *hdr,
++                              const struct lgtd_lifx_packet_tags *pkt)
++{
++    (void)gw;
++    (void)hdr;
++    (void)pkt;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_DEALLOCATE_TAG_ID
++void
++lgtd_lifx_gateway_deallocate_tag_id(struct lgtd_lifx_gateway *gw, int tag_id)
++{
++    (void)gw;
++    (void)tag_id;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_GET_TAG_ID
++int
++lgtd_lifx_gateway_get_tag_id(const struct lgtd_lifx_gateway *gw,
++                             const struct lgtd_lifx_tag *tag)
++{
++    int tag_id;
++    LGTD_LIFX_WIRE_FOREACH_TAG_ID(tag_id, gw->tag_ids) {
++        if (gw->tags[tag_id] == tag) {
++            return tag_id;
++        }
++    }
++
++    return -1;
++}
++#endif
++
++#ifndef MOCKED_LGTD_LIFX_GATEWAY_UPDATE_TAG_REFCOUNTS
++void
++lgtd_lifx_gateway_update_tag_refcounts(struct lgtd_lifx_gateway *gw,
++                                       uint64_t bulb_tags,
++                                       uint64_t pkt_tags)
++{
++    (void)gw;
++    (void)bulb_tags;
++    (void)pkt_tags;
++}
++#endif
+diff --git a/tests/lifx/wire_proto/CMakeLists.txt b/tests/lifx/wire_proto/CMakeLists.txt
+--- a/tests/lifx/wire_proto/CMakeLists.txt
++++ b/tests/lifx/wire_proto/CMakeLists.txt
+@@ -3,18 +3,15 @@
+     ${CMAKE_CURRENT_BINARY_DIR}
+ )
+ 
+-ADD_LIBRARY(
+-    test_lifx_wire_proto STATIC
++ADD_CORE_LIBRARY(
++    test_lifx_wire_proto_core STATIC
+     ${LIGHTSD_SOURCE_DIR}/core/log.c
+     ${LIGHTSD_SOURCE_DIR}/core/stats.c
+     ${CMAKE_CURRENT_SOURCE_DIR}/../tests_shims.c
+ )
+-IF (HAVE_LIBBSD)
+-    TARGET_LINK_LIBRARIES(test_lifx_wire_proto ${LIBBSD_LIBRARY})
+-ENDIF (HAVE_LIBBSD)
+ 
+ FUNCTION(ADD_WIRE_PROTO_TEST TEST_SOURCE)
+-    ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_lifx_wire_proto)
++    ADD_TEST_FROM_C_SOURCES(${TEST_SOURCE} test_lifx_wire_proto_core)
+ ENDFUNCTION()
+ 
+ FILE(GLOB TESTS RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "test_*.c")