]> git.proxmox.com Git - mirror_kronosnet.git/commitdiff
[tests] add knet_handle_get_datafd tests
authorFabio M. Di Nitto <fdinitto@redhat.com>
Sun, 28 Aug 2016 17:00:44 +0000 (19:00 +0200)
committerFabio M. Di Nitto <fdinitto@redhat.com>
Sun, 28 Aug 2016 17:00:44 +0000 (19:00 +0200)
Signed-off-by: Fabio M. Di Nitto <fdinitto@redhat.com>
libknet/tests/Makefile.am
libknet/tests/api_knet_handle_get_datafd.c [new file with mode: 0644]

index d76db7427ba0d4623f8dda1b690db05ce85deaa3..2f0c82c37e5fab652fb4db82d045a4076e4b37da 100644 (file)
@@ -34,6 +34,7 @@ check_PROGRAMS                = \
                          api_knet_handle_add_datafd_test \
                          api_knet_handle_remove_datafd_test \
                          api_knet_handle_get_channel_test \
+                         api_knet_handle_get_datafd_test \
                          api_knet_host_add_test \
                          api_knet_host_remove_test \
                          api_knet_host_set_name_test \
@@ -107,6 +108,9 @@ api_knet_handle_remove_datafd_test_SOURCES = api_knet_handle_remove_datafd.c \
 api_knet_handle_get_channel_test_SOURCES = api_knet_handle_get_channel.c \
                                           test-common.c
 
+api_knet_handle_get_datafd_test_SOURCES = api_knet_handle_get_datafd.c \
+                                         test-common.c
+
 api_knet_host_add_test_SOURCES = api_knet_host_add.c \
                                 test-common.c
 
diff --git a/libknet/tests/api_knet_handle_get_datafd.c b/libknet/tests/api_knet_handle_get_datafd.c
new file mode 100644 (file)
index 0000000..3e53626
--- /dev/null
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2016 Red Hat, Inc.  All rights reserved.
+ *
+ * Authors: Fabio M. Di Nitto <fabbione@kronosnet.org>
+ *
+ * This software licensed under GPL-2.0+, LGPL-2.0+
+ */
+
+#include "config.h"
+
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "libknet.h"
+
+#include "internals.h"
+#include "test-common.h"
+
+static int private_data;
+
+static void sock_notify(void *pvt_data,
+                       int datafd,
+                       int8_t channel,
+                       uint8_t tx_rx,
+                       int error,
+                       int errorno)
+{
+       return;
+}
+
+static void test(void)
+{
+       knet_handle_t knet_h;
+       int logfds[2];
+       int datafd = 0, old_datafd;
+       int8_t channel = 0;
+
+       printf("Test knet_handle_get_datafd incorrect knet_h\n");
+
+       if ((!knet_handle_get_datafd(NULL, channel, &datafd)) || (errno != EINVAL)) {
+               printf("knet_handle_get_datafd accepted invalid knet_h or returned incorrect error: %s\n", strerror(errno));
+               exit(FAIL);
+       }
+
+       setup_logpipes(logfds);
+
+       knet_h = knet_handle_new(1, logfds[1], KNET_LOG_DEBUG);
+
+       if (!knet_h) {
+               printf("knet_handle_new failed: %s\n", strerror(errno));
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       printf("Test knet_handle_get_datafd with invalid channel (< 0)\n");
+
+       channel = 0;
+
+       if ((!knet_handle_get_datafd(knet_h, channel, &datafd)) || (errno != EINVAL)) {
+               printf("knet_handle_get_datafd accepted invalid channel or returned incorrect error: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       flush_logs(logfds[0], stdout);
+
+       printf("Test knet_handle_get_datafd with invalid channel (KNET_DATAFD_MAX)\n");
+
+       channel = KNET_DATAFD_MAX;
+
+       if ((!knet_handle_get_datafd(knet_h, channel, &datafd)) || (errno != EINVAL)) {
+               printf("knet_handle_get_datafd accepted invalid channel or returned incorrect error: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       flush_logs(logfds[0], stdout);
+
+       printf("Test knet_handle_get_datafd with unconfigured datafd/channel\n");
+
+       channel = 10;
+
+       if ((!knet_handle_get_datafd(knet_h, channel, &datafd)) || (errno != EINVAL)) {
+               printf("knet_handle_get_datafd accepted unconfigured channel or returned incorrect error: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       flush_logs(logfds[0], stdout);
+
+       printf("Test knet_handle_get_datafd with valid datafd\n");
+
+       if (knet_handle_enable_sock_notify(knet_h, &private_data, sock_notify) < 0) {
+               printf("knet_handle_enable_sock_notify failed: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+        }
+
+       old_datafd = 0;
+       channel = -1;
+
+       if (knet_handle_add_datafd(knet_h, &old_datafd, &channel) < 0) {
+               printf("knet_handle_add_datafd failed: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       if (knet_handle_get_datafd(knet_h, channel, &datafd) < 0) {
+               printf("knet_handle_get_datafd failed: %s\n", strerror(errno));
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       if (old_datafd != datafd) {
+               printf("knet_handle_get_datafd got incorrect channel\n");
+               knet_handle_free(knet_h);
+               flush_logs(logfds[0], stdout);
+               close_logpipes(logfds);
+               exit(FAIL);
+       }
+
+       flush_logs(logfds[0], stdout);
+
+       knet_handle_free(knet_h);
+       flush_logs(logfds[0], stdout);
+       close_logpipes(logfds);
+}
+
+int main(int argc, char *argv[])
+{
+       need_root();
+
+       test();
+
+       return PASS;
+}