1
2
3
4
5#include <stdio.h>
6#include <string.h>
7#include <stdint.h>
8#include <errno.h>
9
10#include <rte_lcore.h>
11#include <rte_metrics.h>
12
13#include "test.h"
14
15#define REG_METRIC_COUNT 6
16#define METRIC_LESSER_COUNT 3
17#define KEY 1
18#define VALUE 1
19
20
21
22
23static int
24test_metrics_init(void)
25{
26 rte_metrics_init(rte_socket_id());
27 return TEST_SUCCESS;
28}
29
30
31
32
33static int
34test_metrics_deinitialize(void)
35{
36 int err = 0;
37 err = rte_metrics_deinit();
38 TEST_ASSERT(err == 0, "%s, %d", __func__, __LINE__);
39
40 return TEST_SUCCESS;
41}
42
43
44static int
45test_metrics_without_init(void)
46{
47 int err = 0;
48 const uint64_t value[REG_METRIC_COUNT] = {0};
49 const char * const mnames[] = {
50 "mean_bits_in", "mean_bits_out",
51 "peak_bits_in", "peak_bits_out",
52 };
53
54
55 err = rte_metrics_reg_name("peak_bits_in");
56 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
57
58 err = rte_metrics_reg_names(&mnames[0], 1);
59 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
60
61 err = rte_metrics_update_value(RTE_METRICS_GLOBAL, KEY, VALUE);
62 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
63
64 err = rte_metrics_update_values(RTE_METRICS_GLOBAL, KEY, &value[0], 4);
65 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
66
67 err = rte_metrics_get_names(NULL, 0);
68 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
69
70 err = rte_metrics_get_values(RTE_METRICS_GLOBAL, NULL, 0);
71 TEST_ASSERT(err == -EIO, "%s, %d", __func__, __LINE__);
72
73 return TEST_SUCCESS;
74}
75
76
77static int
78test_metrics_reg_name_with_validname(void)
79{
80 int err = 0;
81
82
83 err = rte_metrics_reg_name("peak_bits_out");
84 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
85
86
87 err = rte_metrics_reg_name("peak_bits_out");
88 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
89
90
91 err = rte_metrics_reg_name(NULL);
92 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
93
94 return TEST_SUCCESS;
95}
96
97
98static int
99test_metrics_reg_names(void)
100{
101 int err = 0;
102 const char * const mnames[] = {
103 "mean_bits_in", "mean_bits_out",
104 "peak_bits_in", "peak_bits_out",
105 };
106
107
108 err = rte_metrics_reg_names(&mnames[0], RTE_DIM(mnames));
109 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
110
111 return TEST_SUCCESS;
112}
113
114
115static int
116test_metrics_update_value(void)
117{
118 int err = 0;
119
120
121 err = rte_metrics_update_value(RTE_METRICS_GLOBAL, KEY, VALUE);
122 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
123
124
125
126
127 err = rte_metrics_update_value(9, KEY, VALUE);
128 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
129
130
131 err = rte_metrics_update_value(-2, KEY, VALUE);
132 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
133
134
135 err = rte_metrics_update_value(39, KEY, VALUE);
136 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
137
138
139 err = rte_metrics_update_value(RTE_METRICS_GLOBAL, KEY+12, VALUE);
140 TEST_ASSERT(err < 0, "%s, %d", __func__, __LINE__);
141
142 return TEST_SUCCESS;
143}
144
145
146static int
147test_metrics_update_values(void)
148{
149 int err = 0;
150 const uint64_t value[REG_METRIC_COUNT] = {1, 2, 3, 4, 5, 6};
151
152
153 err = rte_metrics_update_values(RTE_METRICS_GLOBAL, 0,
154 &value[0], 1);
155 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
156
157
158 err = rte_metrics_update_values(RTE_METRICS_GLOBAL, 1,
159 &value[1], 1);
160 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
161
162
163 err = rte_metrics_update_values(RTE_METRICS_GLOBAL, 2,
164 &value[2], 4);
165 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
166
167
168 err = rte_metrics_update_values(RTE_METRICS_GLOBAL,
169 KEY, &value[0], RTE_DIM(value));
170 TEST_ASSERT(err < 0, "%s, %d", __func__, __LINE__);
171
172
173 err = rte_metrics_update_values(-2, KEY, &value[0], RTE_DIM(value));
174 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
175
176
177 err = rte_metrics_update_values(39, 1, &value[0], RTE_DIM(value));
178 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
179
180
181 err = rte_metrics_update_values(RTE_METRICS_GLOBAL,
182 KEY, NULL, RTE_DIM(value));
183 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
184
185 return TEST_SUCCESS;
186}
187
188
189static int
190test_metrics_get_names(void)
191{
192 int err = 0;
193 struct rte_metric_name metrics[METRIC_LESSER_COUNT];
194 struct rte_metric_name success_metrics[REG_METRIC_COUNT];
195
196
197 err = rte_metrics_get_names(NULL, 0);
198 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
199
200
201
202
203 err = rte_metrics_get_names(success_metrics, REG_METRIC_COUNT);
204 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
205
206
207
208
209 err = rte_metrics_get_names(success_metrics, REG_METRIC_COUNT+5);
210 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
211
212
213
214
215 err = rte_metrics_get_names(metrics, METRIC_LESSER_COUNT);
216 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
217
218 return TEST_SUCCESS;
219}
220
221
222static int
223test_metrics_get_values(void)
224{
225 int i = 0;
226 int err = 0;
227 struct rte_metric_value getvalues[REG_METRIC_COUNT];
228
229 size_t m_size = sizeof(struct rte_metric_value);
230 for (i = 0; i < REG_METRIC_COUNT; i++)
231 memset(&getvalues[i], 0, m_size);
232
233
234
235
236 err = rte_metrics_get_values(RTE_METRICS_GLOBAL, getvalues,
237 METRIC_LESSER_COUNT);
238 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
239
240
241 err = rte_metrics_get_values(RTE_METRICS_GLOBAL, getvalues,
242 REG_METRIC_COUNT);
243 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
244
245
246
247
248 err = rte_metrics_get_values(RTE_METRICS_GLOBAL, getvalues,
249 REG_METRIC_COUNT+2);
250 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
251
252
253
254
255 err = rte_metrics_get_values(-2, getvalues, REG_METRIC_COUNT);
256 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
257
258
259
260
261 err = rte_metrics_get_values(33, getvalues, REG_METRIC_COUNT);
262 TEST_ASSERT(err == -EINVAL, "%s, %d", __func__, __LINE__);
263
264
265
266
267 err = rte_metrics_get_values(RTE_METRICS_GLOBAL, NULL,
268 REG_METRIC_COUNT);
269 TEST_ASSERT(err >= 0, "%s, %d", __func__, __LINE__);
270
271 return TEST_SUCCESS;
272}
273
274static struct unit_test_suite metrics_testsuite = {
275 .suite_name = "Metrics Unit Test Suite",
276 .setup = NULL,
277 .teardown = NULL,
278 .unit_test_cases = {
279
280
281
282 TEST_CASE(test_metrics_without_init),
283
284
285 TEST_CASE_ST(test_metrics_init, NULL,
286 test_metrics_reg_name_with_validname),
287
288
289
290
291
292 TEST_CASE(test_metrics_reg_names),
293
294
295
296
297 TEST_CASE(test_metrics_update_value),
298
299
300
301
302
303 TEST_CASE(test_metrics_update_values),
304
305
306
307
308 TEST_CASE(test_metrics_get_names),
309
310
311
312
313
314 TEST_CASE(test_metrics_get_values),
315
316
317 TEST_CASE(test_metrics_deinitialize),
318
319 TEST_CASES_END()
320 }
321};
322
323static int
324test_metrics(void)
325{
326 return unit_test_suite_runner(&metrics_testsuite);
327}
328
329REGISTER_TEST_COMMAND(metrics_autotest, test_metrics);
330