From: Sunil Kumar Kori Date: Wed, 22 Apr 2020 19:03:43 +0000 (+0530) Subject: test/trace: add functional test cases X-Git-Url: http://git.droids-corp.org/?p=dpdk.git;a=commitdiff_plain;h=9247e71dfb5577fc8e8ada378049daae03a5aca8 test/trace: add functional test cases Example commands to run UT and check the traces with babeltrace viewer. - Delete the existing /root/dpdk-traces/ directory if needed. > sudo rm -rf /root/dpdk-traces/ - Start the dpdk-test > sudo ./build/app/test/dpdk-test -c 0x3 - --trace=.* - Run trace_autotest > trace_autotest - View the traces with babletrace viewer. > sudo babeltrace /root/dpdk-traces/ Signed-off-by: Sunil Kumar Kori Acked-by: David Marchand --- diff --git a/MAINTAINERS b/MAINTAINERS index 56217c9daf..c456126e2a 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -200,6 +200,7 @@ M: Sunil Kumar Kori F: lib/librte_eal/include/rte_trace*.h F: lib/librte_eal/common/eal_common_trace*.c F: lib/librte_eal/common/eal_trace.h +F: app/test/test_trace* Memory Allocation M: Anatoly Burakov diff --git a/app/test/Makefile b/app/test/Makefile index 793daa687e..0b5807d7e0 100644 --- a/app/test/Makefile +++ b/app/test/Makefile @@ -153,7 +153,8 @@ SRCS-y += test_alarm.c SRCS-y += test_interrupts.c SRCS-y += test_version.c SRCS-y += test_func_reentrancy.c - +SRCS-y += test_trace.c +SRCS-y += test_trace_register.c SRCS-y += test_service_cores.c ifeq ($(CONFIG_RTE_LIBRTE_PMD_RING),y) diff --git a/app/test/meson.build b/app/test/meson.build index 285e71a461..a0b2c1fa81 100644 --- a/app/test/meson.build +++ b/app/test/meson.build @@ -127,6 +127,8 @@ test_sources = files('commands.c', 'test_timer_racecond.c', 'test_timer_secondary.c', 'test_ticketlock.c', + 'test_trace.c', + 'test_trace_register.c', 'test_version.c', 'virtual_pmd.c' ) @@ -245,6 +247,7 @@ fast_tests = [ ['reorder_autotest', true], ['service_autotest', true], ['thash_autotest', true], + ['trace_autotest', true], ] perf_test_names = [ diff --git a/app/test/test_trace.c b/app/test/test_trace.c new file mode 100644 index 0000000000..ddcf416b27 --- /dev/null +++ b/app/test/test_trace.c @@ -0,0 +1,213 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2020 Marvell International Ltd. + */ + +#include +#include +#include + +#include "test.h" +#include "test_trace.h" + +static int32_t +test_trace_point_globbing(void) +{ + int rc; + + rc = rte_trace_pattern("app.dpdk.test*", false); + if (rc != 1) + goto failed; + + if (rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + rc = rte_trace_pattern("app.dpdk.test*", true); + if (rc != 1) + goto failed; + + if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + rc = rte_trace_pattern("invalid_testpoint.*", true); + if (rc != 0) + goto failed; + + return TEST_SUCCESS; + +failed: + return TEST_FAILED; +} + +static int32_t +test_trace_point_regex(void) +{ + int rc; + + rc = rte_trace_regexp("app.dpdk.test*", false); + if (rc != 1) + goto failed; + + if (rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + rc = rte_trace_regexp("app.dpdk.test*", true); + if (rc != 1) + goto failed; + + if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + rc = rte_trace_regexp("invalid_testpoint.*", true); + if (rc != 0) + goto failed; + + return TEST_SUCCESS; + +failed: + return TEST_FAILED; +} + +static int32_t +test_trace_point_disable_enable(void) +{ + int rc; + + rc = rte_trace_point_disable(&__app_dpdk_test_tp); + if (rc < 0) + goto failed; + + if (rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + rc = rte_trace_point_enable(&__app_dpdk_test_tp); + if (rc < 0) + goto failed; + + if (!rte_trace_point_is_enabled(&__app_dpdk_test_tp)) + goto failed; + + /* Emit the trace */ + app_dpdk_test_tp("app.dpdk.test.tp"); + return TEST_SUCCESS; + +failed: + return TEST_FAILED; +} + +static int +test_trace_mode(void) +{ + enum rte_trace_mode current; + + current = rte_trace_mode_get(); + + if (!rte_trace_is_enabled()) + return TEST_SKIPPED; + + rte_trace_mode_set(RTE_TRACE_MODE_DISCARD); + if (rte_trace_mode_get() != RTE_TRACE_MODE_DISCARD) + goto failed; + + rte_trace_mode_set(RTE_TRACE_MODE_OVERWRITE); + if (rte_trace_mode_get() != RTE_TRACE_MODE_OVERWRITE) + goto failed; + + rte_trace_mode_set(current); + return TEST_SUCCESS; + +failed: + return TEST_FAILED; + +} + +static int +test_trace_points_lookup(void) +{ + rte_trace_point_t *trace; + + trace = rte_trace_point_lookup("app.dpdk.test.tp"); + if (trace == NULL) + goto fail; + trace = rte_trace_point_lookup("this_trace_point_does_not_exist"); + if (trace != NULL) + goto fail; + + return TEST_SUCCESS; +fail: + return TEST_FAILED; +} + +static int +test_fp_trace_points(void) +{ + /* Emit the FP trace */ + app_dpdk_test_fp(); + + return TEST_SUCCESS; +} + +static int +test_generic_trace_points(void) +{ + int tmp; + + rte_eal_trace_generic_void(); + rte_eal_trace_generic_u64(0x10000000000000); + rte_eal_trace_generic_u32(0x10000000); + rte_eal_trace_generic_u16(0xffee); + rte_eal_trace_generic_u8(0xc); + rte_eal_trace_generic_i64(-1234); + rte_eal_trace_generic_i32(-1234567); + rte_eal_trace_generic_i16(12); + rte_eal_trace_generic_i8(-3); + rte_eal_trace_generic_int(3333333); + rte_eal_trace_generic_long(333); + rte_eal_trace_generic_float(20.45); + rte_eal_trace_generic_double(20000.5000004); + rte_eal_trace_generic_ptr(&tmp); + rte_eal_trace_generic_str("my string"); + RTE_EAL_TRACE_GENERIC_FUNC; + + return TEST_SUCCESS; +} + +static struct unit_test_suite trace_tests = { + .suite_name = "trace autotest", + .setup = NULL, + .teardown = NULL, + .unit_test_cases = { + TEST_CASE(test_trace_mode), + TEST_CASE(test_generic_trace_points), + TEST_CASE(test_fp_trace_points), + TEST_CASE(test_trace_point_disable_enable), + TEST_CASE(test_trace_point_globbing), + TEST_CASE(test_trace_point_regex), + TEST_CASE(test_trace_points_lookup), + TEST_CASES_END() + } +}; + +static int +test_trace(void) +{ + return unit_test_suite_runner(&trace_tests); +} + +REGISTER_TEST_COMMAND(trace_autotest, test_trace); + +static int +test_trace_dump(void) +{ + rte_trace_dump(stdout); + return 0; +} + +REGISTER_TEST_COMMAND(trace_dump, test_trace_dump); + +static int +test_trace_metadata_dump(void) +{ + return rte_trace_metadata_dump(stdout); +} + +REGISTER_TEST_COMMAND(trace_metadata_dump, test_trace_metadata_dump); diff --git a/app/test/test_trace.h b/app/test/test_trace.h new file mode 100644 index 0000000000..413842f60d --- /dev/null +++ b/app/test/test_trace.h @@ -0,0 +1,15 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2020 Marvell International Ltd. + */ +#include + +RTE_TRACE_POINT( + app_dpdk_test_tp, + RTE_TRACE_POINT_ARGS(const char *str), + rte_trace_point_emit_string(str); +) + +RTE_TRACE_POINT_FP( + app_dpdk_test_fp, + RTE_TRACE_POINT_ARGS(void), +) diff --git a/app/test/test_trace_register.c b/app/test/test_trace_register.c new file mode 100644 index 0000000000..8f40822cad --- /dev/null +++ b/app/test/test_trace_register.c @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(C) 2020 Marvell International Ltd. + */ +#define RTE_TRACE_POINT_REGISTER_SELECT + +#include "test_trace.h" + +/* Define trace points */ +RTE_TRACE_POINT_DEFINE(app_dpdk_test_tp); +RTE_TRACE_POINT_DEFINE(app_dpdk_test_fp); + +RTE_INIT(register_valid_trace_points) +{ + RTE_TRACE_POINT_REGISTER(app_dpdk_test_tp, app.dpdk.test.tp); + RTE_TRACE_POINT_REGISTER(app_dpdk_test_fp, app.dpdk.test.fp); +} +