summaryrefslogtreecommitdiffstats
path: root/tests/zebra
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-09 13:16:35 +0000
commite2bbf175a2184bd76f6c54ccf8456babeb1a46fc (patch)
treef0b76550d6e6f500ada964a3a4ee933a45e5a6f1 /tests/zebra
parentInitial commit. (diff)
downloadfrr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.tar.xz
frr-e2bbf175a2184bd76f6c54ccf8456babeb1a46fc.zip
Adding upstream version 9.1.upstream/9.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/zebra')
-rw-r--r--tests/zebra/subdir.am17
-rw-r--r--tests/zebra/test_lm_plugin.c121
-rw-r--r--tests/zebra/test_lm_plugin.py5
-rw-r--r--tests/zebra/test_lm_plugin.refout2
4 files changed, 145 insertions, 0 deletions
diff --git a/tests/zebra/subdir.am b/tests/zebra/subdir.am
new file mode 100644
index 0000000..d9fcde8
--- /dev/null
+++ b/tests/zebra/subdir.am
@@ -0,0 +1,17 @@
+if !ZEBRA
+PYTEST_IGNORE += --ignore=zebra/
+endif
+ZEBRA_TEST_LDADD = zebra/label_manager.o $(ALL_TESTS_LDADD)
+
+
+if ZEBRA
+check_PROGRAMS += tests/zebra/test_lm_plugin
+endif
+tests_zebra_test_lm_plugin_CFLAGS = $(TESTS_CFLAGS)
+tests_zebra_test_lm_plugin_CPPFLAGS = $(TESTS_CPPFLAGS)
+tests_zebra_test_lm_plugin_LDADD = $(ZEBRA_TEST_LDADD)
+tests_zebra_test_lm_plugin_SOURCES = tests/zebra/test_lm_plugin.c
+EXTRA_DIST += \
+ tests/zebra/test_lm_plugin.py \
+ tests/zebra/test_lm_plugin.refout \
+ # end
diff --git a/tests/zebra/test_lm_plugin.c b/tests/zebra/test_lm_plugin.c
new file mode 100644
index 0000000..9ad0bc4
--- /dev/null
+++ b/tests/zebra/test_lm_plugin.c
@@ -0,0 +1,121 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Label Manager tests.
+ * Copyright (C) 2020 Volta Networks
+ * Patrick Ruddy
+ */
+
+
+#include <zebra.h>
+#include "zebra/zapi_msg.h"
+#include "zebra/label_manager.h"
+
+/* shim out unused functions/variables to allow the lablemanager to compile*/
+DEFINE_KOOH(zserv_client_close, (struct zserv * client), (client));
+unsigned long zebra_debug_packet = 0;
+struct zserv *zserv_find_client_session(uint8_t proto, unsigned short instance,
+ uint32_t session_id)
+{
+ return NULL;
+}
+
+int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id,
+ unsigned short result)
+{
+ return 0;
+}
+
+int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id,
+ struct label_manager_chunk *lmc)
+{
+ return 0;
+}
+
+
+static int test_client_connect(struct zserv *client, vrf_id_t vrf_id)
+{
+ return 0;
+}
+
+static int test_client_disconnect(struct zserv *client)
+{
+ return 0;
+}
+
+/* external test hook functions */
+static int lm_get_chunk_pi(struct label_manager_chunk **lmc,
+ struct zserv *client, uint8_t keep, uint32_t size,
+ uint32_t base, vrf_id_t vrf_id)
+{
+ if (base == 0)
+ *lmc = create_label_chunk(10, 55, 0, 1, 50, 50 + size);
+ else
+ *lmc = assign_label_chunk(10, 55, 0, 1, size, base);
+
+ return 0;
+}
+
+static int lm_release_chunk_pi(struct zserv *client, uint32_t start,
+ uint32_t end)
+{
+ return release_label_chunk(client->proto, client->instance,
+ client->session_id, start, end);
+}
+
+
+/* use external allocations */
+static void lp_plugin_init(void)
+{
+ /* register our own hooks */
+ hook_register(lm_client_connect, test_client_connect);
+ hook_register(lm_client_disconnect, test_client_disconnect);
+ hook_register(lm_get_chunk, lm_get_chunk_pi);
+ hook_register(lm_release_chunk, lm_release_chunk_pi);
+}
+
+static void lp_plugin_cleanup(void)
+{
+ /* register our own hooks */
+ hook_unregister(lm_client_connect, test_client_connect);
+ hook_unregister(lm_client_disconnect, test_client_disconnect);
+ hook_unregister(lm_get_chunk, lm_get_chunk_pi);
+ hook_unregister(lm_release_chunk, lm_release_chunk_pi);
+}
+
+
+/* tests */
+
+static void test_lp_plugin(void)
+{
+ struct label_manager_chunk *lmc;
+
+ lmc = assign_label_chunk(10, 55, 0, 1, 50, 0);
+ fprintf(stdout,
+ "chunk: start %u end %u proto %u instance %u session %u keep %s\n",
+ lmc->start, lmc->end, lmc->proto, lmc->instance,
+ lmc->session_id, lmc->keep ? "yes" : "no");
+ delete_label_chunk(lmc);
+
+ lmc = assign_label_chunk(10, 55, 0, 1, 50, 100);
+ fprintf(stdout,
+ "chunk: start %u end %u proto %u instance %u session %u keep %s\n",
+ lmc->start, lmc->end, lmc->proto, lmc->instance,
+ lmc->session_id, lmc->keep ? "yes" : "no");
+ release_label_chunk(10, 55, 0, lmc->start, lmc->end);
+}
+
+int main(int argc, char **argv)
+{
+ /* set up label manager and release it's hooks */
+ label_manager_init();
+ lm_hooks_unregister();
+
+ /* test plugin */
+ lp_plugin_init();
+ test_lp_plugin();
+ lp_plugin_cleanup();
+
+ /* this keeps the compiler happy */
+ hook_call(zserv_client_close, NULL);
+ return 0;
+}
diff --git a/tests/zebra/test_lm_plugin.py b/tests/zebra/test_lm_plugin.py
new file mode 100644
index 0000000..bf4f3ce
--- /dev/null
+++ b/tests/zebra/test_lm_plugin.py
@@ -0,0 +1,5 @@
+import frrtest
+
+
+class TestLmplugin(frrtest.TestRefOut):
+ program = "./test_lm_plugin"
diff --git a/tests/zebra/test_lm_plugin.refout b/tests/zebra/test_lm_plugin.refout
new file mode 100644
index 0000000..35824f1
--- /dev/null
+++ b/tests/zebra/test_lm_plugin.refout
@@ -0,0 +1,2 @@
+chunk: start 16 end 65 proto 10 instance 55 session 0 keep yes
+chunk: start 100 end 149 proto 10 instance 55 session 0 keep yes