xref: /dpdk/app/test/test_trace.c (revision 3c60274c)
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
test_trace(void)15 test_trace(void)
16 {
17 	printf("trace not supported on Windows, skipping test\n");
18 	return TEST_SKIPPED;
19 }
20 
21 static int
test_trace_dump(void)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
test_trace_metadata_dump(void)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
test_trace_point_globbing(void)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
test_trace_point_regex(void)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
test_trace_point_disable_enable(void)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
test_trace_mode(void)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
test_trace_points_lookup(void)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
test_fp_trace_points(void)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
test_generic_trace_points(void)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
test_trace(void)217 test_trace(void)
218 {
219 	return unit_test_suite_runner(&trace_tests);
220 }
221 
222 static int
test_trace_dump(void)223 test_trace_dump(void)
224 {
225 	rte_trace_dump(stdout);
226 	return 0;
227 }
228 
229 static int
test_trace_metadata_dump(void)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);
240