]>
Commit | Line | Data |
---|---|---|
1 | // SPDX-License-Identifier: GPL-2.0-or-later | |
2 | /* | |
3 | * Label Manager tests. | |
4 | * Copyright (C) 2020 Volta Networks | |
5 | * Patrick Ruddy | |
6 | */ | |
7 | ||
8 | ||
9 | #include <zebra.h> | |
10 | #include "zebra/zapi_msg.h" | |
11 | #include "zebra/label_manager.h" | |
12 | ||
13 | /* shim out unused functions/variables to allow the lablemanager to compile*/ | |
14 | DEFINE_KOOH(zserv_client_close, (struct zserv * client), (client)); | |
15 | unsigned long zebra_debug_packet = 0; | |
16 | struct zserv *zserv_find_client_session(uint8_t proto, unsigned short instance, | |
17 | uint32_t session_id) | |
18 | { | |
19 | return NULL; | |
20 | } | |
21 | ||
22 | int zsend_label_manager_connect_response(struct zserv *client, vrf_id_t vrf_id, | |
23 | unsigned short result) | |
24 | { | |
25 | return 0; | |
26 | } | |
27 | ||
28 | int zsend_assign_label_chunk_response(struct zserv *client, vrf_id_t vrf_id, | |
29 | struct label_manager_chunk *lmc) | |
30 | { | |
31 | return 0; | |
32 | } | |
33 | ||
34 | ||
35 | static int test_client_connect(struct zserv *client, vrf_id_t vrf_id) | |
36 | { | |
37 | return 0; | |
38 | } | |
39 | ||
40 | static int test_client_disconnect(struct zserv *client) | |
41 | { | |
42 | return 0; | |
43 | } | |
44 | ||
45 | /* external test hook functions */ | |
46 | static int lm_get_chunk_pi(struct label_manager_chunk **lmc, | |
47 | struct zserv *client, uint8_t keep, uint32_t size, | |
48 | uint32_t base, vrf_id_t vrf_id) | |
49 | { | |
50 | if (base == 0) | |
51 | *lmc = create_label_chunk(10, 55, 0, 1, 50, 50 + size); | |
52 | else | |
53 | *lmc = assign_label_chunk(10, 55, 0, 1, size, base); | |
54 | ||
55 | return 0; | |
56 | } | |
57 | ||
58 | static int lm_release_chunk_pi(struct zserv *client, uint32_t start, | |
59 | uint32_t end) | |
60 | { | |
61 | return release_label_chunk(client->proto, client->instance, | |
62 | client->session_id, start, end); | |
63 | } | |
64 | ||
65 | ||
66 | /* use external allocations */ | |
67 | static void lp_plugin_init(void) | |
68 | { | |
69 | /* register our own hooks */ | |
70 | hook_register(lm_client_connect, test_client_connect); | |
71 | hook_register(lm_client_disconnect, test_client_disconnect); | |
72 | hook_register(lm_get_chunk, lm_get_chunk_pi); | |
73 | hook_register(lm_release_chunk, lm_release_chunk_pi); | |
74 | } | |
75 | ||
76 | static void lp_plugin_cleanup(void) | |
77 | { | |
78 | /* register our own hooks */ | |
79 | hook_unregister(lm_client_connect, test_client_connect); | |
80 | hook_unregister(lm_client_disconnect, test_client_disconnect); | |
81 | hook_unregister(lm_get_chunk, lm_get_chunk_pi); | |
82 | hook_unregister(lm_release_chunk, lm_release_chunk_pi); | |
83 | } | |
84 | ||
85 | ||
86 | /* tests */ | |
87 | ||
88 | static void test_lp_plugin(void) | |
89 | { | |
90 | struct label_manager_chunk *lmc; | |
91 | ||
92 | lmc = assign_label_chunk(10, 55, 0, 1, 50, 0); | |
93 | fprintf(stdout, | |
94 | "chunk: start %u end %u proto %u instance %u session %u keep %s\n", | |
95 | lmc->start, lmc->end, lmc->proto, lmc->instance, | |
96 | lmc->session_id, lmc->keep ? "yes" : "no"); | |
97 | delete_label_chunk(lmc); | |
98 | ||
99 | lmc = assign_label_chunk(10, 55, 0, 1, 50, 100); | |
100 | fprintf(stdout, | |
101 | "chunk: start %u end %u proto %u instance %u session %u keep %s\n", | |
102 | lmc->start, lmc->end, lmc->proto, lmc->instance, | |
103 | lmc->session_id, lmc->keep ? "yes" : "no"); | |
104 | release_label_chunk(10, 55, 0, lmc->start, lmc->end); | |
105 | } | |
106 | ||
107 | int main(int argc, char **argv) | |
108 | { | |
109 | /* set up label manager and release it's hooks */ | |
110 | label_manager_init(); | |
111 | lm_hooks_unregister(); | |
112 | ||
113 | /* test plugin */ | |
114 | lp_plugin_init(); | |
115 | test_lp_plugin(); | |
116 | lp_plugin_cleanup(); | |
117 | ||
118 | /* this keeps the compiler happy */ | |
119 | hook_call(zserv_client_close, NULL); | |
120 | return 0; | |
121 | } |