]> git.proxmox.com Git - mirror_frr.git/blob - tests/isisd/test_isis_vertex_queue.c
Merge pull request #2944 from thbtcllt/master
[mirror_frr.git] / tests / isisd / test_isis_vertex_queue.c
1 #include <zebra.h>
2
3 #include "isisd/isis_spf.c"
4
5 struct thread_master *master;
6 int isis_sock_init(struct isis_circuit *circuit);
7 int isis_sock_init(struct isis_circuit *circuit)
8 {
9 return 0;
10 }
11
12 struct zebra_privs_t isisd_privs;
13
14 static struct isis_vertex **vertices;
15 static size_t vertex_count;
16
17 static void setup_test_vertices(void)
18 {
19 struct isis_spftree t = {
20 };
21 struct prefix_pair p = {
22 };
23 uint8_t node_id[7];
24
25 vertices = XMALLOC(MTYPE_TMP, sizeof(*vertices) * 16);
26
27 p.dest.family = AF_INET;
28 p.dest.prefixlen = 24;
29 inet_pton(AF_INET, "192.168.1.0", &p.dest.u.prefix4);
30 vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE);
31 vertices[vertex_count]->d_N = 20;
32 vertex_count++;
33
34 p.dest.family = AF_INET;
35 p.dest.prefixlen = 24;
36 inet_pton(AF_INET, "192.168.2.0", &p.dest.u.prefix4);
37 vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE);
38 vertices[vertex_count]->d_N = 20;
39 vertex_count++;
40
41 memset(node_id, 0, sizeof(node_id));
42 node_id[6] = 1;
43 vertices[vertex_count] = isis_vertex_new(&t, node_id,
44 VTYPE_PSEUDO_TE_IS);
45 vertices[vertex_count]->d_N = 15;
46 vertex_count++;
47
48 memset(node_id, 0, sizeof(node_id));
49 node_id[5] = 2;
50 vertices[vertex_count] = isis_vertex_new(&t, node_id,
51 VTYPE_NONPSEUDO_TE_IS);
52 vertices[vertex_count]->d_N = 15;
53 vertex_count++;
54
55 p.dest.family = AF_INET;
56 p.dest.prefixlen = 24;
57 inet_pton(AF_INET, "192.168.3.0", &p.dest.u.prefix4);
58 vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE);
59 vertices[vertex_count]->d_N = 20;
60 vertex_count++;
61 };
62
63 static 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
71 static 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++) {
82 assert(isis_find_vertex(&q, &vertices[i]->N, vertices[i]->type) == vertices[i]);
83 }
84
85 assert(isis_vertex_queue_pop(&q) == vertices[2]);
86 assert(isis_find_vertex(&q, &vertices[2]->N, vertices[2]->type) == NULL);
87
88 assert(isis_vertex_queue_pop(&q) == vertices[3]);
89 assert(isis_find_vertex(&q, &vertices[3]->N, vertices[3]->type) == NULL);
90
91 assert(isis_vertex_queue_pop(&q) == vertices[0]);
92 assert(isis_find_vertex(&q, &vertices[0]->N, vertices[0]->type) == NULL);
93
94 assert(isis_vertex_queue_pop(&q) == vertices[1]);
95 assert(isis_find_vertex(&q, &vertices[1]->N, vertices[1]->type) == NULL);
96
97 isis_vertex_queue_delete(&q, vertices[4]);
98 assert(isis_find_vertex(&q, &vertices[4]->N, vertices[4]->type) == NULL);
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
106 int main(int argc, char **argv)
107 {
108 setup_test_vertices();
109 test_ordered();
110 cleanup_test_vertices();
111
112 return 0;
113 }