1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
#!/bin/bash
#
# SPDX-FileCopyrightText: 2017 Julien Desfossez <jdesfossez@efficios.com>
#
# SPDX-License-Identifier: LGPL-2.1-only
TEST_DESC="Rotation - Kernel tracing"
CURDIR=$(dirname $0)/
TESTDIR=$CURDIR/../../..
EVENT_NAME="lttng_test_filter_event"
TRACE_PATH=$(mktemp -d -t tmp.rotation_kernel_tracing.XXXXXX)
NUM_TESTS=68
source $TESTDIR/utils/utils.sh
source $CURDIR/rotate_utils.sh
function rotate_kernel_test ()
{
local_path=$1
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
start_lttng_tracing_ok $SESSION_NAME
today=$(date +%Y%m%d)
# First chunk contains 10 events.
echo -n "10" > /proc/lttng-test-filter-event
rotate_session_ok $SESSION_NAME
# Second chunk contains 20 events.
echo -n "20" > /proc/lttng-test-filter-event
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
validate_test_chunks $local_path $today kernel kernel
}
function test_kernel_streaming ()
{
diag "Test kernel streaming with session rotation"
create_lttng_session_uri $SESSION_NAME net://localhost
rotate_kernel_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*/archives"
}
function test_kernel_local ()
{
diag "Test kernel local with session rotation"
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
rotate_kernel_test "${TRACE_PATH}/archives"
}
function test_kernel_local_timer ()
{
diag "Test kernel local with session rotation timer"
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
start_lttng_tracing_ok $SESSION_NAME
rotate_timer_test "${TRACE_PATH}/archives" 0
}
function test_kernel_streaming_timer ()
{
diag "Test kernel remote with session rotation timer"
create_lttng_session_uri $SESSION_NAME net://localhost
lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME
lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
start_lttng_tracing_ok $SESSION_NAME
rotate_timer_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*/archives" 0
}
function produce_n_events ()
{
local event_count=$1
echo -n $event_count > /proc/lttng-test-filter-event
}
function test_kernel_local_size ()
{
diag "Rotate kernel local session every 2MiB"
local size_threshold=$((2 * 1024 * 1024))
diag "Test ust local with size-based session rotation per-uid"
create_lttng_session_ok $SESSION_NAME $TRACE_PATH
enable_kernel_lttng_event_ok $SESSION_NAME $EVENT_NAME "channel0"
lttng_enable_rotation_size_ok $SESSION_NAME $size_threshold
start_lttng_tracing_ok $SESSION_NAME
# Cutoff at 100 times the expected size
trace_until_n_archives produce_n_events "$TRACE_PATH" 5 $((5 * 100 * size_threshold))
destroy_lttng_session_ok $SESSION_NAME
}
plan_tests $NUM_TESTS
print_test_banner "$TEST_DESC"
bail_out_if_no_babeltrace
check_skip_kernel_test "$NUM_TESTS" "Skipping all tests." ||
{
lttng_modules_loaded_fail
validate_lttng_modules_present
start_lttng_relayd "-o $TRACE_PATH"
start_lttng_sessiond
modprobe lttng-test
tests=( test_kernel_streaming test_kernel_local test_kernel_local_timer test_kernel_streaming_timer test_kernel_local_size )
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
lttng_modules_loaded_fail
}
rm -rf $TRACE_PATH
|