From 5d30de83e1e9f1b7bc054636a0c7b76a8fb60269 Mon Sep 17 00:00:00 2001 From: Christian Franke Date: Fri, 22 Sep 2017 20:51:40 +0200 Subject: [PATCH] tests: verify isis_vertex_queue correctness Signed-off-by: Christian Franke --- tests/.gitignore | 1 + tests/Makefile.am | 7 +- tests/isisd/test_isis_vertex_queue.c | 108 ++++++++++++++++++++++++++ tests/isisd/test_isis_vertex_queue.py | 6 ++ 4 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 tests/isisd/test_isis_vertex_queue.c create mode 100644 tests/isisd/test_isis_vertex_queue.py diff --git a/tests/.gitignore b/tests/.gitignore index 41349cce2..ab1d55b54 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -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 diff --git a/tests/Makefile.am b/tests/Makefile.am index 1c0e9ee73..fafdd73bf 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -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 index 000000000..50436387b --- /dev/null +++ b/tests/isisd/test_isis_vertex_queue.c @@ -0,0 +1,108 @@ +#include + +#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 index 000000000..5974edecc --- /dev/null +++ b/tests/isisd/test_isis_vertex_queue.py @@ -0,0 +1,6 @@ +import frrtest + +class TestIsisVertexQueue(frrtest.TestMultiOut): + program = './test_isis_vertex_queue' + +TestIsisVertexQueue.exit_cleanly() -- 2.39.5