xref: /dpdk/app/test/test_trace.c (revision 3c60274c)
19247e71dSSunil Kumar Kori /* SPDX-License-Identifier: BSD-3-Clause
29247e71dSSunil Kumar Kori  * Copyright(C) 2020 Marvell International Ltd.
39247e71dSSunil Kumar Kori  */
49247e71dSSunil Kumar Kori 
59247e71dSSunil Kumar Kori #include <rte_eal_trace.h>
69247e71dSSunil Kumar Kori #include <rte_lcore.h>
79247e71dSSunil Kumar Kori #include <rte_trace.h>
89247e71dSSunil Kumar Kori 
99247e71dSSunil Kumar Kori #include "test.h"
109247e71dSSunil Kumar Kori #include "test_trace.h"
119247e71dSSunil Kumar Kori 
12*3c60274cSJie Zhou #ifdef RTE_EXEC_ENV_WINDOWS
13*3c60274cSJie Zhou 
14*3c60274cSJie Zhou static int
test_trace(void)15*3c60274cSJie Zhou test_trace(void)
16*3c60274cSJie Zhou {
17*3c60274cSJie Zhou 	printf("trace not supported on Windows, skipping test\n");
18*3c60274cSJie Zhou 	return TEST_SKIPPED;
19*3c60274cSJie Zhou }
20*3c60274cSJie Zhou 
21*3c60274cSJie Zhou static int
test_trace_dump(void)22*3c60274cSJie Zhou test_trace_dump(void)
23*3c60274cSJie Zhou {
24*3c60274cSJie Zhou 	printf("trace_dump not supported on Windows, skipping test\n");
25*3c60274cSJie Zhou 	return TEST_SKIPPED;
26*3c60274cSJie Zhou }
27*3c60274cSJie Zhou 
28*3c60274cSJie Zhou static int
test_trace_metadata_dump(void)29*3c60274cSJie Zhou test_trace_metadata_dump(void)
30*3c60274cSJie Zhou {
31*3c60274cSJie Zhou 	printf("trace_metadata_dump not supported on Windows, skipping test\n");
32*3c60274cSJie Zhou 	return TEST_SKIPPED;
33*3c60274cSJie Zhou }
34*3c60274cSJie Zhou 
35*3c60274cSJie Zhou #else
36*3c60274cSJie Zhou 
379247e71dSSunil Kumar Kori static int32_t
test_trace_point_globbing(void)389247e71dSSunil Kumar Kori test_trace_point_globbing(void)
399247e71dSSunil Kumar Kori {
409247e71dSSunil Kumar Kori 	int rc;
419247e71dSSunil Kumar Kori 
429247e71dSSunil Kumar Kori 	rc = rte_trace_pattern("app.dpdk.test*", false);
439247e71dSSunil Kumar Kori 	if (rc != 1)
449247e71dSSunil Kumar Kori 		goto failed;
459247e71dSSunil Kumar Kori 
469247e71dSSunil Kumar Kori 	if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
479247e71dSSunil Kumar Kori 		goto failed;
489247e71dSSunil Kumar Kori 
499247e71dSSunil Kumar Kori 	rc = rte_trace_pattern("app.dpdk.test*", true);
509247e71dSSunil Kumar Kori 	if (rc != 1)
519247e71dSSunil Kumar Kori 		goto failed;
529247e71dSSunil Kumar Kori 
539247e71dSSunil Kumar Kori 	if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
549247e71dSSunil Kumar Kori 		goto failed;
559247e71dSSunil Kumar Kori 
569247e71dSSunil Kumar Kori 	rc = rte_trace_pattern("invalid_testpoint.*", true);
579247e71dSSunil Kumar Kori 	if (rc != 0)
589247e71dSSunil Kumar Kori 		goto failed;
599247e71dSSunil Kumar Kori 
609247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
619247e71dSSunil Kumar Kori 
629247e71dSSunil Kumar Kori failed:
639247e71dSSunil Kumar Kori 	return TEST_FAILED;
649247e71dSSunil Kumar Kori }
659247e71dSSunil Kumar Kori 
669247e71dSSunil Kumar Kori static int32_t
test_trace_point_regex(void)679247e71dSSunil Kumar Kori test_trace_point_regex(void)
689247e71dSSunil Kumar Kori {
699247e71dSSunil Kumar Kori 	int rc;
709247e71dSSunil Kumar Kori 
719247e71dSSunil Kumar Kori 	rc = rte_trace_regexp("app.dpdk.test*", false);
729247e71dSSunil Kumar Kori 	if (rc != 1)
739247e71dSSunil Kumar Kori 		goto failed;
749247e71dSSunil Kumar Kori 
759247e71dSSunil Kumar Kori 	if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
769247e71dSSunil Kumar Kori 		goto failed;
779247e71dSSunil Kumar Kori 
789247e71dSSunil Kumar Kori 	rc = rte_trace_regexp("app.dpdk.test*", true);
799247e71dSSunil Kumar Kori 	if (rc != 1)
809247e71dSSunil Kumar Kori 		goto failed;
819247e71dSSunil Kumar Kori 
829247e71dSSunil Kumar Kori 	if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
839247e71dSSunil Kumar Kori 		goto failed;
849247e71dSSunil Kumar Kori 
859247e71dSSunil Kumar Kori 	rc = rte_trace_regexp("invalid_testpoint.*", true);
869247e71dSSunil Kumar Kori 	if (rc != 0)
879247e71dSSunil Kumar Kori 		goto failed;
889247e71dSSunil Kumar Kori 
899247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
909247e71dSSunil Kumar Kori 
919247e71dSSunil Kumar Kori failed:
929247e71dSSunil Kumar Kori 	return TEST_FAILED;
939247e71dSSunil Kumar Kori }
949247e71dSSunil Kumar Kori 
959247e71dSSunil Kumar Kori static int32_t
test_trace_point_disable_enable(void)969247e71dSSunil Kumar Kori test_trace_point_disable_enable(void)
979247e71dSSunil Kumar Kori {
989247e71dSSunil Kumar Kori 	int rc;
999247e71dSSunil Kumar Kori 
1009247e71dSSunil Kumar Kori 	rc = rte_trace_point_disable(&__app_dpdk_test_tp);
1019247e71dSSunil Kumar Kori 	if (rc < 0)
1029247e71dSSunil Kumar Kori 		goto failed;
1039247e71dSSunil Kumar Kori 
1049247e71dSSunil Kumar Kori 	if (rte_trace_point_is_enabled(&__app_dpdk_test_tp))
1059247e71dSSunil Kumar Kori 		goto failed;
1069247e71dSSunil Kumar Kori 
1079247e71dSSunil Kumar Kori 	rc = rte_trace_point_enable(&__app_dpdk_test_tp);
1089247e71dSSunil Kumar Kori 	if (rc < 0)
1099247e71dSSunil Kumar Kori 		goto failed;
1109247e71dSSunil Kumar Kori 
1119247e71dSSunil Kumar Kori 	if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp))
1129247e71dSSunil Kumar Kori 		goto failed;
1139247e71dSSunil Kumar Kori 
1149247e71dSSunil Kumar Kori 	/* Emit the trace */
1159247e71dSSunil Kumar Kori 	app_dpdk_test_tp("app.dpdk.test.tp");
1169247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
1179247e71dSSunil Kumar Kori 
1189247e71dSSunil Kumar Kori failed:
1199247e71dSSunil Kumar Kori 	return TEST_FAILED;
1209247e71dSSunil Kumar Kori }
1219247e71dSSunil Kumar Kori 
1229247e71dSSunil Kumar Kori static int
test_trace_mode(void)1239247e71dSSunil Kumar Kori test_trace_mode(void)
1249247e71dSSunil Kumar Kori {
1259247e71dSSunil Kumar Kori 	enum rte_trace_mode current;
1269247e71dSSunil Kumar Kori 
1279247e71dSSunil Kumar Kori 	current = rte_trace_mode_get();
1289247e71dSSunil Kumar Kori 
1299247e71dSSunil Kumar Kori 	if (!rte_trace_is_enabled())
1309247e71dSSunil Kumar Kori 		return TEST_SKIPPED;
1319247e71dSSunil Kumar Kori 
1329247e71dSSunil Kumar Kori 	rte_trace_mode_set(RTE_TRACE_MODE_DISCARD);
1339247e71dSSunil Kumar Kori 	if (rte_trace_mode_get() != RTE_TRACE_MODE_DISCARD)
1349247e71dSSunil Kumar Kori 		goto failed;
1359247e71dSSunil Kumar Kori 
1369247e71dSSunil Kumar Kori 	rte_trace_mode_set(RTE_TRACE_MODE_OVERWRITE);
1379247e71dSSunil Kumar Kori 	if (rte_trace_mode_get() != RTE_TRACE_MODE_OVERWRITE)
1389247e71dSSunil Kumar Kori 		goto failed;
1399247e71dSSunil Kumar Kori 
1409247e71dSSunil Kumar Kori 	rte_trace_mode_set(current);
1419247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
1429247e71dSSunil Kumar Kori 
1439247e71dSSunil Kumar Kori failed:
1449247e71dSSunil Kumar Kori 	return TEST_FAILED;
1459247e71dSSunil Kumar Kori 
1469247e71dSSunil Kumar Kori }
1479247e71dSSunil Kumar Kori 
1489247e71dSSunil Kumar Kori static int
test_trace_points_lookup(void)1499247e71dSSunil Kumar Kori test_trace_points_lookup(void)
1509247e71dSSunil Kumar Kori {
1519247e71dSSunil Kumar Kori 	rte_trace_point_t *trace;
1529247e71dSSunil Kumar Kori 
1539247e71dSSunil Kumar Kori 	trace =  rte_trace_point_lookup("app.dpdk.test.tp");
1549247e71dSSunil Kumar Kori 	if (trace == NULL)
1559247e71dSSunil Kumar Kori 		goto fail;
1569247e71dSSunil Kumar Kori 	trace = rte_trace_point_lookup("this_trace_point_does_not_exist");
1579247e71dSSunil Kumar Kori 	if (trace != NULL)
1589247e71dSSunil Kumar Kori 		goto fail;
1599247e71dSSunil Kumar Kori 
1609247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
1619247e71dSSunil Kumar Kori fail:
1629247e71dSSunil Kumar Kori 	return TEST_FAILED;
1639247e71dSSunil Kumar Kori }
1649247e71dSSunil Kumar Kori 
1659247e71dSSunil Kumar Kori static int
test_fp_trace_points(void)1669247e71dSSunil Kumar Kori test_fp_trace_points(void)
1679247e71dSSunil Kumar Kori {
1689247e71dSSunil Kumar Kori 	/* Emit the FP trace */
1699247e71dSSunil Kumar Kori 	app_dpdk_test_fp();
1709247e71dSSunil Kumar Kori 
1719247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
1729247e71dSSunil Kumar Kori }
1739247e71dSSunil Kumar Kori 
1749247e71dSSunil Kumar Kori static int
test_generic_trace_points(void)1759247e71dSSunil Kumar Kori test_generic_trace_points(void)
1769247e71dSSunil Kumar Kori {
1779247e71dSSunil Kumar Kori 	int tmp;
1789247e71dSSunil Kumar Kori 
1799247e71dSSunil Kumar Kori 	rte_eal_trace_generic_void();
1809247e71dSSunil Kumar Kori 	rte_eal_trace_generic_u64(0x10000000000000);
1819247e71dSSunil Kumar Kori 	rte_eal_trace_generic_u32(0x10000000);
1829247e71dSSunil Kumar Kori 	rte_eal_trace_generic_u16(0xffee);
1839247e71dSSunil Kumar Kori 	rte_eal_trace_generic_u8(0xc);
1849247e71dSSunil Kumar Kori 	rte_eal_trace_generic_i64(-1234);
1859247e71dSSunil Kumar Kori 	rte_eal_trace_generic_i32(-1234567);
1869247e71dSSunil Kumar Kori 	rte_eal_trace_generic_i16(12);
1879247e71dSSunil Kumar Kori 	rte_eal_trace_generic_i8(-3);
1889247e71dSSunil Kumar Kori 	rte_eal_trace_generic_int(3333333);
1899247e71dSSunil Kumar Kori 	rte_eal_trace_generic_long(333);
1909247e71dSSunil Kumar Kori 	rte_eal_trace_generic_float(20.45);
1919247e71dSSunil Kumar Kori 	rte_eal_trace_generic_double(20000.5000004);
1929247e71dSSunil Kumar Kori 	rte_eal_trace_generic_ptr(&tmp);
1939247e71dSSunil Kumar Kori 	rte_eal_trace_generic_str("my string");
194ca32fa67SPavan Nikhilesh 	rte_eal_trace_generic_size_t(sizeof(void *));
1959247e71dSSunil Kumar Kori 	RTE_EAL_TRACE_GENERIC_FUNC;
1969247e71dSSunil Kumar Kori 
1979247e71dSSunil Kumar Kori 	return TEST_SUCCESS;
1989247e71dSSunil Kumar Kori }
1999247e71dSSunil Kumar Kori 
2009247e71dSSunil Kumar Kori static struct unit_test_suite trace_tests = {
2019247e71dSSunil Kumar Kori 	.suite_name = "trace autotest",
2029247e71dSSunil Kumar Kori 	.setup = NULL,
2039247e71dSSunil Kumar Kori 	.teardown = NULL,
2049247e71dSSunil Kumar Kori 	.unit_test_cases = {
2059247e71dSSunil Kumar Kori 		TEST_CASE(test_trace_mode),
2069247e71dSSunil Kumar Kori 		TEST_CASE(test_generic_trace_points),
2079247e71dSSunil Kumar Kori 		TEST_CASE(test_fp_trace_points),
2089247e71dSSunil Kumar Kori 		TEST_CASE(test_trace_point_disable_enable),
2099247e71dSSunil Kumar Kori 		TEST_CASE(test_trace_point_globbing),
2109247e71dSSunil Kumar Kori 		TEST_CASE(test_trace_point_regex),
2119247e71dSSunil Kumar Kori 		TEST_CASE(test_trace_points_lookup),
2129247e71dSSunil Kumar Kori 		TEST_CASES_END()
2139247e71dSSunil Kumar Kori 	}
2149247e71dSSunil Kumar Kori };
2159247e71dSSunil Kumar Kori 
2169247e71dSSunil Kumar Kori static int
test_trace(void)2179247e71dSSunil Kumar Kori test_trace(void)
2189247e71dSSunil Kumar Kori {
2199247e71dSSunil Kumar Kori 	return unit_test_suite_runner(&trace_tests);
2209247e71dSSunil Kumar Kori }
2219247e71dSSunil Kumar Kori 
2229247e71dSSunil Kumar Kori static int
test_trace_dump(void)2239247e71dSSunil Kumar Kori test_trace_dump(void)
2249247e71dSSunil Kumar Kori {
2259247e71dSSunil Kumar Kori 	rte_trace_dump(stdout);
2269247e71dSSunil Kumar Kori 	return 0;
2279247e71dSSunil Kumar Kori }
2289247e71dSSunil Kumar Kori 
2299247e71dSSunil Kumar Kori static int
test_trace_metadata_dump(void)2309247e71dSSunil Kumar Kori test_trace_metadata_dump(void)
2319247e71dSSunil Kumar Kori {
2329247e71dSSunil Kumar Kori 	return rte_trace_metadata_dump(stdout);
2339247e71dSSunil Kumar Kori }
2349247e71dSSunil Kumar Kori 
235*3c60274cSJie Zhou #endif /* !RTE_EXEC_ENV_WINDOWS */
236*3c60274cSJie Zhou 
237*3c60274cSJie Zhou REGISTER_TEST_COMMAND(trace_autotest, test_trace);
238*3c60274cSJie Zhou REGISTER_TEST_COMMAND(trace_dump, test_trace_dump);
2399247e71dSSunil Kumar Kori REGISTER_TEST_COMMAND(trace_metadata_dump, test_trace_metadata_dump);
240