1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
#!/bin/bash
#
# SPDX-FileCopyrightText: 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
#
# SPDX-License-Identifier: LGPL-2.1-only
TEST_DESC="Triggers - Start and stop actions"
CURDIR=$(dirname "$0")/
TESTDIR=${CURDIR}/../../../..
# shellcheck source=../../../../utils/utils.sh
source "$TESTDIR/utils/utils.sh"
TESTAPP_PATH="$TESTDIR/utils/testapp"
GEN_UST_EVENTS_TESTAPP_NAME="gen-ust-events"
GEN_UST_EVENTS_TESTAPP_BIN="$TESTAPP_PATH/$GEN_UST_EVENTS_TESTAPP_NAME/$GEN_UST_EVENTS_TESTAPP_NAME"
FULL_LTTNG_BIN="$TESTDIR/../src/bin/lttng/$LTTNG_BIN"
NOTIFICATION_CLIENT_BIN="$CURDIR/../utils/notification-client"
NUM_TESTS=18
NR_ITER=5
NR_USEC_WAIT=5
function lttng_session_is_active()
{
local SESSION_NAME="$1"
"$FULL_LTTNG_BIN" list "$SESSION_NAME" | grep "Recording session" | grep -q "\[active\]"
ok $ret "Session \"$SESSION_NAME\" is active"
}
function lttng_session_is_inactive()
{
local SESSION_NAME="$1"
"$FULL_LTTNG_BIN" list "$SESSION_NAME" | grep "Recording session" | grep -q "\[inactive\]"
ok $ret "Session \"$SESSION_NAME\" is inactive"
}
function test_start_session_action()
{
local SESSION_NAME="my_triggered_session"
local TRIGGER_NAME="trigger1"
local TRACE_PATH=$(mktemp -d -t test-start-action-trace.XXXXXX)
local SYNC_AFTER_NOTIF_REGISTER_PATH=$(mktemp -u -t test-notif-register.XXXXXX)
diag "Start session action"
create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
enable_ust_lttng_event_ok $SESSION_NAME "tp:tptest"
lttng_session_is_inactive $SESSION_NAME
# Add `start-session` action to an event-rule condition _followed_ by
# a `notify` action.
lttng_add_trigger_ok \
$TRIGGER_NAME \
--condition event-rule-matches --type=user --name=tp:tptest \
--action start-session $SESSION_NAME \
--action notify
# Launch notification listener.
$NOTIFICATION_CLIENT_BIN \
--trigger $TRIGGER_NAME \
--sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" &
notif_client_pid=$!
while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
sleep 0.5
done
# Artificially produce the desired event-rule condition.
$GEN_UST_EVENTS_TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT > /dev/null 2>&1
# notification-client will exit once it receives a notification.
wait $notif_client_pid
test "$?" -eq "0"
ok $? "notification client exited successfully"
# Test that the session has started.
lttng_session_is_active $SESSION_NAME
# Tearing down.
lttng_remove_trigger_ok $TRIGGER_NAME
stop_lttng_tracing_ok $SESSION_NAME
destroy_lttng_session_ok $SESSION_NAME
rm -f "$SYNC_AFTER_NOTIF_REGISTER_PATH"
rm -rf "$TRACE_PATH"
}
function test_stop_session_action()
{
local SESSION_NAME="my_triggered_session"
local TRIGGER_NAME="trigger1"
local TRACE_PATH=$(mktemp -d -t test-stop-action-trace.XXXXXX)
local SYNC_AFTER_NOTIF_REGISTER_PATH=$(mktemp -u -t test-notif-register.XXXXXX)
diag "Stop session action"
create_lttng_session_ok $SESSION_NAME "$TRACE_PATH"
enable_ust_lttng_event_ok $SESSION_NAME "tp:tptest"
start_lttng_tracing_ok $SESSION_NAME
lttng_session_is_active $SESSION_NAME
# Add `stop-session` action to an event-rule condition _followed_ by
# a `notify` action.
lttng_add_trigger_ok \
$TRIGGER_NAME \
--condition event-rule-matches --type=user --name=tp:tptest \
--action stop-session $SESSION_NAME \
--action notify
# Launch notification listener.
$NOTIFICATION_CLIENT_BIN \
--trigger $TRIGGER_NAME \
--sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" &
notif_client_pid=$!
while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
sleep 0.5
done
# Artificially produce the desired event-rule condition.
$GEN_UST_EVENTS_TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT > /dev/null 2>&1
# notification-client will exit once it receives a notification.
wait $notif_client_pid
test "$?" -eq "0"
ok $? "notification client exited successfully"
# Test that the session has been stopped.
lttng_session_is_inactive $SESSION_NAME
# Tearing down.
lttng_remove_trigger_ok $TRIGGER_NAME
destroy_lttng_session_ok $SESSION_NAME
rm -f "$SYNC_AFTER_NOTIF_REGISTER_PATH"
rm -rf "$TRACE_PATH"
}
# MUST set TESTDIR before calling those functions
plan_tests $NUM_TESTS
print_test_banner "$TEST_DESC"
bail_out_if_no_babeltrace
start_lttng_sessiond_notap
test_start_session_action
test_stop_session_action
stop_lttng_sessiond_notap
|