Tests: size-based rotation: implement a trace size cutoff protection
[lttng-tools.git] / tests / regression / tools / rotation / test_kernel
index 6f5647f373ca723e76b430ab0182d6480b55265f..760930e958a506754fafd9b7689d662910431355 100755 (executable)
@@ -1,30 +1,18 @@
 #!/bin/bash
 #
-# Copyright (C) 2017 Julien Desfossez <jdesfossez@efficios.com>
+# Copyright (C) 2017 Julien Desfossez <jdesfossez@efficios.com>
 #
-# This library is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Lesser General Public License as published by the Free
-# Software Foundation; version 2.1 of the License.
-#
-# This library is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Lesser General Public License
-# along with this library; if not, write to the Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+# SPDX-License-Identifier: LGPL-2.1-only
+
 TEST_DESC="Rotation - Kernel tracing"
 
 CURDIR=$(dirname $0)/
 TESTDIR=$CURDIR/../../..
 EVENT_NAME="lttng_test_filter_event"
-PID_RELAYD=0
-SESSION_NAME=""
 
-TRACE_PATH=$(mktemp -d)
+TRACE_PATH=$(mktemp --tmpdir -d -t tmp.rotation_kernel_tracing.XXXXXX)
 
-NUM_TESTS=68
+NUM_TESTS=66
 
 source $TESTDIR/utils/utils.sh
 source $CURDIR/rotate_utils.sh
@@ -50,23 +38,14 @@ function rotate_kernel_test ()
 
        destroy_lttng_session_ok $SESSION_NAME
 
-       # The tests on the chunk folder rely on the date staying the same during
-       # the duration of the test, if this fail we will now why the other checks
-       # fail afterwards. There is a short window of time where an automated test
-       # could fail because of that.
-       now=$(date +%Y%m%d)
-       test $today = $now
-       ok $? "Date did not change during the test"
-
-       validate_test_chunks $local_path $today kernel kernel 0
+       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}*"
-       clean_path $TRACE_PATH
+       rotate_kernel_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*/archives"
 }
 
 function test_kernel_local ()
@@ -74,7 +53,7 @@ function test_kernel_local ()
        diag "Test kernel local with session rotation"
        create_lttng_session_ok $SESSION_NAME $TRACE_PATH
 
-       rotate_kernel_test "${TRACE_PATH}"
+       rotate_kernel_test "${TRACE_PATH}/archives"
 }
 
 function test_kernel_local_timer ()
@@ -85,7 +64,7 @@ function test_kernel_local_timer ()
        lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
        start_lttng_tracing_ok $SESSION_NAME
 
-       rotate_timer_test "${TRACE_PATH}" 0
+       rotate_timer_test "${TRACE_PATH}/archives" 0
 }
 
 function test_kernel_streaming_timer ()
@@ -96,13 +75,37 @@ function test_kernel_streaming_timer ()
        lttng_enable_rotation_timer_ok $SESSION_NAME 500ms
        start_lttng_tracing_ok $SESSION_NAME
 
-       rotate_timer_test "${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" 0
-       clean_path $TRACE_PATH
+       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
 
 if [ "$(id -u)" == "0" ]; then
        isroot=1
@@ -118,15 +121,16 @@ skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_
        start_lttng_sessiond
        modprobe lttng-test
 
-       tests=( test_kernel_streaming test_kernel_local test_kernel_local_timer test_kernel_streaming_timer)
+       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
 
-       rmmod lttng-test
+       modprobe --remove lttng-test
        stop_lttng_sessiond
        stop_lttng_relayd
 }
This page took 0.026832 seconds and 4 git commands to generate.