Commit | Line | Data |
---|---|---|
544cdc88 MJ |
1 | #!/bin/bash |
2 | # SPDX-License-Identifier: GPL-2.0+ or MIT | |
3 | ||
4 | SH_TAP=1 | |
5 | ||
6 | if [ "x${RSEQ_TESTS_SRCDIR:-}" != "x" ]; then | |
7 | UTILSSH="$RSEQ_TESTS_SRCDIR/utils/utils.sh" | |
8 | else | |
9 | UTILSSH="$(dirname "$0")/utils/utils.sh" | |
10 | fi | |
11 | ||
12 | # shellcheck source=./utils/utils.sh | |
13 | source "$UTILSSH" | |
14 | ||
15 | ||
16 | EXTRA_ARGS=("${@}") | |
17 | ||
18 | REPS=1000 | |
19 | NR_CPUS=$(nproc) | |
20 | NR_THREADS=$((6 * NR_CPUS)) | |
21 | ||
22 | ||
23 | function do_test() | |
24 | { | |
25 | local test_name=$1 | |
26 | shift | |
27 | local args=("$@") | |
28 | ||
29 | "$RSEQ_TESTS_BUILDDIR"/param_test "${args[@]}" -r ${REPS} -t ${NR_THREADS} "${EXTRA_ARGS[@]}" | |
30 | ok $? "Running test ${test_name}" | |
31 | ||
32 | "$RSEQ_TESTS_BUILDDIR"/param_test_compare_twice "${args[@]}" -r ${REPS} -t ${NR_THREADS} "${EXTRA_ARGS[@]}" | |
33 | ok $? "Running compare-twice test ${test_name}" | |
34 | } | |
35 | ||
36 | function do_tests() | |
37 | { | |
38 | local args=("$@") | |
39 | ||
40 | do_test "spinlock" -T s "${@}" | |
41 | do_test "list" -T l "${@}" | |
42 | do_test "buffer" -T b "${@}" | |
43 | do_test "buffer with barrier" -T b -M "${@}" | |
44 | do_test "memcpy" -T m "${@}" | |
45 | do_test "memcpy with barrier" -T m -M "${@}" | |
46 | do_test "increment" -T i "${@}" | |
5368dcb4 | 47 | do_test "membarrier" -T r "${@}" |
544cdc88 MJ |
48 | } |
49 | ||
50 | function do_tests_loops() | |
51 | { | |
52 | local nr_loops="$1" | |
53 | ||
54 | do_tests -1 "${nr_loops}" | |
55 | do_tests -2 "${nr_loops}" | |
56 | do_tests -3 "${nr_loops}" | |
57 | do_tests -4 "${nr_loops}" | |
58 | do_tests -5 "${nr_loops}" | |
59 | do_tests -6 "${nr_loops}" | |
60 | do_tests -7 "${nr_loops}" | |
61 | do_tests -8 "${nr_loops}" | |
62 | do_tests -9 "${nr_loops}" | |
63 | } | |
64 | ||
65 | function do_tests_inject() | |
66 | { | |
67 | local args=("$@") | |
68 | ||
69 | do_tests -7 -1 "${@}" | |
70 | do_tests -8 -1 "${@}" | |
71 | do_tests -9 -1 "${@}" | |
72 | } | |
73 | ||
74 | ||
d1cdec98 MJ |
75 | "$RSEQ_TESTS_BUILDDIR"/param_test -c |
76 | if [[ $? == 2 ]]; then | |
77 | plan_skip_all "The rseq syscall is unavailable" | |
78 | else | |
5368dcb4 | 79 | plan_tests $(( 2 * 8 * 37 )) |
d1cdec98 | 80 | fi |
544cdc88 MJ |
81 | |
82 | diag "Default parameters" | |
83 | do_tests | |
84 | ||
85 | diag "Loop injection: 10000 loops" | |
86 | do_tests_loops 10000 | |
87 | ||
88 | diag "Yield injection (25%)" | |
89 | do_tests_inject -m 4 -y | |
90 | ||
91 | diag "Yield injection (50%)" | |
92 | do_tests_inject -m 2 -y | |
93 | ||
94 | diag "Yield injection (100%)" | |
95 | do_tests_inject -m 1 -y | |
96 | ||
97 | diag "Kill injection (25%)" | |
98 | do_tests_inject -m 4 -k | |
99 | ||
100 | diag "Kill injection (50%)" | |
101 | do_tests_inject -m 2 -k | |
102 | ||
103 | diag "Kill injection (100%)" | |
104 | do_tests_inject -m 1 -k | |
105 | ||
106 | diag "Sleep injection (1ms, 25%)" | |
107 | do_tests_inject -m 4 -s 1 | |
108 | ||
109 | diag "Sleep injection (1ms, 50%)" | |
110 | do_tests_inject -m 2 -s 1 | |
111 | ||
112 | diag "Sleep injection (1ms, 100%)" | |
113 | do_tests_inject -m 1 -s 1 |