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