]>
Commit | Line | Data |
---|---|---|
5d30de83 CF |
1 | #include <zebra.h> |
2 | ||
3 | #include "isisd/isis_spf.c" | |
4 | ||
52a7c25e | 5 | #include "test_common.h" |
76e292f9 | 6 | |
5d30de83 CF |
7 | static struct isis_vertex **vertices; |
8 | static size_t vertex_count; | |
9 | ||
10 | static void setup_test_vertices(void) | |
11 | { | |
686afe9f CF |
12 | struct isis_spftree t = { |
13 | }; | |
f6ae63ca | 14 | struct prefix_pair p = { |
5d30de83 | 15 | }; |
f6ae63ca | 16 | uint8_t node_id[7]; |
5d30de83 CF |
17 | |
18 | vertices = XMALLOC(MTYPE_TMP, sizeof(*vertices) * 16); | |
19 | ||
f6ae63ca CF |
20 | p.dest.family = AF_INET; |
21 | p.dest.prefixlen = 24; | |
22 | inet_pton(AF_INET, "192.168.1.0", &p.dest.u.prefix4); | |
23 | vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE); | |
5d30de83 CF |
24 | vertices[vertex_count]->d_N = 20; |
25 | vertex_count++; | |
26 | ||
f6ae63ca CF |
27 | p.dest.family = AF_INET; |
28 | p.dest.prefixlen = 24; | |
29 | inet_pton(AF_INET, "192.168.2.0", &p.dest.u.prefix4); | |
30 | vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE); | |
5d30de83 CF |
31 | vertices[vertex_count]->d_N = 20; |
32 | vertex_count++; | |
33 | ||
f6ae63ca CF |
34 | memset(node_id, 0, sizeof(node_id)); |
35 | node_id[6] = 1; | |
36 | vertices[vertex_count] = isis_vertex_new(&t, node_id, | |
686afe9f | 37 | VTYPE_PSEUDO_TE_IS); |
5d30de83 CF |
38 | vertices[vertex_count]->d_N = 15; |
39 | vertex_count++; | |
40 | ||
f6ae63ca CF |
41 | memset(node_id, 0, sizeof(node_id)); |
42 | node_id[5] = 2; | |
43 | vertices[vertex_count] = isis_vertex_new(&t, node_id, | |
686afe9f | 44 | VTYPE_NONPSEUDO_TE_IS); |
5d30de83 CF |
45 | vertices[vertex_count]->d_N = 15; |
46 | vertex_count++; | |
47 | ||
f6ae63ca CF |
48 | p.dest.family = AF_INET; |
49 | p.dest.prefixlen = 24; | |
50 | inet_pton(AF_INET, "192.168.3.0", &p.dest.u.prefix4); | |
51 | vertices[vertex_count] = isis_vertex_new(&t, &p, VTYPE_IPREACH_TE); | |
5d30de83 CF |
52 | vertices[vertex_count]->d_N = 20; |
53 | vertex_count++; | |
54 | }; | |
55 | ||
56 | static void cleanup_test_vertices(void) | |
57 | { | |
58 | for (size_t i = 0; i < vertex_count; i++) | |
59 | isis_vertex_del(vertices[i]); | |
60 | XFREE(MTYPE_TMP, vertices); | |
61 | vertex_count = 0; | |
62 | } | |
63 | ||
64 | static void test_ordered(void) | |
65 | { | |
66 | struct isis_vertex_queue q; | |
67 | ||
68 | isis_vertex_queue_init(&q, NULL, true); | |
69 | for (size_t i = 0; i < vertex_count; i++) | |
70 | isis_vertex_queue_insert(&q, vertices[i]); | |
71 | ||
72 | assert(isis_vertex_queue_count(&q) == vertex_count); | |
73 | ||
74 | for (size_t i = 0; i < vertex_count; i++) { | |
a2ddc2a6 | 75 | assert(isis_find_vertex(&q, &vertices[i]->N, vertices[i]->type) == vertices[i]); |
5d30de83 CF |
76 | } |
77 | ||
78 | assert(isis_vertex_queue_pop(&q) == vertices[2]); | |
a2ddc2a6 | 79 | assert(isis_find_vertex(&q, &vertices[2]->N, vertices[2]->type) == NULL); |
5d30de83 CF |
80 | |
81 | assert(isis_vertex_queue_pop(&q) == vertices[3]); | |
a2ddc2a6 | 82 | assert(isis_find_vertex(&q, &vertices[3]->N, vertices[3]->type) == NULL); |
5d30de83 CF |
83 | |
84 | assert(isis_vertex_queue_pop(&q) == vertices[0]); | |
a2ddc2a6 | 85 | assert(isis_find_vertex(&q, &vertices[0]->N, vertices[0]->type) == NULL); |
5d30de83 CF |
86 | |
87 | assert(isis_vertex_queue_pop(&q) == vertices[1]); | |
a2ddc2a6 | 88 | assert(isis_find_vertex(&q, &vertices[1]->N, vertices[1]->type) == NULL); |
5d30de83 | 89 | |
60d39142 | 90 | isis_vertex_queue_delete(&q, vertices[4]); |
a2ddc2a6 | 91 | assert(isis_find_vertex(&q, &vertices[4]->N, vertices[4]->type) == NULL); |
5d30de83 CF |
92 | |
93 | assert(isis_vertex_queue_count(&q) == 0); | |
94 | assert(isis_vertex_queue_pop(&q) == NULL); | |
95 | ||
96 | isis_vertex_queue_free(&q); | |
97 | } | |
98 | ||
99 | int main(int argc, char **argv) | |
100 | { | |
101 | setup_test_vertices(); | |
102 | test_ordered(); | |
103 | cleanup_test_vertices(); | |
104 | ||
105 | return 0; | |
106 | } |