File: test_start_stop

package info (click to toggle)
ltt-control 2.14.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 21,860 kB
  • sloc: cpp: 192,012; sh: 28,777; ansic: 10,960; python: 7,108; makefile: 3,520; java: 109; xml: 46
file content (158 lines) | stat: -rwxr-xr-x 4,363 bytes parent folder | download
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