]>
Commit | Line | Data |
---|---|---|
5d30de83 CF |
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 | ||
76e292f9 DS |
12 | struct zebra_privs_t isisd_privs; |
13 | ||
5d30de83 CF |
14 | static struct isis_vertex **vertices; |
15 | static size_t vertex_count; | |
16 | ||
17 | static 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 | ||
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++) { | |
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 | ||
106 | int main(int argc, char **argv) | |
107 | { | |
108 | setup_test_vertices(); | |
109 | test_ordered(); | |
110 | cleanup_test_vertices(); | |
111 | ||
112 | return 0; | |
113 | } |