From: Jonathan Rajotte Date: Thu, 14 Feb 2019 02:33:35 +0000 (-0500) Subject: Test: lttng clear command for snapshot session X-Git-Url: http://git.efficios.com/?p=lttng-tools.git;a=commitdiff_plain;h=806530f232d6b76d86f6c03263ca443aa0f5a08c Test: lttng clear command for snapshot session Signed-off-by: Jonathan Rajotte --- diff --git a/configure.ac b/configure.ac index c152475df..7b974ccd8 100644 --- a/configure.ac +++ b/configure.ac @@ -1119,6 +1119,7 @@ AC_CONFIG_FILES([ tests/regression/tools/regen-statedump/Makefile tests/regression/tools/notification/Makefile tests/regression/tools/rotation/Makefile + tests/regression/tools/clear/Makefile tests/regression/ust/Makefile tests/regression/ust/nprocesses/Makefile tests/regression/ust/high-throughput/Makefile diff --git a/tests/regression/Makefile.am b/tests/regression/Makefile.am index 775240405..9eb7d53d0 100644 --- a/tests/regression/Makefile.am +++ b/tests/regression/Makefile.am @@ -31,7 +31,9 @@ TESTS = tools/filtering/test_invalid_filter \ tools/rotation/test_ust \ tools/rotation/test_kernel \ tools/rotation/test_save_load_mi \ - tools/rotation/test_schedule_api + tools/rotation/test_schedule_api \ + tools/clear/test_ust \ + tools/clear/test_kernel if HAVE_LIBLTTNG_UST_CTL SUBDIRS += ust diff --git a/tests/regression/tools/Makefile.am b/tests/regression/tools/Makefile.am index dea993886..e2e3bf277 100644 --- a/tests/regression/tools/Makefile.am +++ b/tests/regression/tools/Makefile.am @@ -1,2 +1,2 @@ SUBDIRS = streaming filtering health tracefile-limits snapshots live exclusion save-load mi \ - wildcard crash regen-metadata regen-statedump notification rotation + wildcard crash regen-metadata regen-statedump notification rotation clear diff --git a/tests/regression/tools/clear/Makefile.am b/tests/regression/tools/clear/Makefile.am new file mode 100644 index 000000000..aa700f172 --- /dev/null +++ b/tests/regression/tools/clear/Makefile.am @@ -0,0 +1,16 @@ +noinst_SCRIPTS = test_kernel test_ust +EXTRA_DIST = test_kernel test_ust + +all-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + cp -f $(srcdir)/$$script $(builddir); \ + done; \ + fi + +clean-local: + @if [ x"$(srcdir)" != x"$(builddir)" ]; then \ + for script in $(EXTRA_DIST); do \ + rm -f $(builddir)/$$script; \ + done; \ + fi diff --git a/tests/regression/tools/clear/test_kernel b/tests/regression/tools/clear/test_kernel new file mode 100755 index 000000000..d3e17fe7a --- /dev/null +++ b/tests/regression/tools/clear/test_kernel @@ -0,0 +1,171 @@ +#!/bin/bash +# +# Copyright (C) - 2019 Jonathan Rajotte-Julien +# +# 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 + +TEST_DESC="Clear - Kernel tracing" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. +EVENT_NAME="lttng_test_filter_event" + +TRACE_PATH=$(mktemp -d) + +NUM_TESTS=55 + +source $TESTDIR/utils/utils.sh + +function clean_path () +{ + local trace_path=$1 + set -u + rm -rf $trace_path/* + set +u +} + +function test_kernel_streaming () +{ + diag "Test kernel streaming clear" + create_lttng_session_uri $SESSION_NAME net://localhost + lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for streaming MUST be implemented + # This validate that for now we fail correctly + lttng_clear_session_fail $SESSION_NAME + + destroy_lttng_session_ok $SESSION_NAME +} + +function test_kernel_streaming_live () +{ + diag "Test kernel streaming live clear" + create_lttng_session_uri $SESSION_NAME net://localhost "--live" + lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for streaming MUST be implemented + # This validate that for now we fail correctly + lttng_clear_session_fail $SESSION_NAME + + destroy_lttng_session_ok $SESSION_NAME +} + +function test_kernel_local () +{ + diag "Test kernel local" + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + lttng_enable_kernel_event $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for local MUST be implemented + lttng_clear_session_fail $SESSION_NAME + # TODO: validate that the previous chunk IS no more present + + destroy_lttng_session_ok $SESSION_NAME +} + +function do_kernel_snapshot () +{ + local session_name=$1 + local trace_path=$2 + + lttng_enable_kernel_event $session_name $EVENT_NAME + start_lttng_tracing_ok $session_name + + # Generate 10 events that will sit in the buffers. + echo -n "10" > /proc/lttng-test-filter-event + + # Take a first snapshot and validate that the events are present. + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_count $EVENT_NAME $trace_path 10 + + # Clean the output path + clean_path $trace_path + start_lttng_tracing_ok $session_name + + lttng_clear_session_ok $session_name + + # Make sure the subsequent snapshot is empty and valid. + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_empty $trace_path + + # Clean the output path + clean_path $trace_path + start_lttng_tracing_ok $session_name + + # Make sure that everything still works, generate events and take a + # snapshot. + echo -n "10" > /proc/lttng-test-filter-event + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_count $EVENT_NAME $trace_path 10 +} + +function test_kernel_streaming_snapshot () +{ + diag "Test kernel streaming snapshot clear" + + create_lttng_session_uri $SESSION_NAME net://localhost "--snapshot" + do_kernel_snapshot $SESSION_NAME $TRACE_PATH + destroy_lttng_session_ok $SESSION_NAME +} + +function test_kernel_local_snapshot () +{ + diag "Test kernel local snapshot clear" + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot" + do_kernel_snapshot $SESSION_NAME $TRACE_PATH + destroy_lttng_session_ok $SESSION_NAME +} + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + +if [ "$(id -u)" == "0" ]; then + isroot=1 +else + isroot=0 +fi + +tests=( test_kernel_streaming + test_kernel_streaming_live + test_kernel_local + test_kernel_streaming_snapshot + test_kernel_local_snapshot +) + +skip $isroot "Root access is needed. Skipping all kernel streaming tests." $NUM_TESTS || +{ + validate_lttng_modules_present + + start_lttng_relayd "-o $TRACE_PATH" + start_lttng_sessiond + modprobe lttng-test + + for fct_test in ${tests[@]}; + do + SESSION_NAME=$(randstring 16 0) + ${fct_test} + clean_path $TRACE_PATH + done + + rmmod lttng-test + stop_lttng_sessiond + stop_lttng_relayd +} + +clean_path $TRACE_PATH diff --git a/tests/regression/tools/clear/test_ust b/tests/regression/tools/clear/test_ust new file mode 100755 index 000000000..ae3105c00 --- /dev/null +++ b/tests/regression/tools/clear/test_ust @@ -0,0 +1,213 @@ +#!/bin/bash +# +# Copyright (C) - 2019 Jonathan Rajotte-Julien +# +# 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 + +TEST_DESC="Clear - UST tracing" + +CURDIR=$(dirname $0)/ +TESTDIR=$CURDIR/../../.. +EVENT_NAME="tp:tptest" +SESSION_NAME="" +TESTAPP_PATH="$TESTDIR/utils/testapp" +TESTAPP_NAME="gen-ust-events" +TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" + +NUM_TESTS=69 + +TRACE_PATH=$(mktemp -d) + +source $TESTDIR/utils/utils.sh + +if [ ! -x "$TESTAPP_BIN" ]; then + BAIL_OUT "No UST events binary detected." +fi + +function clean_path () +{ + local trace_path=$1 + set -u + rm -rf $trace_path/* + set +u +} + +function test_ust_streaming () +{ + diag "Test ust streaming clear" + create_lttng_session_uri $SESSION_NAME net://localhost + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for streaming MUST be implemented + # This validate that for now we fail correctly + lttng_clear_session_fail $SESSION_NAME + + destroy_lttng_session_ok $SESSION_NAME +} + +function test_ust_streaming_live () +{ + diag "Test ust streaming live clear" + create_lttng_session_uri $SESSION_NAME net://localhost "--live" + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for streaming MUST be implemented + # This validate that for now we fail correctly + lttng_clear_session_fail $SESSION_NAME + + destroy_lttng_session_ok $SESSION_NAME +} + +function test_ust_local () +{ + diag "Test ust local" + create_lttng_session_ok $SESSION_NAME $TRACE_PATH + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME + start_lttng_tracing_ok $SESSION_NAME + # TODO: place holder, support for local MUST be implemented + lttng_clear_session_fail $SESSION_NAME + # TODO: validate that the previous chunk IS no more present + + destroy_lttng_session_ok $SESSION_NAME +} + +function do_ust_snapshot () +{ + local session_name=$1 + local trace_path=$2 + + enable_ust_lttng_event_ok $session_name $EVENT_NAME + start_lttng_tracing_ok $session_name + + # Generate 10 events that will sit in the buffers. + $TESTAPP_BIN -i 10 + + # Take a first snapshot and validate that the events are present. + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_count $EVENT_NAME $trace_path 10 + + # Clean the output path + clean_path $trace_path + start_lttng_tracing_ok $session_name + + lttng_clear_session_ok $session_name + + # Make sure the subsequent snapshot is empty and valid. + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_empty $trace_path + + # Clean the output path + clean_path $trace_path + start_lttng_tracing_ok $session_name + + # Make sure that everything still works, generate events and take a + # snapshot. + $TESTAPP_BIN -i 10 + lttng_snapshot_record $session_name + stop_lttng_tracing_ok $session_name + validate_trace_count $EVENT_NAME $trace_path 10 +} + +function test_ust_streaming_snapshot () +{ + diag "Test ust streaming snapshot clear" + + create_lttng_session_uri $SESSION_NAME net://localhost "--snapshot" + do_ust_snapshot $SESSION_NAME $TRACE_PATH + destroy_lttng_session_ok $SESSION_NAME +} + +function test_ust_local_snapshot () +{ + diag "Test ust local snapshot clear" + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot" + do_ust_snapshot $SESSION_NAME $TRACE_PATH + destroy_lttng_session_ok $SESSION_NAME +} + +function test_ust_local_snapshot_per_pid () +{ + diag "Test ust local snapshot clear per pid " + local channel_name="channel0" + local file_sync_before_last=$(mktemp -u) + local file_sync_before_last_touch=$(mktemp -u) + + create_lttng_session_ok $SESSION_NAME $TRACE_PATH "--snapshot" + enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-pid + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name + start_lttng_tracing_ok $SESSION_NAME + + # Generate 10 events that will sit in the buffers. + $TESTAPP_BIN -i 10 -w 0 \ + --sync-before-last-event ${file_sync_before_last} \ + --sync-before-last-event-touch ${file_sync_before_last_touch} >/dev/null 2>&1 & + + # Continue only when there is only the last event remaining. + while [ ! -f "${file_sync_before_last_touch}" ]; do + sleep 0.5 + done + + # Take a first snapshot and validate that the events are present. + lttng_snapshot_record $SESSION_NAME + stop_lttng_tracing_ok $SESSION_NAME + validate_trace_count $EVENT_NAME $TRACE_PATH 9 + + # Clean the output path + clean_path $TRACE_PATH + start_lttng_tracing_ok $SESSION_NAME + + lttng_clear_session_ok $SESSION_NAME + + # Make sure the subsequent snapshot is empty and valid. + lttng_snapshot_record $SESSION_NAME + stop_lttng_tracing_ok $SESSION_NAME + validate_trace_empty $TRACE_PATH + + touch ${file_sync_before_last} + wait + destroy_lttng_session_ok $SESSION_NAME + + rm -f ${file_sync_before_last} + rm -f ${file_sync_before_last_touch} +} + +plan_tests $NUM_TESTS + +print_test_banner "$TEST_DESC" + + +tests=( + test_ust_streaming + test_ust_streaming_live + test_ust_local + test_ust_streaming_snapshot + test_ust_local_snapshot + test_ust_local_snapshot_per_pid +) + +start_lttng_relayd "-o $TRACE_PATH" +start_lttng_sessiond + +for fct_test in ${tests[@]}; +do + SESSION_NAME=$(randstring 16 0) + ${fct_test} + clean_path $TRACE_PATH +done + +stop_lttng_sessiond +stop_lttng_relayd diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh index 94b3a3c45..24256e436 100644 --- a/tests/utils/utils.sh +++ b/tests/utils/utils.sh @@ -1285,7 +1285,6 @@ function lttng_snapshot_del_output_fail () function lttng_snapshot_record () { local sess_name=$1 - local trace_path=$2 $TESTDIR/../src/bin/lttng/$LTTNG_BIN snapshot record -s $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ok $? "Snapshot recorded" @@ -1769,3 +1768,28 @@ function lttng_enable_rotation_size_fail () { lttng_enable_rotation_size 1 $@ } + +function lttng_clear_session () +{ + local expected_to_fail=$1 + local sess_name=$2 + + $TESTDIR/../src/bin/lttng/$LTTNG_BIN clear $sess_name 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + ret=$? + if [[ $expected_to_fail -eq "1" ]]; then + test "$ret" -ne "0" + ok $? "Expected fail on clear session $sess_name" + else + ok $ret "Clear session $sess_name" + fi +} + +function lttng_clear_session_ok () +{ + lttng_clear_session 0 $@ +} + +function lttng_clear_session_fail () +{ + lttng_clear_session 1 $@ +}