Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1#!/bin/bash
2# perf top tests (exclusive)
3# SPDX-License-Identifier: GPL-2.0
4
5set -e
6
7err=0
8log_file=$(mktemp /tmp/perf.top.log.XXXXX)
9
10cleanup() {
11 rm -f "${log_file}"
12 trap - EXIT TERM INT
13}
14
15trap_cleanup() {
16 echo "Unexpected signal in ${FUNCNAME[1]}"
17 cleanup
18 exit 1
19}
20trap trap_cleanup EXIT TERM INT
21
22test_basic_perf_top() {
23 echo "Basic perf top test"
24
25 # Start a workload that spins to generate samples
26 # thloop runs for the specified number of seconds
27 perf test -w thloop 20 &
28 PID=$!
29
30 # Allow it to start
31 sleep 0.1
32
33 # Run perf top for 5 seconds, monitoring that PID
34 # Use --stdio to avoid TUI and redirect output
35 # Use -d 1 to avoid flooding output
36 # Use -e cpu-clock to ensure we get samples
37 # Use sleep to keep stdin open but silent, preventing EOF loop or interactive spam
38 if ! sleep 10 | timeout 5s perf top --stdio -d 1 -e cpu-clock -p $PID > "${log_file}" 2>&1; then
39 retval=$?
40 if [ $retval -ne 124 ] && [ $retval -ne 0 ]; then
41 echo "Basic perf top test [Failed: perf top failed to start or run (ret=$retval)]"
42 head -n 50 "${log_file}"
43 kill $PID
44 wait $PID 2>/dev/null || true
45 err=1
46 return
47 fi
48 fi
49
50 kill $PID
51 wait $PID 2>/dev/null || true
52
53 # Check for some sample data (percentage)
54 if ! grep -E -q "[0-9]+\.[0-9]+%" "${log_file}"; then
55 echo "Basic perf top test [Failed: no sample percentage found]"
56 head -n 50 "${log_file}"
57 err=1
58 return
59 fi
60
61 # Check for the symbol
62 if ! grep -q "test_loop" "${log_file}"; then
63 echo "Basic perf top test [Failed: test_loop symbol not found]"
64 head -n 50 "${log_file}"
65 err=1
66 return
67 fi
68
69 echo "Basic perf top test [Success]"
70}
71
72test_basic_perf_top
73cleanup
74exit $err