summaryrefslogtreecommitdiff
path: root/src/test-api.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/test-api.c')
-rw-r--r--src/test-api.c83
1 files changed, 83 insertions, 0 deletions
diff --git a/src/test-api.c b/src/test-api.c
new file mode 100644
index 0000000000..fde722782a
--- /dev/null
+++ b/src/test-api.c
@@ -0,0 +1,83 @@
+/*
+ * Tests for n-acd API
+ * This verifies the visibility and availability of the public API of the
+ * n-acd library.
+ */
+
+#include <stdlib.h>
+#include "test.h"
+
+static void test_api_constants(void) {
+ assert(N_ACD_DEFEND_NEVER != _N_ACD_DEFEND_N);
+ assert(N_ACD_DEFEND_ONCE != _N_ACD_DEFEND_N);
+ assert(N_ACD_DEFEND_ALWAYS != _N_ACD_DEFEND_N);
+
+ assert(N_ACD_EVENT_READY != _N_ACD_EVENT_N);
+ assert(N_ACD_EVENT_USED != _N_ACD_EVENT_N);
+ assert(N_ACD_EVENT_DEFENDED != _N_ACD_EVENT_N);
+ assert(N_ACD_EVENT_CONFLICT != _N_ACD_EVENT_N);
+ assert(N_ACD_EVENT_DOWN != _N_ACD_EVENT_N);
+}
+
+static void test_api_management(void) {
+ NAcd *acd = NULL;
+ int r;
+
+ /* new/free/freep */
+
+ n_acd_freep(&acd);
+
+ r = n_acd_new(&acd);
+ assert(!r);
+
+ n_acd_free(acd);
+}
+
+static void test_api_runtime(void) {
+ uint8_t mac[6] = { 0xfe, 0xdc, 0xba, 0x98, 0x76, 0x54 };
+ NAcdConfig config = {
+ .ifindex = 1,
+ .mac = mac,
+ .n_mac = sizeof(mac),
+ .ip = { htobe32((127 << 24) | (1 << 0)) },
+ .timeout_msec = 100,
+ };
+ NAcd *acd;
+ int r;
+
+ /* get_fd/dispatch/pop_event/start/stop/announce */
+
+ r = n_acd_new(&acd);
+ assert(!r);
+
+ n_acd_get_fd(acd, &r);
+ assert(r >= 0);
+ r = n_acd_dispatch(acd);
+ assert(!r);
+ r = n_acd_pop_event(acd, NULL);
+ assert(r == N_ACD_E_STOPPED);
+ r = n_acd_start(acd, &config);
+ assert(!r);
+ r = n_acd_start(acd, &config);
+ assert(r == N_ACD_E_BUSY);
+ r = n_acd_pop_event(acd, NULL);
+ assert(r == N_ACD_E_DONE);
+ n_acd_stop(acd);
+ r = n_acd_announce(acd, N_ACD_DEFEND_NEVER);
+ assert(r == N_ACD_E_BUSY);
+
+ n_acd_free(acd);
+}
+
+int main(int argc, char **argv) {
+ int r;
+
+ r = test_setup();
+ if (r)
+ return r;
+
+ test_api_constants();
+ test_api_management();
+ test_api_runtime();
+ return 0;
+}