]> git.puffer.fish Git - matthieu/frr.git/commitdiff
tests: verify isis_vertex_queue correctness
authorChristian Franke <chris@opensourcerouting.org>
Fri, 22 Sep 2017 18:51:40 +0000 (20:51 +0200)
committerChristian Franke <chris@opensourcerouting.org>
Fri, 22 Sep 2017 19:19:34 +0000 (21:19 +0200)
Signed-off-by: Christian Franke <chris@opensourcerouting.org>
tests/.gitignore
tests/Makefile.am
tests/isisd/test_isis_vertex_queue.c [new file with mode: 0644]
tests/isisd/test_isis_vertex_queue.py [new file with mode: 0644]

index 41349cce24b7fd93d506b4b5ab2567cf99680b14..ab1d55b548a3021f1bd8f9951c6b49601a165d61 100644 (file)
@@ -26,6 +26,7 @@ __pycache__
 /bgpd/test_mpath
 /isisd/test_fuzz_isis_tlv
 /isisd/test_fuzz_isis_tlv_tests.h
+/isisd/test_isis_vertex_queue
 /lib/cli/test_cli
 /lib/cli/test_commands
 /lib/cli/test_commands_defun.c
index 1c0e9ee732abb50fc0ec4de5ba33f86b811ec235..fafdd73bf375b145586d5a09cec21f33504bc2f3 100644 (file)
@@ -29,7 +29,9 @@ if SOLARIS
 TESTS_ISISD =
 else
 TESTS_ISISD = \
-       isisd/test_fuzz_isis_tlv
+       isisd/test_fuzz_isis_tlv \
+       isisd/test_isis_vertex_queue \
+       # end
 endif
 else
 TESTS_ISISD =
@@ -135,6 +137,7 @@ bgpd_test_mp_attr_SOURCES = bgpd/test_mp_attr.c
 bgpd_test_mpath_SOURCES = bgpd/test_mpath.c
 isisd_test_fuzz_isis_tlv_SOURCES = isisd/test_fuzz_isis_tlv.c
 isisd_test_fuzz_isis_tlv_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_builddir)/tests/isisd
+isisd_test_isis_vertex_queue_SOURCES = isisd/test_isis_vertex_queue.c
 
 ospf6d_test_lsdb_SOURCES = ospf6d/test_lsdb.c lib/cli/common_cli.c
 
@@ -168,6 +171,7 @@ bgpd_test_ecommunity_LDADD = $(BGP_TEST_LDADD)
 bgpd_test_mp_attr_LDADD = $(BGP_TEST_LDADD)
 bgpd_test_mpath_LDADD = $(BGP_TEST_LDADD)
 isisd_test_fuzz_isis_tlv_LDADD = $(ISISD_TEST_LDADD)
+isisd_test_isis_vertex_queue_LDADD = $(ISISD_TEST_LDADD)
 ospf6d_test_lsdb_LDADD = $(OSPF6_TEST_LDADD)
 
 EXTRA_DIST = \
@@ -181,6 +185,7 @@ EXTRA_DIST = \
     helpers/python/frrtest.py \
     isisd/test_fuzz_isis_tlv.py \
     isisd/test_fuzz_isis_tlv_tests.h.gz \
+    isisd/test_isis_vertex_queue.py \
     lib/cli/test_commands.in \
     lib/cli/test_commands.py \
     lib/cli/test_commands.refout \
diff --git a/tests/isisd/test_isis_vertex_queue.c b/tests/isisd/test_isis_vertex_queue.c
new file mode 100644 (file)
index 0000000..5043638
--- /dev/null
@@ -0,0 +1,108 @@
+#include <zebra.h>
+
+#include "isisd/isis_spf.c"
+
+struct thread_master *master;
+int isis_sock_init(struct isis_circuit *circuit);
+int isis_sock_init(struct isis_circuit *circuit)
+{
+       return 0;
+}
+
+static struct isis_vertex **vertices;
+static size_t vertex_count;
+
+static void setup_test_vertices(void)
+{
+       struct prefix p = {
+               .family = AF_UNSPEC
+       };
+       uint8_t node_id[7];
+
+       vertices = XMALLOC(MTYPE_TMP, sizeof(*vertices) * 16);
+
+       p.family = AF_INET;
+       p.prefixlen = 24;
+       inet_pton(AF_INET, "192.168.1.0", &p.u.prefix4);
+       vertices[vertex_count] = isis_vertex_new(&p, VTYPE_IPREACH_TE);
+       vertices[vertex_count]->d_N = 20;
+       vertex_count++;
+
+       p.family = AF_INET;
+       p.prefixlen = 24;
+       inet_pton(AF_INET, "192.168.2.0", &p.u.prefix4);
+       vertices[vertex_count] = isis_vertex_new(&p, VTYPE_IPREACH_TE);
+       vertices[vertex_count]->d_N = 20;
+       vertex_count++;
+
+       memset(node_id, 0, sizeof(node_id));
+       node_id[6] = 1;
+       vertices[vertex_count] = isis_vertex_new(node_id, VTYPE_PSEUDO_TE_IS);
+       vertices[vertex_count]->d_N = 15;
+       vertex_count++;
+
+       memset(node_id, 0, sizeof(node_id));
+       node_id[5] = 2;
+       vertices[vertex_count] = isis_vertex_new(node_id, VTYPE_NONPSEUDO_TE_IS);
+       vertices[vertex_count]->d_N = 15;
+       vertex_count++;
+
+       p.family = AF_INET;
+       p.prefixlen = 24;
+       inet_pton(AF_INET, "192.168.3.0", &p.u.prefix4);
+       vertices[vertex_count] = isis_vertex_new(&p, VTYPE_IPREACH_TE);
+       vertices[vertex_count]->d_N = 20;
+       vertex_count++;
+};
+
+static void cleanup_test_vertices(void)
+{
+       for (size_t i = 0; i < vertex_count; i++)
+               isis_vertex_del(vertices[i]);
+       XFREE(MTYPE_TMP, vertices);
+       vertex_count = 0;
+}
+
+static void test_ordered(void)
+{
+       struct isis_vertex_queue q;
+
+       isis_vertex_queue_init(&q, NULL, true);
+       for (size_t i = 0; i < vertex_count; i++)
+               isis_vertex_queue_insert(&q, vertices[i]);
+
+       assert(isis_vertex_queue_count(&q) == vertex_count);
+
+       for (size_t i = 0; i < vertex_count; i++) {
+               assert(isis_find_vertex(&q, vertices[i]->N.id, vertices[i]->type) == vertices[i]);
+       }
+
+       assert(isis_vertex_queue_pop(&q) == vertices[2]);
+       assert(isis_find_vertex(&q, vertices[2]->N.id, vertices[2]->type) == NULL);
+
+       assert(isis_vertex_queue_pop(&q) == vertices[3]);
+       assert(isis_find_vertex(&q, vertices[3]->N.id, vertices[3]->type) == NULL);
+
+       assert(isis_vertex_queue_pop(&q) == vertices[0]);
+       assert(isis_find_vertex(&q, vertices[0]->N.id, vertices[0]->type) == NULL);
+
+       assert(isis_vertex_queue_pop(&q) == vertices[1]);
+       assert(isis_find_vertex(&q, vertices[1]->N.id, vertices[1]->type) == NULL);
+
+       assert(isis_vertex_queue_pop(&q) == vertices[4]);
+       assert(isis_find_vertex(&q, vertices[4]->N.id, vertices[4]->type) == NULL);
+
+       assert(isis_vertex_queue_count(&q) == 0);
+       assert(isis_vertex_queue_pop(&q) == NULL);
+
+       isis_vertex_queue_free(&q);
+}
+
+int main(int argc, char **argv)
+{
+       setup_test_vertices();
+       test_ordered();
+       cleanup_test_vertices();
+
+       return 0;
+}
diff --git a/tests/isisd/test_isis_vertex_queue.py b/tests/isisd/test_isis_vertex_queue.py
new file mode 100644 (file)
index 0000000..5974ede
--- /dev/null
@@ -0,0 +1,6 @@
+import frrtest
+
+class TestIsisVertexQueue(frrtest.TestMultiOut):
+    program = './test_isis_vertex_queue'
+
+TestIsisVertexQueue.exit_cleanly()