]> git.proxmox.com Git - mirror_frr.git/blame - tests/isisd/test_isis_vertex_queue.c
fabricd: add support for completely unnumbered operation
[mirror_frr.git] / tests / isisd / test_isis_vertex_queue.c
CommitLineData
5d30de83
CF
1#include <zebra.h>
2
3#include "isisd/isis_spf.c"
4
5struct thread_master *master;
6int isis_sock_init(struct isis_circuit *circuit);
7int isis_sock_init(struct isis_circuit *circuit)
8{
9 return 0;
10}
11
76e292f9
DS
12struct zebra_privs_t isisd_privs;
13
5d30de83
CF
14static struct isis_vertex **vertices;
15static size_t vertex_count;
16
17static void setup_test_vertices(void)
18{
686afe9f
CF
19 struct isis_spftree t = {
20 };
a2ddc2a6 21 union isis_N nid, nip = {
321c1bbb 22 .ip.dest.family = AF_UNSPEC
5d30de83 23 };
5d30de83
CF
24
25 vertices = XMALLOC(MTYPE_TMP, sizeof(*vertices) * 16);
26
321c1bbb
CF
27 nip.ip.dest.family = AF_INET;
28 nip.ip.dest.prefixlen = 24;
29 inet_pton(AF_INET, "192.168.1.0", &nip.ip.dest.u.prefix4);
686afe9f 30 vertices[vertex_count] = isis_vertex_new(&t, &nip, VTYPE_IPREACH_TE);
5d30de83
CF
31 vertices[vertex_count]->d_N = 20;
32 vertex_count++;
33
321c1bbb
CF
34 nip.ip.dest.family = AF_INET;
35 nip.ip.dest.prefixlen = 24;
36 inet_pton(AF_INET, "192.168.2.0", &nip.ip.dest.u.prefix4);
686afe9f 37 vertices[vertex_count] = isis_vertex_new(&t, &nip, VTYPE_IPREACH_TE);
5d30de83
CF
38 vertices[vertex_count]->d_N = 20;
39 vertex_count++;
40
a2ddc2a6
A
41 memset(nid.id, 0, sizeof(nid.id));
42 nid.id[6] = 1;
686afe9f
CF
43 vertices[vertex_count] = isis_vertex_new(&t, &nid,
44 VTYPE_PSEUDO_TE_IS);
5d30de83
CF
45 vertices[vertex_count]->d_N = 15;
46 vertex_count++;
47
a2ddc2a6
A
48 memset(nid.id, 0, sizeof(nid.id));
49 nid.id[5] = 2;
686afe9f
CF
50 vertices[vertex_count] = isis_vertex_new(&t, &nid,
51 VTYPE_NONPSEUDO_TE_IS);
5d30de83
CF
52 vertices[vertex_count]->d_N = 15;
53 vertex_count++;
54
321c1bbb
CF
55 nip.ip.dest.family = AF_INET;
56 nip.ip.dest.prefixlen = 24;
57 inet_pton(AF_INET, "192.168.3.0", &nip.ip.dest.u.prefix4);
686afe9f 58 vertices[vertex_count] = isis_vertex_new(&t, &nip, VTYPE_IPREACH_TE);
5d30de83
CF
59 vertices[vertex_count]->d_N = 20;
60 vertex_count++;
61};
62
63static void cleanup_test_vertices(void)
64{
65 for (size_t i = 0; i < vertex_count; i++)
66 isis_vertex_del(vertices[i]);
67 XFREE(MTYPE_TMP, vertices);
68 vertex_count = 0;
69}
70
71static void test_ordered(void)
72{
73 struct isis_vertex_queue q;
74
75 isis_vertex_queue_init(&q, NULL, true);
76 for (size_t i = 0; i < vertex_count; i++)
77 isis_vertex_queue_insert(&q, vertices[i]);
78
79 assert(isis_vertex_queue_count(&q) == vertex_count);
80
81 for (size_t i = 0; i < vertex_count; i++) {
a2ddc2a6 82 assert(isis_find_vertex(&q, &vertices[i]->N, vertices[i]->type) == vertices[i]);
5d30de83
CF
83 }
84
85 assert(isis_vertex_queue_pop(&q) == vertices[2]);
a2ddc2a6 86 assert(isis_find_vertex(&q, &vertices[2]->N, vertices[2]->type) == NULL);
5d30de83
CF
87
88 assert(isis_vertex_queue_pop(&q) == vertices[3]);
a2ddc2a6 89 assert(isis_find_vertex(&q, &vertices[3]->N, vertices[3]->type) == NULL);
5d30de83
CF
90
91 assert(isis_vertex_queue_pop(&q) == vertices[0]);
a2ddc2a6 92 assert(isis_find_vertex(&q, &vertices[0]->N, vertices[0]->type) == NULL);
5d30de83
CF
93
94 assert(isis_vertex_queue_pop(&q) == vertices[1]);
a2ddc2a6 95 assert(isis_find_vertex(&q, &vertices[1]->N, vertices[1]->type) == NULL);
5d30de83 96
60d39142 97 isis_vertex_queue_delete(&q, vertices[4]);
a2ddc2a6 98 assert(isis_find_vertex(&q, &vertices[4]->N, vertices[4]->type) == NULL);
5d30de83
CF
99
100 assert(isis_vertex_queue_count(&q) == 0);
101 assert(isis_vertex_queue_pop(&q) == NULL);
102
103 isis_vertex_queue_free(&q);
104}
105
106int main(int argc, char **argv)
107{
108 setup_test_vertices();
109 test_ordered();
110 cleanup_test_vertices();
111
112 return 0;
113}