#!/bin/bash # # Copyright (C) 2015 Jonathan Rajotte # Copyright (C) 2016 Mathieu Desnoyers # # SPDX-License-Identifier: LGPL-2.1-only TEST_DESC="UST - Blocking mode" CURDIR=$(dirname $0)/ TESTDIR=$CURDIR/../../.. SESSION_NAME="blocking" CHANNEL_NAME="testchan" TESTAPP_PATH="$TESTDIR/utils/testapp" TESTAPP_NAME="gen-ust-events" TESTAPP_BIN="$TESTAPP_PATH/$TESTAPP_NAME/$TESTAPP_NAME" EVENT_NAME="tp:tptest" NUM_TESTS=49 # shellcheck source=../utils/utils.sh source "$TESTDIR/utils/utils.sh" # MUST set TESTDIR before calling those functions # Run app on a single CPU to ensure we only write in a single ring buffer. function run_app() { taskset --cpu-list "$(get_any_available_cpu)" $TESTAPP_BIN -i $NUM_EVENT ok $? "Application done" } function test_ust_implicit_no_blocking() { NUM_EVENT=5000000 diag "UST implicit non-blocking mode (default): will hang if fails" start_lttng_sessiond # session in no-output mode create_lttng_session_no_output $SESSION_NAME enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" start_lttng_tracing_ok $SESSION_NAME run_app stop_lttng_tracing_ok $SESSION_NAME destroy_lttng_session_ok $SESSION_NAME stop_lttng_sessiond ok 0 "Does not hang" } function test_ust_implicit_no_blocking_with_channel_blocking() { NUM_EVENT=5000000 diag "UST implicit non-blocking mode (default) with blocking-timeout=inf channel: will hang if fails" start_lttng_sessiond # session in no-output mode create_lttng_session_no_output $SESSION_NAME enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf" enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME start_lttng_tracing_ok $SESSION_NAME run_app stop_lttng_tracing_ok $SESSION_NAME destroy_lttng_session_ok $SESSION_NAME stop_lttng_sessiond ok 0 "Does not hang" } function test_ust_timeout_no_blocking() { NUM_EVENT=12500 diag "UST 1ms timeout blocking mode: will hang if fails" start_lttng_sessiond # session in no-output mode create_lttng_session_no_output $SESSION_NAME # blocking timeout 1ms enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000" enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME start_lttng_tracing_ok $SESSION_NAME LTTNG_UST_ALLOW_BLOCKING=1 run_app stop_lttng_tracing_ok $SESSION_NAME destroy_lttng_session_ok $SESSION_NAME stop_lttng_sessiond ok 0 "Does not hang" } function test_ust_snapshot_no_blocking() { NUM_EVENT=5000000 diag "UST blocking mode: don't block in snapshot mode" # Test without the plugin start_lttng_sessiond create_lttng_session_ok $SESSION_NAME $TRACE_PATH --snapshot # blocking timeout 1ms enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=1000" enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME start_lttng_tracing_ok $SESSION_NAME LTTNG_UST_ALLOW_BLOCKING=1 run_app stop_lttng_tracing_ok $SESSION_NAME destroy_lttng_session_ok $SESSION_NAME stop_lttng_sessiond ok 0 "Does not hang" } function test_ust_blocking_no_discard() { NUM_EVENT=5000000 diag "UST blocking mode: no event discarded" # Test without the plugin start_lttng_sessiond create_lttng_session_ok $SESSION_NAME $TRACE_PATH # infinite blocking timeout enable_ust_lttng_channel_ok $SESSION_NAME $CHANNEL_NAME "--blocking-timeout=inf" enable_ust_lttng_event_ok $SESSION_NAME "$EVENT_NAME" $CHANNEL_NAME start_lttng_tracing_ok $SESSION_NAME LTTNG_UST_ALLOW_BLOCKING=1 run_app stop_lttng_tracing_ok $SESSION_NAME destroy_lttng_session_ok $SESSION_NAME stop_lttng_sessiond nr_events=$("$BABELTRACE_BIN" $TRACE_PATH 2>/dev/null | wc -l) test $nr_events -eq $NUM_EVENT ok $? "No event lost with UST blocking mode: found $nr_events expect $NUM_EVENT" } plan_tests $NUM_TESTS print_test_banner "$TEST_DESC" bail_out_if_no_babeltrace TESTS=( "test_ust_implicit_no_blocking" "test_ust_implicit_no_blocking_with_channel_blocking" "test_ust_timeout_no_blocking" "test_ust_snapshot_no_blocking" "test_ust_blocking_no_discard" ) TEST_COUNT=${#TESTS[@]} i=0 while [ "$i" -lt "$TEST_COUNT" ]; do TRACE_PATH=$(mktemp -d -t tmp.test_blocking_ust_trace_path.XXXXXX) # Execute test ${TESTS[$i]} rm -rf $TRACE_PATH let "i++" done