Tests: add a multi-domain ust+kernel rotation test
authorJérémie Galarneau <jeremie.galarneau@efficios.com>
Thu, 13 Jan 2022 20:38:06 +0000 (15:38 -0500)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Fri, 4 Mar 2022 20:23:16 +0000 (15:23 -0500)
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 <jeremie.galarneau@efficios.com>
Change-Id: I91ddd313fcfbc5421db281baea34ba2d0aae2c82

tests/regression/Makefile.am
tests/regression/tools/rotation/Makefile.am
tests/regression/tools/rotation/rotate_utils.sh
tests/regression/tools/rotation/test_kernel
tests/regression/tools/rotation/test_ust
tests/regression/tools/rotation/test_ust_kernel [new file with mode: 0755]

index 566bdeaf14443fcabcaa6652ad64f8fb4c2c6c6a..477ee9735a5545c6cf7bfc96ab03c5c1f8571c5e 100644 (file)
@@ -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 \
index eb81e1976d73fb8a55a80918a8343dc712d09fbc..d3886e53d5d679f281e133a1e8ba43737525bb47 100644 (file)
@@ -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 \
index 8ff93f91d87085be9c26c1bd10656c02891f9a20..0454b7ce3e8d421d97cf2e4c7c3271a1b24c1dd7 100644 (file)
@@ -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
index d4a66c50855fec9f3c1434d6dc7f6a4578cb096e..3b7b94fb1d8deff0cf42e878c2967239ef3e5283 100755 (executable)
@@ -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 ()
index 76c4ad57963d61f6e672e5ee51e1cf3f18b85a85..3e926caa90b9706f7bc13e59787f84ca679633f1 100755 (executable)
@@ -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 (executable)
index 0000000..4f8294e
--- /dev/null
@@ -0,0 +1,116 @@
+#!/bin/bash
+#
+# Copyright (C) 2022 Jérémie Galarneau <jeremie.galarneau@efficios.com>
+#
+# 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"
This page took 0.029558 seconds and 4 git commands to generate.