X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=tests%2Fregression%2Ftools%2Fclear%2Ftest_ust;h=519671ce39c0fe7487cf673af1e097d0f2579f26;hb=2a05e025c52eda43f8ebafdbe6f47dc0e80efa77;hp=e121614d239ba00c42e434c570e51636079dd4fc;hpb=69ebf37e42e67cbd8dca80e9f5f074e88770af2d;p=lttng-tools.git diff --git a/tests/regression/tools/clear/test_ust b/tests/regression/tools/clear/test_ust index e121614d2..519671ce3 100755 --- a/tests/regression/tools/clear/test_ust +++ b/tests/regression/tools/clear/test_ust @@ -1,6 +1,6 @@ #!/bin/bash # -# Copyright (C) 2019 Jonathan Rajotte-Julien +# Copyright (C) 2019 Jonathan Rajotte # # SPDX-License-Identifier: LGPL-2.1-only @@ -9,17 +9,20 @@ TEST_DESC="Clear - UST tracing" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. EVENT_NAME="tp:tptest" +EVENT_STATE_DUMP_START="lttng_ust_statedump:start" +EVENT_STATE_DUMP_END="lttng_ust_statedump:end" SESSION_NAME="" TESTAPP_PATH="$TESTDIR/utils/testapp" TESTAPP_NAME="gen-ust-events" TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" -NUM_TESTS=1915 +NUM_TESTS=2071 PAGE_SIZE=$(getconf PAGE_SIZE) -TRACE_PATH=$(mktemp -d) +TRACE_PATH=$(mktemp -d -t tmp.test_clear_ust_trace_path.XXXXXX) -source $TESTDIR/utils/utils.sh +# shellcheck source=../utils/utils.sh +source "$TESTDIR/utils/utils.sh" if [ ! -x "$TESTAPP_BIN" ]; then BAIL_OUT "No UST events binary detected." @@ -29,7 +32,7 @@ function clean_path () { local trace_path=$1 set -u - rm -rf $trace_path/* + rm -rf $trace_path set +u } @@ -223,7 +226,11 @@ function test_ust_streaming_live () do_clear_session $SESSION_NAME $tracing_active $clear_twice 0 0 stop_lttng_tracing_ok $SESSION_NAME - validate_directory_empty $local_path + if [[ "$buffer_type" == "uid" ]]; then + validate_trace_empty $local_path + else # pid + validate_directory_empty $local_path + fi destroy_lttng_session_ok $SESSION_NAME } @@ -238,8 +245,8 @@ function test_ust_basic_streaming_live_viewer () local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" local remote_trace_path="${HOSTNAME}/${SESSION_NAME}" local channel_name="chan" - local bt_output_path=$(mktemp -u) - local file_sync_before_exit=$(mktemp -u) + local bt_output_path=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_bt_output_path.XXXXXX) + local file_sync_before_exit=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_sync_before_exit.XXXXXX) diag "Test ust basic streaming live with viewer" diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type" @@ -269,7 +276,7 @@ function test_ust_basic_streaming_live_viewer () destroy_lttng_session_ok $SESSION_NAME touch $file_sync_before_exit - diag "Wait for application to exit" + diag "Waiting for application to exit" wait $app_pid pass "Wait for application to exit" diag "Wait for viewer to exit" @@ -290,7 +297,7 @@ function test_ust_streaming_live_viewer () local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" local remote_trace_path="${HOSTNAME}/${SESSION_NAME}" local channel_name="chan" - local bt_output_path=$(mktemp -d)/bt-output.txt + local bt_output_path=$(mktemp -u -t tmp.test_${FUNCNAME[0]}_bt_output_path.XXXXXX) diag "Test ust streaming live clear with viewer" diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type" @@ -320,6 +327,91 @@ function test_ust_streaming_live_viewer () clean_path $bt_output_path } +function test_ust_streaming_live_viewer_new_metadata_after_clear () +{ + local tracing_active=$1 + local clear_twice=$2 + # 3, 4 unused + local buffer_type=$5 + local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" + local remote_trace_path="${HOSTNAME}/${SESSION_NAME}" + local channel_name="chan" + + local bt_output_path=$(mktemp -t "tmp.${FUNCNAME[0]}_bt_output.XXXXXX") + local bt_error_path=$(mktemp -t "tmp.${FUNCNAME[0]}_bt_error.XXXXXX") + local file_sync_before_exit=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit.XXXXXX") + + diag "Test ust streaming live clear with viewer with new metadata after clear" + diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type" + create_lttng_session_uri "$SESSION_NAME" net://localhost "--live" + enable_ust_lttng_channel_ok "$SESSION_NAME" $channel_name "--buffers-$buffer_type" + + # The vpid context is added to filter events based on the vpid of the + # test application as state dump events are used. Regenerating a + # state dump will cause other instrumented application on the system + # to trigger a state dump which would throw off checks that rely on an + # event count. + add_context_ust_ok "$SESSION_NAME" $channel_name "vpid" + enable_ust_lttng_event_ok "$SESSION_NAME" $EVENT_NAME $channel_name + start_lttng_tracing_ok "$SESSION_NAME" + + wait_live_trace_ready net://localhost + + # Connect a live viewer + $BABELTRACE_BIN -i lttng-live "net://localhost/host/$remote_trace_path" 1> "$bt_output_path" 2> "$bt_error_path" & + local viewer_pid=$! + + wait_live_viewer_connect net://localhost + + $TESTAPP_BIN -i 10 --sync-before-exit "$file_sync_before_exit" & + local app_pid=$! + + diag "Wait until viewer sees all 10 expected events" + local evcount=0 + while [ $evcount -ne 10 ]; do + evcount=$(wc -l < "$bt_output_path") + sleep 0.5 + done + pass "Live viewer read $evcount events, expect 10" + + do_clear_session "$SESSION_NAME" "$tracing_active" "$clear_twice" 0 0 + + # Enable new events which will add their descriptions to the metadata + # file. This validates that, following a clear, the relay daemon rotates + # the metadata viewer stream to the new metadata file. + enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_START "\$ctx.vpid == $app_pid" $channel_name + enable_ust_lttng_event_filter "$SESSION_NAME" $EVENT_STATE_DUMP_END "\$ctx.vpid == $app_pid" $channel_name + + # Forcing a state dump to produce the two events enabled above + regenerate_statedump_ok "$SESSION_NAME" + + diag "Wait until viewer sees all 12 expected events" + local evcount=0 + while [ $evcount -ne 12 ]; do + evcount=$(wc -l < "$bt_output_path") + sleep 0.5 + done + pass "Live viewer read $evcount events, expect 12" + + stop_lttng_tracing_ok "$SESSION_NAME" + + destroy_lttng_session_ok "$SESSION_NAME" + + touch "$file_sync_before_exit" + diag "Waiting for application to exit" + wait $app_pid + pass "Wait for application to exit" + + diag "Wait for viewer to exit" + wait $viewer_pid + ok $? "Babeltrace succeeds" + pass "Wait for viewer to exit" + + clean_path "$bt_output_path" + clean_path "$bt_error_path" + rm -f "$file_sync_before_exit" +} + function test_ust_local () { local tracing_active=$1 @@ -345,7 +437,10 @@ function test_ust_local () if [[ "$buffer_type" == "uid" ]]; then validate_trace_empty $TRACE_PATH else # pid - validate_directory_empty $TRACE_PATH + + # The sessiond always created a `ust/ directory + # whenever the UST domain is active + validate_directory_empty $TRACE_PATH/ust/ fi fi @@ -523,10 +618,10 @@ function test_ust_local_snapshot_per_pid () # 3, 4 unused. local buffer_type=$5 local channel_name="channel0" - local file_sync_before_last=$(mktemp -u) - local file_sync_before_last_touch=$(mktemp -u) - local file_sync_before_exit=$(mktemp -u) - local file_sync_before_exit_touch=$(mktemp -u) + local file_sync_before_last=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_last.XXXXXX") + local file_sync_before_last_touch=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_last_touch.XXXXXX") + local file_sync_before_exit=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit.XXXXXX") + local file_sync_before_exit_touch=$(mktemp -u -t "tmp.${FUNCNAME[0]}_sync_before_exit_touch.XXXXXX") diag "Test ust local snapshot clear per pid" diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, buffer_type=$buffer_type" @@ -658,7 +753,7 @@ function test_ust_streaming_tracefile_rotation_overwrite_files () --tracefile-size=$PAGE_SIZE --tracefile-count=2 --buffers-$buffer_type enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name start_lttng_tracing_ok $SESSION_NAME - taskset -c 0 $TESTAPP_BIN -i 200000 + taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 200000 do_clear_session $SESSION_NAME $tracing_active $clear_twice $rotate_before $rotate_after stop_lttng_tracing_ok $SESSION_NAME @@ -673,7 +768,7 @@ function test_ust_streaming_tracefile_rotation_overwrite_files () fi start_lttng_tracing_ok $SESSION_NAME - taskset -c 0 $TESTAPP_BIN -i 400000 + taskset -c "$(get_any_available_cpu)" $TESTAPP_BIN -i 400000 stop_lttng_tracing_ok if [[ $rotate_before -eq 1 ]]; then @@ -709,6 +804,8 @@ plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" +bail_out_if_no_babeltrace + streaming_tests=(test_ust_streaming test_ust_streaming_rotate_clear test_ust_streaming_clear_rotate @@ -720,6 +817,7 @@ streaming_tests=(test_ust_streaming live_tests=(test_ust_streaming_live test_ust_basic_streaming_live_viewer test_ust_streaming_live_viewer + test_ust_streaming_live_viewer_new_metadata_after_clear ) local_tests=(test_ust_local @@ -842,3 +940,5 @@ stop_lttng_sessiond stop_lttng_relayd test_ust_disallow_clear + +rm -rf "$TRACE_PATH"