kernel-netlink: Add a simple send message test querying available links
authorMartin Willi <martin@revosec.ch>
Wed, 9 Jul 2014 13:26:30 +0000 (15:26 +0200)
committerMartin Willi <martin@revosec.ch>
Fri, 21 Nov 2014 09:55:44 +0000 (10:55 +0100)
src/libhydra/plugins/kernel_netlink/Makefile.am
src/libhydra/plugins/kernel_netlink/suites/test_socket.c [new file with mode: 0644]
src/libhydra/plugins/kernel_netlink/tests.h

index daa9af8..aeffaad 100644 (file)
@@ -29,6 +29,7 @@ check_PROGRAMS = $(TESTS)
 
 tests_SOURCES = \
        tests.h tests.c \
+       suites/test_socket.c \
        kernel_netlink_shared.c
 
 tests_CFLAGS = \
diff --git a/src/libhydra/plugins/kernel_netlink/suites/test_socket.c b/src/libhydra/plugins/kernel_netlink/suites/test_socket.c
new file mode 100644 (file)
index 0000000..2ff8a99
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2014 Martin Willi
+ * Copyright (C) 2014 revosec AG
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation; either version 2 of the License, or (at your
+ * option) any later version.  See <http://www.fsf.org/copyleft/gpl.txt>.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
+ * for more details.
+ */
+
+#include <test_suite.h>
+
+#include "../kernel_netlink_shared.h"
+
+START_TEST(test_echo)
+{
+       netlink_socket_t *s;
+       struct nlmsghdr *out, *current;
+       struct rtgenmsg *msg;
+       size_t len;
+       netlink_buf_t request = {
+               .hdr = {
+                       .nlmsg_len = NLMSG_LENGTH(sizeof(struct rtgenmsg)),
+                       .nlmsg_flags = NLM_F_REQUEST | NLM_F_MATCH | NLM_F_ROOT,
+                       .nlmsg_type = RTM_GETLINK,
+               },
+       };
+
+       s = netlink_socket_create(NETLINK_ROUTE, NULL);
+       msg = NLMSG_DATA(&request.hdr);
+       msg->rtgen_family = AF_UNSPEC;
+
+       ck_assert(s->send(s, &request.hdr, &out, &len) == SUCCESS);
+       current = out;
+       while (TRUE)
+       {
+               ck_assert(NLMSG_OK(current, len));
+               if (current->nlmsg_type == NLMSG_DONE)
+               {
+                       break;
+               }
+               ck_assert_int_eq(current->nlmsg_type, RTM_NEWLINK);
+               current = NLMSG_NEXT(current, len);
+       }
+       free(out);
+       s->destroy(s);
+}
+END_TEST
+
+Suite *socket_suite_create()
+{
+       Suite *s;
+       TCase *tc;
+
+       s = suite_create("netlink socket");
+
+       tc = tcase_create("echo");
+       tcase_add_test(tc, test_echo);
+       suite_add_tcase(s, tc);
+
+       return s;
+}
index 05502f1..2b6715a 100644 (file)
@@ -12,3 +12,5 @@
  * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  * for more details.
  */
+
+TEST_SUITE(socket_suite_create)