X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Fregression%2Ftools%2Fclear%2Ftest_ust;h=3983d121533d4ff5d837c7c0fbf028296f709821;hp=dcfc0ee0c855a413a6cf9211472dde90d4256a33;hb=061cde02380517539628893c5ed7be0de4245f3f;hpb=9d16b343fb9e781fc8d8fa3c448a3f382306dd33 diff --git a/tests/regression/tools/clear/test_ust b/tests/regression/tools/clear/test_ust index dcfc0ee0c..3983d1215 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,12 +9,14 @@ 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=1683 +NUM_TESTS=2071 PAGE_SIZE=$(getconf PAGE_SIZE) TRACE_PATH=$(mktemp -d) @@ -29,7 +31,7 @@ function clean_path () { local trace_path=$1 set -u - rm -rf $trace_path/* + rm -rf $trace_path set +u } @@ -113,6 +115,31 @@ function test_ust_streaming () destroy_lttng_session_ok $SESSION_NAME } +function test_ust_streaming_no_event () +{ + local tracing_active=$1 + local clear_twice=$2 + #local rotate_before=$3 ignored + #local rotate_after=$4 + local buffer_type=uid + local local_path="${TRACE_PATH}/${HOSTNAME}/${SESSION_NAME}*" + local channel_name="chan" + + diag "Test ust streaming clear no event" + diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type" + create_lttng_session_uri $SESSION_NAME net://localhost + enable_ust_lttng_channel_ok $SESSION_NAME $channel_name --buffers-$buffer_type + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name + start_lttng_tracing_ok $SESSION_NAME + + do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after" + stop_lttng_tracing_ok $SESSION_NAME + + validate_directory_empty "$local_path" + + destroy_lttng_session_ok $SESSION_NAME +} + function test_ust_streaming_rotate_clear () { local tracing_active=$1 @@ -198,7 +225,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 } @@ -244,7 +275,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" @@ -295,6 +326,93 @@ 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 + local bt_error_path + local file_sync_before_exit + + bt_output_path=$(mktemp -d)/bt-output.txt + bt_error_path=$(mktemp -d)/bt-output.err + file_sync_before_exit=$(mktemp -u) + + 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" +} + function test_ust_local () { local tracing_active=$1 @@ -320,13 +438,40 @@ 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 destroy_lttng_session_ok $SESSION_NAME } +function test_ust_local_no_event () +{ + local tracing_active=$1 + local clear_twice=$2 + #local rotate_before=$3 ignored + #local rotate_after=$4 ignored + local buffer_type=$5 + local channel_name="chan" + + diag "Test ust local no event" + diag "Parameters: tracing_active=$tracing_active, clear_twice=$clear_twice, rotate_before=$rotate_before, rotate_after=$rotate_after, buffer_type=$buffer_type" + create_lttng_session_ok $SESSION_NAME "$TRACE_PATH" + enable_ust_lttng_channel_ok $SESSION_NAME $channel_name "--buffers-$buffer_type" + enable_ust_lttng_event_ok $SESSION_NAME $EVENT_NAME $channel_name + start_lttng_tracing_ok $SESSION_NAME + + do_clear_session $SESSION_NAME "$tracing_active" "$clear_twice" "$rotate_before" "$rotate_after" + stop_lttng_tracing_ok $SESSION_NAME + + validate_directory_empty "$TRACE_PATH" + + destroy_lttng_session_ok $SESSION_NAME +} + function test_ust_local_rotate_clear () { local tracing_active=$1 @@ -665,16 +810,19 @@ streaming_tests=(test_ust_streaming test_ust_streaming_clear_rotate test_ust_streaming_tracefile_rotation test_ust_streaming_tracefile_rotation_overwrite_files + test_ust_streaming_no_event ) 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 test_ust_local_rotate_clear test_ust_local_clear_rotate + test_ust_local_no_event ) snapshot_uid_tests=(test_ust_streaming_snapshot