From: Jérémie Galarneau Date: Thu, 16 Jul 2020 21:17:08 +0000 (-0400) Subject: Tests: add a "new metadata after clear" test X-Git-Tag: v2.13.0-rc1~594 X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=commitdiff_plain;h=bc3c79aee8149b3e983d38bae4bf455dad927296 Tests: add a "new metadata after clear" test Add a test that validates that the relay daemon performs a metadata stream rotation after a clear. The test enables a single event and launches a test application to trigger it 10 times. Once the 10 event occurrences have been seen by the live client, the session is cleared. Then, two new events (statedump start and end) are enabled. This causes new event descriptions to be appended to the metadata stream. After a clear, the relay daemon should rotate the metadata stream and send the new contents to the client. The client will then be able to decode the statedump start/end events. Signed-off-by: Jérémie Galarneau Change-Id: Ie6057577e3ee8a7c3ed1a84941308d10d372c16c --- diff --git a/tests/regression/tools/clear/test_ust b/tests/regression/tools/clear/test_ust index 45abc9112..04b713909 100755 --- a/tests/regression/tools/clear/test_ust +++ b/tests/regression/tools/clear/test_ust @@ -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=1915 +NUM_TESTS=2071 PAGE_SIZE=$(getconf PAGE_SIZE) TRACE_PATH=$(mktemp -d) @@ -273,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" @@ -324,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 @@ -727,6 +816,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 diff --git a/tests/utils/utils.sh b/tests/utils/utils.sh index 0583b5c19..8e6563d06 100644 --- a/tests/utils/utils.sh +++ b/tests/utils/utils.sh @@ -1179,8 +1179,16 @@ function enable_ust_lttng_event_filter() local sess_name="$1" local event_name="$2" local filter="$3" + local channel_name=$4 + + if [ -z $channel_name ]; then + # default channel if none specified + chan="" + else + chan="-c $channel_name" + fi - $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST + $TESTDIR/../src/bin/lttng/$LTTNG_BIN enable-event $chan "$event_name" -s $sess_name -u --filter "$filter" 1> $OUTPUT_DEST 2> $ERROR_OUTPUT_DEST ok $? "Enable event $event_name with filtering for session $sess_name" }