test/bpf: skip test if libpcap is unavailable
[dpdk.git] / app / test / test_trace.c
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright(C) 2020 Marvell International Ltd.
3  */
4
5 #include <rte_eal_trace.h>
6 #include <rte_lcore.h>
7 #include <rte_trace.h>
8
9 #include "test.h"
10 #include "test_trace.h"
11
12 #ifdef RTE_EXEC_ENV_WINDOWS
13
14 static int
15 test_trace(void)
16 {
17         printf("trace not supported on Windows, skipping test\n");
18         return TEST_SKIPPED;
19 }
20
21 static int
22 test_trace_dump(void)
23 {
24         printf("trace_dump not supported on Windows, skipping test\n");
25         return TEST_SKIPPED;
26 }
27
28 static int
29 test_trace_metadata_dump(void)
30 {
31         printf("trace_metadata_dump not supported on Windows, skipping test\n");
32         return TEST_SKIPPED;
33 }
34
35 #else
36
37 static int32_t
38 test_trace_point_globbing(void)
39 {
40         int rc;
41
42         rc = rte_trace_pattern("app.dpdk.test*", false);
43         if (rc != 1)
44                 goto failed;
45
46         if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
47                 goto failed;
48
49         rc = rte_trace_pattern("app.dpdk.test*", true);
50         if (rc != 1)
51                 goto failed;
52
53         if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
54                 goto failed;
55
56         rc = rte_trace_pattern("invalid_testpoint.*", true);
57         if (rc != 0)
58                 goto failed;
59
60         return TEST_SUCCESS;
61
62 failed:
63         return TEST_FAILED;
64 }
65
66 static int32_t
67 test_trace_point_regex(void)
68 {
69         int rc;
70
71         rc = rte_trace_regexp("app.dpdk.test*", false);
72         if (rc != 1)
73                 goto failed;
74
75         if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
76                 goto failed;
77
78         rc = rte_trace_regexp("app.dpdk.test*", true);
79         if (rc != 1)
80                 goto failed;
81
82         if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
83                 goto failed;
84
85         rc = rte_trace_regexp("invalid_testpoint.*", true);
86         if (rc != 0)
87                 goto failed;
88
89         return TEST_SUCCESS;
90
91 failed:
92         return TEST_FAILED;
93 }
94
95 static int32_t
96 test_trace_point_disable_enable(void)
97 {
98         int rc;
99
100         rc = rte_trace_point_disable(&__app_dpdk_test_tp);
101         if (rc < 0)
102                 goto failed;
103
104         if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
105                 goto failed;
106
107         rc = rte_trace_point_enable(&__app_dpdk_test_tp);
108         if (rc < 0)
109                 goto failed;
110
111         if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
112                 goto failed;
113
114         /* Emit the trace */
115         app_dpdk_test_tp("app.dpdk.test.tp");
116         return TEST_SUCCESS;
117
118 failed:
119         return TEST_FAILED;
120 }
121
122 static int
123 test_trace_mode(void)
124 {
125         enum rte_trace_mode current;
126
127         current = rte_trace_mode_get();
128
129         if (!rte_trace_is_enabled())
130                 return TEST_SKIPPED;
131
132         rte_trace_mode_set(RTE_TRACE_MODE_DISCARD);
133         if (rte_trace_mode_get() != RTE_TRACE_MODE_DISCARD)
134                 goto failed;
135
136         rte_trace_mode_set(RTE_TRACE_MODE_OVERWRITE);
137         if (rte_trace_mode_get() != RTE_TRACE_MODE_OVERWRITE)
138                 goto failed;
139
140         rte_trace_mode_set(current);
141         return TEST_SUCCESS;
142
143 failed:
144         return TEST_FAILED;
145
146 }
147
148 static int
149 test_trace_points_lookup(void)
150 {
151         rte_trace_point_t *trace;
152
153         trace =  rte_trace_point_lookup("app.dpdk.test.tp");
154         if (trace == NULL)
155                 goto fail;
156         trace = rte_trace_point_lookup("this_trace_point_does_not_exist");
157         if (trace != NULL)
158                 goto fail;
159
160         return TEST_SUCCESS;
161 fail:
162         return TEST_FAILED;
163 }
164
165 static int
166 test_fp_trace_points(void)
167 {
168         /* Emit the FP trace */
169         app_dpdk_test_fp();
170
171         return TEST_SUCCESS;
172 }
173
174 static int
175 test_generic_trace_points(void)
176 {
177         int tmp;
178
179         rte_eal_trace_generic_void();
180         rte_eal_trace_generic_u64(0x10000000000000);
181         rte_eal_trace_generic_u32(0x10000000);
182         rte_eal_trace_generic_u16(0xffee);
183         rte_eal_trace_generic_u8(0xc);
184         rte_eal_trace_generic_i64(-1234);
185         rte_eal_trace_generic_i32(-1234567);
186         rte_eal_trace_generic_i16(12);
187         rte_eal_trace_generic_i8(-3);
188         rte_eal_trace_generic_int(3333333);
189         rte_eal_trace_generic_long(333);
190         rte_eal_trace_generic_float(20.45);
191         rte_eal_trace_generic_double(20000.5000004);
192         rte_eal_trace_generic_ptr(&tmp);
193         rte_eal_trace_generic_str("my string");
194         rte_eal_trace_generic_size_t(sizeof(void *));
195         RTE_EAL_TRACE_GENERIC_FUNC;
196
197         return TEST_SUCCESS;
198 }
199
200 static struct unit_test_suite trace_tests = {
201         .suite_name = "trace autotest",
202         .setup = NULL,
203         .teardown = NULL,
204         .unit_test_cases = {
205                 TEST_CASE(test_trace_mode),
206                 TEST_CASE(test_generic_trace_points),
207                 TEST_CASE(test_fp_trace_points),
208                 TEST_CASE(test_trace_point_disable_enable),
209                 TEST_CASE(test_trace_point_globbing),
210                 TEST_CASE(test_trace_point_regex),
211                 TEST_CASE(test_trace_points_lookup),
212                 TEST_CASES_END()
213         }
214 };
215
216 static int
217 test_trace(void)
218 {
219         return unit_test_suite_runner(&trace_tests);
220 }
221
222 static int
223 test_trace_dump(void)
224 {
225         rte_trace_dump(stdout);
226         return 0;
227 }
228
229 static int
230 test_trace_metadata_dump(void)
231 {
232         return rte_trace_metadata_dump(stdout);
233 }
234
235 #endif /* !RTE_EXEC_ENV_WINDOWS */
236
237 REGISTER_TEST_COMMAND(trace_autotest, test_trace);
238 REGISTER_TEST_COMMAND(trace_dump, test_trace_dump);
239 REGISTER_TEST_COMMAND(trace_metadata_dump, test_trace_metadata_dump);