#!/bin/bash # # Copyright (C) - 2018 Jonathan Rajotte # # 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="LTTng relayd filesystem grouping - Userspace tracing" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. NR_ITER=10 NR_USEC_WAIT=100 TESTAPP_PATH="$TESTDIR/utils/testapp" TESTAPP_NAME="gen-ust-events" TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" EVENT_NAME="tp:tptest" XSD_PATH=$TESTDIR/../src/common/mi-lttng-3.0.xsd XML_VALIDATE="$TESTDIR/regression/tools/mi/validate_xml $XSD_PATH" XML_EXTRACT="$TESTDIR/regression/tools/mi/extract_xml" XPATH_CMD_OUTPUT="//lttng:command/lttng:output" XPATH_SESSION="$XPATH_CMD_OUTPUT/lttng:sessions/lttng:session" TRACE_PATH=$(mktemp -d) NUM_TESTS=229 source $TESTDIR/utils/utils.sh if [ ! -x "$TESTAPP_BIN" ]; then BAIL_OUT "No UST events binary detected." fi function get_auto_session_name () { local __result=$1 LTTNG_BIN="lttng --mi xml" OUTPUT_DEST=$(mktemp -u) list_lttng_with_opts $XML_VALIDATE ${OUTPUT_DEST} ok $? "Valid lttng list XML" value=$($XML_EXTRACT ${OUTPUT_DEST} ${XPATH_SESSION}/lttng:name/text\(\)) ok $? "Extraction of session name" OUTPUT_DEST=/dev/null LTTNG_BIN="lttng" eval $__result="'$value'" } function test_ust_uid_live_automatic_name () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer live with session name" create_lttng_session_uri "$session_name" net://localhost --live if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* set +x } function test_ust_uid_live () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer live with session name" create_lttng_session_uri "$session_name" net://localhost --live if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_pid_live () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST pid buffer live with session name" create_lttng_session_uri "$session_name" net://localhost --live if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi 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 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_uid_live_custom_output () { local session_name="$1" local channel_name=$(randstring 8 0) local custom_output="my_live_custom_output" local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer live with session name, custom output" create_lttng_session_uri "$session_name" net://localhost/$custom_output --live if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/$custom_output } function test_ust_uid_streaming () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer streaming with session name" create_lttng_session_uri "$session_name" net://localhost if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_pid_streaming () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST pid buffer streaming with session name" create_lttng_session_uri "$session_name" net://localhost if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi 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 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_uid_streaming_custom_output () { local session_name="$1" local channel_name=$(randstring 8 0) local custom_output="custom_second_token" local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer streaming with session name, custom output" create_lttng_session_uri "$session_name" net://localhost/$custom_output if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/$custom_output } function test_ust_uid_streaming_rotate () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer rotate with session name" create_lttng_session_uri "$session_name" net://localhost if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT rotate_session_ok $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_uid_streaming_rotate_custom_output () { local session_name="$1" local channel_name=$(randstring 8 0) local custom_output="rotate_custom_path" local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer rotate with session name, custom output" create_lttng_session_uri "$session_name" net://localhost/$custom_output if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT rotate_session_ok $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/$custom_output } function test_ust_pid_streaming_rotate () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST pid buffer rotate with session_name" create_lttng_session_uri "$session_name" net://localhost if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi 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 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT rotate_session_ok $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_uid_streaming_snapshot () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer snapshot streaming with session name using 'create --snapshot'" create_lttng_session_uri "$session_name" net://localhost --snapshot if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_ust_lttng_channel_ok $session_name $channel_name "--buffers-uid" enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT lttng_snapshot_record $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME* } function test_ust_pid_streaming_snapshot () { local session_name="$1" local channel_name=$(randstring 8 0) local file_sync_after_first=$(mktemp -u) local file_sync_before_last=$(mktemp -u) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST pid buffer snapshot streaming with session name using 'create --snapshot'" create_lttng_session_uri "$session_name" net://localhost --snapshot if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi 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 $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT ${file_sync_after_first} ${file_sync_before_last} /dev/null 2>&1 & while [ ! -f "${file_sync_after_first}" ]; do sleep 0.5 done lttng_snapshot_record $session_name touch ${file_sync_before_last} wait stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/snapshot-1* rm -rf ${file_sync_after_first} rm -rf ${file_sync_before_last} } function test_ust_uid_streaming_snapshot_add_output_default_name () { local session_name="$1" local channel_name=$(randstring 8 0) local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer snapshot using 'add-output' with default snapshot name" create_lttng_session_no_output "$session_name" if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_lttng_mmap_overwrite_ust_channel $session_name $channel_name enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT lttng_snapshot_add_output_ok $session_name "net://localhost" lttng_snapshot_record $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/snapshot-1* } function test_ust_uid_streaming_snapshot_add_output_custom_name () { local session_name="$1" local channel_name=$(randstring 8 0) local snapshot_name="this_is_my_snapshot" local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer snapshot using 'add-output' with custom snapshot name" create_lttng_session_no_output "$session_name" if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_lttng_mmap_overwrite_ust_channel $session_name $channel_name enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT lttng_snapshot_add_output_ok $session_name "net://localhost" "-n $snapshot_name" lttng_snapshot_record $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/$snapshot_name* } function test_ust_uid_streaming_snapshot_add_output_custom_name_custom_output () { local session_name="$1" local channel_name=$(randstring 8 0) local snapshot_name="this_is_my_snapshot" local custom_output="this/is/my/custom/path" local is_automatic_session=false if [ -z "$session_name" ]; then is_automatic_session=true fi diag "Test UST uid buffer snapshot using 'add-output' with custom snapshot name and custom output path" create_lttng_session_no_output "$session_name" if [ "$is_automatic_session" = true ]; then get_auto_session_name session_name fi enable_lttng_mmap_overwrite_ust_channel $session_name $channel_name enable_ust_lttng_event_ok $session_name $EVENT_NAME $channel_name start_lttng_tracing_ok $session_name $TESTAPP_BIN $NR_ITER $NR_USEC_WAIT lttng_snapshot_add_output_ok $session_name "net://localhost/$custom_output" "-n $snapshot_name" lttng_snapshot_record $session_name stop_lttng_tracing_ok $session_name destroy_lttng_session_ok $session_name # When session name is automatic, the actual directory is "auto", not # auto-. if [ "$is_automatic_session" = true ]; then session_name="auto" fi validate_trace $EVENT_NAME $TRACE_PATH/$session_name/$HOSTNAME*/$custom_output/$snapshot_name* } plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" # Set the relayd in --group-output-by-session mode start_lttng_relayd "-o $TRACE_PATH --group-output-by-session" start_lttng_sessiond tests=( test_ust_uid_live test_ust_pid_live test_ust_uid_live_custom_output test_ust_uid_streaming test_ust_pid_streaming test_ust_uid_streaming_custom_output # Rotation does not exist on stable 2.9 # test_ust_uid_streaming_rotate # test_ust_uid_streaming_rotate_custom_output # test_ust_pid_streaming_rotate test_ust_uid_streaming_snapshot test_ust_pid_streaming_snapshot test_ust_uid_streaming_snapshot_add_output_default_name test_ust_uid_streaming_snapshot_add_output_custom_name test_ust_uid_streaming_snapshot_add_output_custom_name_custom_output ) name="" # Perform test when session name is generated by the client for fct_test in ${tests[@]}; do ${fct_test} "$name" rm -rf $TRACE_PATH/auto/ count=$(ls -1 $TRACE_PATH/ | wc -l) is $count "0" "LTTng-relayd output directory empty" done # Perform test when session name is given for fct_test in ${tests[@]}; do name=$(randstring 16 0) ${fct_test} "$name" rm -rf $TRACE_PATH/$name/ count=$(ls -1 $TRACE_PATH/ | wc -l) is $count "0" "LTTng-relayd output directory empty" done rm -rf $TRACE_PATH stop_lttng_sessiond stop_lttng_relayd