From 6f7eb8e1cb829926bcbce2aeb885b0db63fc7af0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?J=C3=A9r=C3=A9mie=20Galarneau?= Date: Thu, 13 Jan 2022 15:38:06 -0500 Subject: [PATCH] Tests: add a multi-domain ust+kernel rotation test MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Validate that multi-domain rotations work as intended for both local and remote outputs. This validates the fix introduced by c5c793. Signed-off-by: Jérémie Galarneau Change-Id: I91ddd313fcfbc5421db281baea34ba2d0aae2c82 --- tests/regression/Makefile.am | 1 + tests/regression/tools/rotation/Makefile.am | 4 +- .../regression/tools/rotation/rotate_utils.sh | 14 ++- tests/regression/tools/rotation/test_kernel | 2 +- tests/regression/tools/rotation/test_ust | 2 +- .../regression/tools/rotation/test_ust_kernel | 116 ++++++++++++++++++ 6 files changed, 131 insertions(+), 8 deletions(-) create mode 100755 tests/regression/tools/rotation/test_ust_kernel diff --git a/tests/regression/Makefile.am b/tests/regression/Makefile.am index 566bdeaf1..477ee9735 100644 --- a/tests/regression/Makefile.am +++ b/tests/regression/Makefile.am @@ -50,6 +50,7 @@ TESTS = tools/base-path/test_ust \ tools/notification/test_notification_multi_app \ tools/rotation/test_ust \ tools/rotation/test_kernel \ + tools/rotation/test_ust_kernel \ tools/rotation/test_save_load_mi \ tools/rotation/test_schedule_api \ tools/metadata/test_kernel \ diff --git a/tests/regression/tools/rotation/Makefile.am b/tests/regression/tools/rotation/Makefile.am index eb81e1976..d3886e53d 100644 --- a/tests/regression/tools/rotation/Makefile.am +++ b/tests/regression/tools/rotation/Makefile.am @@ -9,8 +9,8 @@ noinst_PROGRAMS = schedule_api schedule_api_SOURCES = schedule_api.c schedule_api_LDADD = $(LIBTAP) $(LIBLTTNG_CTL) -noinst_SCRIPTS = test_kernel test_ust test_save_load_mi test_schedule_api rotate_utils.sh -EXTRA_DIST = test_kernel test_ust test_save_load_mi test_schedule_api rotate_utils.sh +noinst_SCRIPTS = test_kernel test_ust test_ust_kernel test_save_load_mi test_schedule_api rotate_utils.sh +EXTRA_DIST = test_kernel test_ust test_ust_kernel test_save_load_mi test_schedule_api rotate_utils.sh all-local: @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ diff --git a/tests/regression/tools/rotation/rotate_utils.sh b/tests/regression/tools/rotation/rotate_utils.sh index 8ff93f91d..0454b7ce3 100644 --- a/tests/regression/tools/rotation/rotate_utils.sh +++ b/tests/regression/tools/rotation/rotate_utils.sh @@ -41,8 +41,8 @@ function validate_test_chunks () local_path=$1 today=$2 app_path=$3 - domain=$4 - per_pid=$5 + shift 3 + domains=("$@") local path= local chunk_pattern=$(get_chunk_pattern ${today}) @@ -64,8 +64,14 @@ function validate_test_chunks () # Make sure we don't have anything else in the first 2 chunk directories # besides the kernel folder. for chunk in $(seq 0 1); do - nr_stale=$(ls -A $local_path/${chunk_pattern}-${chunk} | grep -v $domain | wc -l) - ok $nr_stale "No stale folders in chunk ${chunk} directory" + local stale_files + + stale_files=$(ls -A $local_path/${chunk_pattern}-${chunk}) + for domain in "${domains[@]}"; do + stale_files=$(echo "$stale_files" | grep -v $domain) + done + nr_stale=$(echo -n "$stale_files" | wc -l) + ok "$nr_stale" "No stale folders in chunk ${chunk} directory" done # We expect a complete session of 30 events diff --git a/tests/regression/tools/rotation/test_kernel b/tests/regression/tools/rotation/test_kernel index d4a66c508..3b7b94fb1 100755 --- a/tests/regression/tools/rotation/test_kernel +++ b/tests/regression/tools/rotation/test_kernel @@ -38,7 +38,7 @@ function rotate_kernel_test () destroy_lttng_session_ok $SESSION_NAME - validate_test_chunks $local_path $today kernel kernel 0 + validate_test_chunks $local_path $today kernel kernel } function test_kernel_streaming () diff --git a/tests/regression/tools/rotation/test_ust b/tests/regression/tools/rotation/test_ust index 76c4ad579..3e926caa9 100755 --- a/tests/regression/tools/rotation/test_ust +++ b/tests/regression/tools/rotation/test_ust @@ -59,7 +59,7 @@ function rotate_ust_test () destroy_lttng_session_ok $SESSION_NAME - validate_test_chunks "${local_path}" $today $app_path ust $per_pid + validate_test_chunks "${local_path}" $today $app_path ust } function test_ust_streaming_uid () diff --git a/tests/regression/tools/rotation/test_ust_kernel b/tests/regression/tools/rotation/test_ust_kernel new file mode 100755 index 000000000..4f8294ef0 --- /dev/null +++ b/tests/regression/tools/rotation/test_ust_kernel @@ -0,0 +1,116 @@ +#!/bin/bash +# +# Copyright (C) 2022 Jérémie Galarneau +# +# SPDX-License-Identifier: LGPL-2.1-only + +TEST_DESC="Rotation - Kernel tracing" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. +NR_USEC_WAIT=0 +TESTAPP_PATH="$TESTDIR/utils/testapp" +TESTAPP_NAME="gen-ust-events" +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" +SESSION_NAME="stream" +UST_EVENT_NAME="tp:tptest" +KERNEL_EVENT_NAME="lttng_test_filter_event" + +TRACE_PATH=$(mktemp --tmpdir -d -t tmp.rotation_ust_kernel_tracing.XXXXXX) + +NUM_TESTS=64 + +source $TESTDIR/utils/utils.sh +source $CURDIR/rotate_utils.sh + +function rotate_ust_kernel_test () +{ + local local_path=$1 + local today + local expected_domains + + expected_domains=("ust" "kernel") + + enable_ust_lttng_event_ok $SESSION_NAME $UST_EVENT_NAME + lttng_enable_kernel_event $SESSION_NAME $KERNEL_EVENT_NAME + + start_lttng_tracing_ok $SESSION_NAME + + today=$(date +%Y%m%d) + + # First chunk contains 10 events of each domain. + echo -n "10" > /proc/lttng-test-filter-event + $TESTAPP_BIN -i 10 -w $NR_USEC_WAIT > /dev/null 2>&1 + rotate_session_ok $SESSION_NAME + + # Second chunk contains 20 events of each domain. + echo -n "20" > /proc/lttng-test-filter-event + $TESTAPP_BIN -i 20 -w $NR_USEC_WAIT > /dev/null 2>&1 + stop_lttng_tracing_ok $SESSION_NAME + + # Third chunk contains no event (rotate after stop). + rotate_session_ok $SESSION_NAME + + destroy_lttng_session_ok $SESSION_NAME + + diag "Validate kernel domain chunks" + EVENT_NAME=$KERNEL_EVENT_NAME + validate_test_chunks $local_path $today kernel "${expected_domains[@]}" + + diag "Validate user space domain chunks" + EVENT_NAME=$UST_EVENT_NAME + validate_test_chunks $local_path $today "ust/uid/*/*/" "${expected_domains[@]}" +} + +function test_ust_kernel_streaming () +{ + diag "Test combined UST + kernel streaming with session rotation" + create_lttng_session_uri $SESSION_NAME net://localhost + rotate_ust_kernel_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*/archives" "ust/uid/*/*/" +} + +function test_ust_kernel_local () +{ + diag "Test combined UST + kernel local with session rotation" + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" + rotate_ust_kernel_test "${TRACE_PATH}/archives" "ust/uid/*/*/" +} + +if [ ! -x "$TESTAPP_BIN" ]; then + BAIL_OUT "No UST events binary detected." +fi + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" +bail_out_if_no_babeltrace + +if [ "$(id -u)" == "0" ]; then + isroot=1 +else + isroot=0 +fi + +skip $isroot "Root access is needed. Skipping all tests." $NUM_TESTS || +{ + validate_lttng_modules_present + + start_lttng_relayd "-o $TRACE_PATH" + start_lttng_sessiond + modprobe lttng-test + + tests=( test_ust_kernel_streaming test_ust_kernel_local ) + + for fct_test in "${tests[@]}"; + do + SESSION_NAME=$(randstring 16 0) + ${fct_test} + clean_path "$TRACE_PATH" + done + + modprobe --remove lttng-test + stop_lttng_sessiond + stop_lttng_relayd +} + +rm -rf "$TRACE_PATH" -- 2.34.1