Build fix: rpath of test libraries results in non-reproducible build
[lttng-tools.git] / tests / regression / tools / notification / util_event_generator.sh
CommitLineData
25cb2044
JR
1#!/bin/bash
2#
3# Copyright (C) 2020 Jonathan Rajotte-Julien <jonathan.rajotte-julien@efficios.com>
4#
5# SPDX-License-Identifier: LGPL-2.1-only
6
7GENERATOR_CURDIR=$(dirname "$0")/
8GENERATOR_TESTDIR=$GENERATOR_CURDIR/../../../
9TESTAPP_PATH=${TESTAPP_PATH:-"$GENERATOR_TESTDIR/utils/testapp"}
10
11SYSCALL_TESTAPP_NAME=${SYSCALL_TESTAPP_NAME:-"gen-syscall-events"}
12SYSCALL_TESTAPP_BIN=${SYSCALL_TESTAPP_BIN:-"$TESTAPP_PATH/$SYSCALL_TESTAPP_NAME/$SYSCALL_TESTAPP_NAME"}
13
14USERSPACE_PROBE_ELF_TESTAPP_NAME=${USERSPACE_PROBE_ELF_TESTAPP_NAME:-"userspace-probe-elf-binary"}
15USERSPACE_PROBE_ELF_TESTAPP_BIN=${USERSPACE_PROBE_ELF_TESTAPP_BIN:-"$TESTAPP_PATH/$USERSPACE_PROBE_ELF_TESTAPP_NAME/.libs/$USERSPACE_PROBE_ELF_TESTAPP_NAME"}
16
17function generate_filter_events
18{
19 local nr=$1
20 /bin/echo -n "$nr" > /proc/lttng-test-filter-event 2> /dev/null
21}
22
23function generate_syscalls
24{
25 local nr=$1
26 shift
27
28 for i in $(seq 1 "$nr"); do
29 # Pass /dev/null so to generate the syscall right away.
30 $SYSCALL_TESTAPP_BIN /dev/null "$@"
31 done
32}
33
34function userspace_probe_testapp
35{
36 local nr=$1
37 shift
38
39 for i in $(seq 1 "$nr"); do
6b979fc6
JG
40 # This userspace probe test has to instrument the actual elf
41 # binary and not the generated libtool wrapper. However, we
42 # can't invoke the wrapper either since it will re-link the test
43 # application binary on its first invocation, resulting in a new
44 # binary with an 'lt-*' prefix under the .libs folder. The
45 # relinking stage adds the .libs folder to the 'lt-*' binary's
46 # rpath.
47 #
48 # To ensure the binary (inode) that instrumented is the same as
49 # what is running, set LD_LIBRARY_PATH to find the .libs folder
50 # that contains the libfoo.so library and invoke the binary
51 # directly.
52 LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$TESTDIR/utils/testapp/userspace-probe-elf-binary/.libs" $USERSPACE_PROBE_ELF_TESTAPP_BIN "$@"
25cb2044
JR
53 done
54}
55
56function ust_event_generator_toggle_state
57{
58 ust_event_generator_suspended=$((ust_event_generator_suspended==0))
59}
60
61function generator_quit
62{
63 generator_quit=0
64}
65
66# Note: Only one generator can be used at a time per domain type
67function ust_event_generator_run_once_per_transition
68{
69 # Used by the signal trap
70 ust_event_generator_suspended=0
71 # Used by the signal trap for SIGUSR2 to end the generator
72 generator_quit=1
73
74 local test_app=$1
75 local state_file=$2
76 local nr_iter=$3
77 local nr_usec_wait=$4
78 local run=false
79
80 # Pass any of the remaining arguments to the generator.
81 shift 4
82
83 trap ust_event_generator_toggle_state SIGUSR1
84 trap generator_quit SIGUSR2
85
86 while [ $generator_quit -ne 0 ]; do
87 if [[ $ust_event_generator_suspended -eq "1" ]]; then
88 touch "$state_file"
89 # Reset the "run" state
90 run=true
91 sleep 0.5
92 elif [ "$run" = true ]; then
93 taskset -c 0 "$test_app" -i "$nr_iter" -w "$nr_usec_wait" "$@"> /dev/null 2>&1
94 run=false;
95 if [[ -f $state_file ]]; then
96 rm -rf "$state_file" 2> /dev/null
97 fi
98 else
99 # Wait for a "suspend" to reset the run state
100 sleep 0.1
101 fi
102 done
103}
104
105# Note: Only one generator can be used at a time per domain type
106function ust_event_generator
107{
108 # Used by the signal trap
109 ust_event_generator_suspended=0
110 # Used by the signal trap for SIGUSR2 to end the generator
111 generator_quit=1
112
113 local test_app=$1
114 local state_file=$2
115 local nr_iter=1000
116 local nr_usec_wait=5
117
118 # Pass any of the remaining arguments to the generator.
119 shift 2
120
121 trap ust_event_generator_toggle_state SIGUSR1
122 trap generator_quit SIGUSR2
123
124 while [ $generator_quit -ne 0 ]; do
125 if [[ $ust_event_generator_suspended -eq "1" ]]; then
126 touch "$state_file"
127 # Reset the "run" state
128 sleep 0.5
129 else
130 taskset -c 0 "$test_app" -i $nr_iter -w $nr_usec_wait "$@" > /dev/null 2>&1
131 if [[ -f $state_file ]]; then
132 rm -rf "$state_file" 2> /dev/null
133 fi
134 fi
135 done
136}
137
138function kernel_event_generator_toggle_state
139{
140 kernel_event_generator_suspended=$((kernel_event_generator_suspended==0))
141}
142
143function kernel_event_generator_run_once_per_transition
144{
145 # Used by the signal trap
146 kernel_event_generator_suspended=0
147 # Used by the signal trap for SIGUSR2 to end the generator
148 generator_quit=1
149
150 local generator=$1
151 local state_file=$2
152 local nr_iter=$3
153
154 # Pass any of the remaining arguments to the generator.
155 shift 3
156
157 local run=false
158 trap kernel_event_generator_toggle_state SIGUSR1
159 trap generator_quit SIGUSR2
160
161 while [ $generator_quit -ne 0 ]; do
162 if [[ $kernel_event_generator_suspended -eq "1" ]]; then
163 touch "$state_file"
164 run=true
165 sleep 0.5
166 elif [ "$run" = true ]; then
167 $generator "$nr_iter" "$@"
168 run=false
169 if [[ -f $state_file ]]; then
170 rm "$state_file" 2> /dev/null
171 fi
172 else
173 # Wait for a "suspend" to reset the run state
174 sleep 0.1
175 fi
176 done
177}
178
179function kernel_event_generator
180{
181 # Used by the signal trap
182 kernel_event_generator_suspended=0
183 # Used by the signal trap for SIGUSR2 to end the generator
184 generator_quit=1
185
186 local generator=$1
187 local state_file=$2
188
189 # Pass any of the remaining arguments to the generator.
190 shift 2
191
192 trap kernel_event_generator_toggle_state SIGUSR1
193 trap generator_quit SIGUSR2
194
195 while [ $generator_quit -ne 0 ]; do
196 if [[ $kernel_event_generator_suspended -eq "1" ]]; then
197 touch "$state_file"
198 sleep 0.5
199 else
200 $generator "10" "$@"
201 if [[ -f $state_file ]]; then
202 rm "$state_file" 2> /dev/null
203 fi
204 fi
205 done
206}
This page took 0.038672 seconds and 4 git commands to generate.