lttng add-trigger: some updates to event rule to new syntax
[lttng-tools.git] / tests / regression / tools / trigger / rate-policy / test_ust_rate_policy
1 #!/bin/bash
2 #
3 # Copyright (C) 2020 Francis Deslauriers <francis.deslauriers@efficios.com>
4 #
5 # SPDX-License-Identifier: LGPL-2.1-only
6
7 TEST_DESC="Triggers - rate policy notify"
8
9 CURDIR=$(dirname "$0")/
10 TESTDIR=${CURDIR}/../../../..
11
12 # shellcheck source=../../../../utils/utils.sh
13 source "$TESTDIR/utils/utils.sh"
14
15 TESTAPP_PATH="$TESTDIR/utils/testapp"
16 GEN_UST_EVENTS_TESTAPP_NAME="gen-ust-events"
17 GEN_UST_EVENTS_TESTAPP_BIN="$TESTAPP_PATH/$GEN_UST_EVENTS_TESTAPP_NAME/$GEN_UST_EVENTS_TESTAPP_NAME"
18 NOTIFICATION_CLIENT_BIN="$CURDIR/../utils/notification-client"
19 NUM_TESTS=19
20
21 NR_ITER=10
22 NR_USEC_WAIT=5
23
24 function test_rate_policy_every_n()
25 {
26 local SESSION_NAME="my_triggered_session"
27 local TRIGGER_NAME="trigger1"
28 local END_TRIGGER_NAME="end-trigger1"
29 local SYNC_AFTER_NOTIF_REGISTER_PATH
30
31 SYNC_AFTER_NOTIF_REGISTER_PATH=$(mktemp -u test-notif-register.XXXXXX)
32
33 diag "Every N rate policy"
34
35 # Add a trigger with a notify action with a policy to fire it every 5
36 # time the condition is met.
37 lttng_add_trigger_ok \
38 $TRIGGER_NAME \
39 --condition event-rule-matches -u --name="tp:tptest" \
40 --action notify \
41 --rate-policy=every:5
42
43 # Add a trigger with a notify action for the tp:end event of the test
44 # application. This allow us to "delimit" the reception loop for the
45 # notification client ensuring that all events were hit and passed into
46 # the notification subsystem.
47 lttng_add_trigger_ok \
48 $END_TRIGGER_NAME \
49 --condition event-rule-matches -u --name="tp:end" \
50 --action notify
51
52 for i in $(seq 1 4); do
53 diag "Iteration $i of 4"
54 ## Phase 1
55 # Hit the trigger condition 4 time and validate that no (0)
56 # notification for that condition was received.
57 $NOTIFICATION_CLIENT_BIN \
58 --trigger $TRIGGER_NAME \
59 --sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" \
60 --count 0 \
61 --end-trigger "$END_TRIGGER_NAME" &
62 notif_client_pid=$!
63 while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
64 sleep 0.5
65 done
66
67 $GEN_UST_EVENTS_TESTAPP_BIN -i 4 -w $NR_USEC_WAIT --emit-end-event > /dev/null 2>&1
68
69 # notification-client will exit once it receives the end-trigger notification.
70 # Validation of the number of received notification is done by the
71 # notification client. Here it validate that it received 0 notifications.
72 wait $notif_client_pid
73 test "$?" -eq "0"
74 ok $? "notification client exited successfully"
75
76 ## Phase 2
77 # Hit the condition 1 time and validate that a notification is
78 # received.
79 rm -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}"
80 $NOTIFICATION_CLIENT_BIN \
81 --trigger $TRIGGER_NAME \
82 --sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" \
83 --count 1 \
84 --end-trigger "$END_TRIGGER_NAME" &
85 notif_client_pid=$!
86 while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
87 sleep 0.5
88 done
89
90 # Artificially produce the desired event-rule condition.
91 $GEN_UST_EVENTS_TESTAPP_BIN -i 1 -w $NR_USEC_WAIT --emit-end-event > /dev/null 2>&1
92
93 # notification-client will exit once it receives the end-trigger notification.
94 # Validation of the number of received notification is done by the
95 # notification client. Here it validate that it received 1 notifications.
96 wait $notif_client_pid
97 test "$?" -eq "0"
98 ok $? "notification client exited successfully"
99
100 rm -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}"
101 done
102
103 # Tearing down.
104 lttng_remove_trigger_ok $TRIGGER_NAME
105 lttng_remove_trigger_ok $END_TRIGGER_NAME
106
107 rm -f "$SYNC_AFTER_NOTIF_REGISTER_PATH"
108 }
109
110 function test_rate_policy_once_after_n()
111 {
112 local SESSION_NAME="my_triggered_session"
113 local TRIGGER_NAME="trigger1"
114 local END_TRIGGER_NAME="end-trigger1"
115 local SYNC_AFTER_NOTIF_REGISTER_PATH
116
117 SYNC_AFTER_NOTIF_REGISTER_PATH=$(mktemp -u test-notif-register.XXXXXX)
118
119 diag "Once after N rate policy"
120
121 # Add a trigger with a notify action with a policy to fire it every 5
122 # time the condition is met.
123 lttng_add_trigger_ok \
124 $TRIGGER_NAME \
125 --condition event-rule-matches -u --name="tp:tptest" \
126 --action notify \
127 --rate-policy=once-after:5
128
129 # Add a trigger with a notify action for the tp:end event of the test
130 # application. This allow us to "delimit" the reception loop for the
131 # notification client ensuring that all events were hit and passed into
132 # the notification subsystem.
133 lttng_add_trigger_ok \
134 $END_TRIGGER_NAME \
135 --condition event-rule-matches -u --name="tp:end" \
136 --action notify
137
138 ## Phase 1
139 # Hit the trigger condition 4 time and validate that no (0)
140 # notification for that condition was received.
141 $NOTIFICATION_CLIENT_BIN \
142 --trigger $TRIGGER_NAME \
143 --sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" \
144 --count 0 \
145 --end-trigger "$END_TRIGGER_NAME" &
146 notif_client_pid=$!
147 while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
148 sleep 0.5
149 done
150
151 # Artificially produce the desired event-rule condition.
152 $GEN_UST_EVENTS_TESTAPP_BIN -i 4 -w $NR_USEC_WAIT --emit-end-event > /dev/null 2>&1
153
154 # notification-client will exit once it receives the end-trigger notification.
155 # Validation of the number of received notification is done by the
156 # notification client. Here it validate that it received 0 notifications.
157 wait $notif_client_pid
158 test "$?" -eq "0"
159 ok $? "notification client exited successfully"
160
161 ## Phase 2
162 # Hit the condition 1 time and validate that a notification is
163 # received.
164 rm -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}"
165 $NOTIFICATION_CLIENT_BIN \
166 --trigger $TRIGGER_NAME \
167 --sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" \
168 --count 1 \
169 --end-trigger "$END_TRIGGER_NAME" &
170 notif_client_pid=$!
171 while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
172 sleep 0.5
173 done
174
175 # Artificially produce the desired event-rule condition.
176 $GEN_UST_EVENTS_TESTAPP_BIN -i 1 -w $NR_USEC_WAIT --emit-end-event > /dev/null 2>&1
177
178 # notification-client will exit once it receives the end-trigger notification.
179 # Validation of the number of received notification is done by the
180 # notification client. Here it validate that it received 1 notifications.
181 wait $notif_client_pid
182 test "$?" -eq "0"
183 ok $? "notification client exited successfully"
184
185 ## Phase 3
186 # Hit the condition N time and validate that no (0) notification is
187 # received.
188 rm -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}"
189 $NOTIFICATION_CLIENT_BIN \
190 --trigger $TRIGGER_NAME \
191 --sync-after-notif-register "$SYNC_AFTER_NOTIF_REGISTER_PATH" \
192 --count 0 \
193 --end-trigger "$END_TRIGGER_NAME" &
194 notif_client_pid=$!
195 while [ ! -f "${SYNC_AFTER_NOTIF_REGISTER_PATH}" ]; do
196 sleep 0.5
197 done
198
199 # Artificially produce the desired event-rule condition.
200 $GEN_UST_EVENTS_TESTAPP_BIN -i $NR_ITER -w $NR_USEC_WAIT --emit-end-event > /dev/null 2>&1
201
202 # notification-client will exit once it receives the end-trigger notification.
203 # Validation of the number of received notification is done by the
204 # notification client. Here it validate that it received 0 notifications.
205 wait $notif_client_pid
206 test "$?" -eq "0"
207 ok $? "notification client exited successfully"
208
209 # Tearing down.
210 lttng_remove_trigger_ok $TRIGGER_NAME
211 lttng_remove_trigger_ok $END_TRIGGER_NAME
212
213 rm -f "$SYNC_AFTER_NOTIF_REGISTER_PATH"
214 }
215
216 # MUST set TESTDIR before calling those functions
217 plan_tests $NUM_TESTS
218
219 print_test_banner "$TEST_DESC"
220
221 start_lttng_sessiond_notap
222
223 test_rate_policy_every_n
224 test_rate_policy_once_after_n
225
226 stop_lttng_sessiond_notap
This page took 0.050019 seconds and 4 git commands to generate.