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