]> git.proxmox.com Git - mirror_frr.git/blame - pceplib/test/pcep_utils_counters_test.c
Merge pull request #8536 from idryzhov/bfd-enabled
[mirror_frr.git] / pceplib / test / pcep_utils_counters_test.c
CommitLineData
74971473
JG
1/*
2 * This file is part of the PCEPlib, a PCEP protocol library.
3 *
4 * Copyright (C) 2020 Volta Networks https://voltanet.io/
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public License
17 * along with this program. If not, see <https://www.gnu.org/licenses/>.
18 *
19 * Author : Brady Johnson <brady@voltanet.io>
20 *
21 */
22
23
24#include <stdlib.h>
25
26#include <CUnit/CUnit.h>
27
28#include "pcep_utils_counters.h"
29#include "pcep_utils_counters_test.h"
30
31
32void test_create_counters_group()
33{
34 const char group_name[] = "group";
35 uint16_t num_subgroups = 10;
36
37 struct counters_group *group =
38 create_counters_group(NULL, num_subgroups);
39 CU_ASSERT_PTR_NULL(group);
40
41 group = create_counters_group(group_name, MAX_COUNTER_GROUPS + 1);
42 CU_ASSERT_PTR_NULL(group);
43
44 group = create_counters_group(group_name, num_subgroups);
45 CU_ASSERT_PTR_NOT_NULL(group);
46
47 CU_ASSERT_EQUAL(group->num_subgroups, 0);
48 CU_ASSERT_EQUAL(group->max_subgroups, num_subgroups);
49 CU_ASSERT_EQUAL(strcmp(group->counters_group_name, group_name), 0);
50
51 delete_counters_group(group);
52}
53
54void test_create_counters_subgroup()
55{
56 const char subgroup_name[] = "subgroup";
57 uint16_t subgroup_id = 10;
58 uint16_t num_counters = 20;
59
60 struct counters_subgroup *subgroup =
61 create_counters_subgroup(NULL, subgroup_id, num_counters);
62 CU_ASSERT_PTR_NULL(subgroup);
63
64 subgroup = create_counters_subgroup(
65 subgroup_name, MAX_COUNTER_GROUPS + 1, num_counters);
66 CU_ASSERT_PTR_NULL(subgroup);
67
68 subgroup = create_counters_subgroup(subgroup_name, subgroup_id,
69 MAX_COUNTERS + 1);
70 CU_ASSERT_PTR_NULL(subgroup);
71
72 subgroup = create_counters_subgroup(subgroup_name, subgroup_id,
73 num_counters);
74 CU_ASSERT_PTR_NOT_NULL(subgroup);
75
76 CU_ASSERT_EQUAL(subgroup->subgroup_id, subgroup_id);
77 CU_ASSERT_EQUAL(subgroup->num_counters, 0);
78 CU_ASSERT_EQUAL(subgroup->max_counters, num_counters);
79 CU_ASSERT_EQUAL(strcmp(subgroup->counters_subgroup_name, subgroup_name),
80 0);
81
82 delete_counters_subgroup(subgroup);
83}
84
85void test_add_counters_subgroup()
86{
87 struct counters_group *group = create_counters_group("group", 1);
88 struct counters_subgroup *subgroup1 =
89 create_counters_subgroup("subgroup", 0, 5);
90 struct counters_subgroup *subgroup2 =
91 create_counters_subgroup("subgroup", 1, 5);
92
93 CU_ASSERT_FALSE(add_counters_subgroup(NULL, NULL));
94 CU_ASSERT_FALSE(add_counters_subgroup(NULL, subgroup1));
95 CU_ASSERT_FALSE(add_counters_subgroup(group, NULL));
96
97 CU_ASSERT_EQUAL(group->num_subgroups, 0);
98 CU_ASSERT_TRUE(add_counters_subgroup(group, subgroup1));
99 CU_ASSERT_EQUAL(group->num_subgroups, 1);
100 /* Cant add more than num_subgroups to the group */
101 CU_ASSERT_FALSE(add_counters_subgroup(group, subgroup2));
102
103 CU_ASSERT_PTR_NOT_NULL(find_subgroup(group, 0));
104 CU_ASSERT_PTR_NULL(find_subgroup(group, 1));
105
106 delete_counters_group(group);
107 delete_counters_subgroup(subgroup2);
108}
109
110void test_create_subgroup_counter()
111{
112 uint16_t counter_id = 1;
113 char counter_name[] = "my counter";
114 struct counters_subgroup *subgroup =
115 create_counters_subgroup("subgroup", 1, 2);
116
117 CU_ASSERT_FALSE(
118 create_subgroup_counter(NULL, counter_id, counter_name));
119 CU_ASSERT_FALSE(create_subgroup_counter(subgroup, counter_id + 1,
120 counter_name));
121 CU_ASSERT_FALSE(create_subgroup_counter(subgroup, counter_id, NULL));
122 CU_ASSERT_EQUAL(subgroup->num_counters, 0);
123 CU_ASSERT_TRUE(
124 create_subgroup_counter(subgroup, counter_id, counter_name));
125 CU_ASSERT_EQUAL(subgroup->num_counters, 1);
126
127 delete_counters_subgroup(subgroup);
128}
129
130void test_delete_counters_group()
131{
132 struct counters_group *group = create_counters_group("group", 1);
133
134 CU_ASSERT_FALSE(delete_counters_group(NULL));
135 CU_ASSERT_TRUE(delete_counters_group(group));
136}
137
138void test_delete_counters_subgroup()
139{
140 struct counters_subgroup *subgroup =
141 create_counters_subgroup("subgroup", 1, 1);
142
143 CU_ASSERT_FALSE(delete_counters_subgroup(NULL));
144 CU_ASSERT_TRUE(delete_counters_subgroup(subgroup));
145}
146
147void test_reset_group_counters()
148{
149 uint16_t subgroup_id = 1;
150 uint16_t counter_id = 1;
151 struct counters_group *group = create_counters_group("group", 10);
152 struct counters_subgroup *subgroup =
153 create_counters_subgroup("subgroup", subgroup_id, 10);
154 create_subgroup_counter(subgroup, counter_id, "counter");
155 add_counters_subgroup(group, subgroup);
156
157 struct counter *counter = subgroup->counters[counter_id];
158 counter->counter_value = 100;
159
160 CU_ASSERT_FALSE(reset_group_counters(NULL));
161 CU_ASSERT_TRUE(reset_group_counters(group));
162 CU_ASSERT_EQUAL(counter->counter_value, 0);
163
164 delete_counters_group(group);
165}
166
167void test_reset_subgroup_counters()
168{
169 uint16_t counter_id = 1;
170 struct counters_subgroup *subgroup =
171 create_counters_subgroup("subgroup", 1, 10);
172 create_subgroup_counter(subgroup, counter_id, "counter");
173
174 struct counter *counter = subgroup->counters[counter_id];
175 counter->counter_value = 100;
176
177 CU_ASSERT_FALSE(reset_subgroup_counters(NULL));
178 CU_ASSERT_TRUE(reset_subgroup_counters(subgroup));
179 CU_ASSERT_EQUAL(counter->counter_value, 0);
180
181 delete_counters_subgroup(subgroup);
182}
183
184void test_increment_counter()
185{
186 uint16_t subgroup_id = 1;
187 uint16_t counter_id = 1;
188 struct counters_group *group = create_counters_group("group", 10);
189 struct counters_subgroup *subgroup =
190 create_counters_subgroup("subgroup", subgroup_id, 10);
191 create_subgroup_counter(subgroup, counter_id, "counter");
192 add_counters_subgroup(group, subgroup);
193
194 struct counter *counter = subgroup->counters[counter_id];
195 counter->counter_value = 100;
196
197 CU_ASSERT_FALSE(increment_counter(NULL, subgroup_id, counter_id));
198 CU_ASSERT_FALSE(increment_counter(group, 100, counter_id));
199 CU_ASSERT_FALSE(increment_counter(group, subgroup_id, 123));
200 CU_ASSERT_TRUE(increment_counter(group, subgroup_id, counter_id));
201 CU_ASSERT_EQUAL(counter->counter_value, 101);
202 CU_ASSERT_EQUAL(subgroup_counters_total(subgroup), 101);
203
204 delete_counters_group(group);
205}
206
207void test_increment_subgroup_counter()
208{
209 int counter_id = 1;
210 uint32_t counter_value = 100;
211 struct counters_subgroup *subgroup =
212 create_counters_subgroup("subgroup", 1, 10);
213 create_subgroup_counter(subgroup, counter_id, "counter");
214
215 struct counter *counter = subgroup->counters[counter_id];
216 counter->counter_value = counter_value;
217
218 CU_ASSERT_FALSE(increment_subgroup_counter(NULL, counter_id));
219 CU_ASSERT_FALSE(increment_subgroup_counter(subgroup, counter_id + 1));
220 CU_ASSERT_TRUE(increment_subgroup_counter(subgroup, counter_id));
221 CU_ASSERT_EQUAL(counter->counter_value, counter_value + 1);
222
223 delete_counters_subgroup(subgroup);
224}
225
226void test_dump_counters_group_to_log()
227{
228 uint16_t subgroup_id = 1;
229 uint16_t counter_id = 1;
230 struct counters_group *group = create_counters_group("group", 10);
231 struct counters_subgroup *subgroup =
232 create_counters_subgroup("subgroup", subgroup_id, 10);
233 create_subgroup_counter(subgroup, counter_id, "counter");
234 add_counters_subgroup(group, subgroup);
235
236 CU_ASSERT_FALSE(dump_counters_group_to_log(NULL));
237 CU_ASSERT_TRUE(dump_counters_group_to_log(group));
238
239 delete_counters_group(group);
240}
241
242void test_dump_counters_subgroup_to_log()
243{
244 uint16_t subgroup_id = 1;
245 uint16_t counter_id = 1;
246 struct counters_subgroup *subgroup =
247 create_counters_subgroup("subgroup", subgroup_id, 10);
248 create_subgroup_counter(subgroup, counter_id, "counter");
249
250 CU_ASSERT_FALSE(dump_counters_subgroup_to_log(NULL));
251 CU_ASSERT_TRUE(dump_counters_subgroup_to_log(subgroup));
252
253 delete_counters_subgroup(subgroup);
254}