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