tracing: Add __string_src() helper to help compilers not to get confused
[sfrench/cifs-2.6.git] / tools / perf / tests / shell / stat+csv_output.sh
1 #!/bin/bash
2 # perf stat CSV output linter
3 # SPDX-License-Identifier: (LGPL-2.1 OR BSD-2-Clause)
4 # Tests various perf stat CSV output commands for the
5 # correct number of fields and the CSV separator set to ','.
6
7 set -e
8
9 # shellcheck source=lib/stat_output.sh
10 . "$(dirname $0)"/lib/stat_output.sh
11
12 csv_sep=@
13
14 stat_output=$(mktemp /tmp/__perf_test.stat_output.csv.XXXXX)
15
16 cleanup() {
17   rm -f "${stat_output}"
18
19   trap - EXIT TERM INT
20 }
21
22 trap_cleanup() {
23   cleanup
24   exit 1
25 }
26 trap trap_cleanup EXIT TERM INT
27
28 function commachecker()
29 {
30         local -i cnt=0
31         local exp=0
32
33         case "$1"
34         in "--no-args")         exp=6
35         ;; "--system-wide")     exp=6
36         ;; "--event")           exp=6
37         ;; "--interval")        exp=7
38         ;; "--per-thread")      exp=7
39         ;; "--system-wide-no-aggr")     exp=7
40                                 [ "$(uname -m)" = "s390x" ] && exp='^[6-7]$'
41         ;; "--per-core")        exp=8
42         ;; "--per-socket")      exp=8
43         ;; "--per-node")        exp=8
44         ;; "--per-die")         exp=8
45         ;; "--per-cache")       exp=8
46         esac
47
48         while read line
49         do
50                 # Ignore initial "started on" comment.
51                 x=${line:0:1}
52                 [ "$x" = "#" ] && continue
53                 # Ignore initial blank line.
54                 [ "$line" = "" ] && continue
55
56                 # Count the number of commas
57                 x=$(echo $line | tr -d -c $csv_sep)
58                 cnt="${#x}"
59                 # echo $line $cnt
60                 [[ ! "$cnt" =~ $exp ]] && {
61                         echo "wrong number of fields. expected $exp in $line" 1>&2
62                         exit 1;
63                 }
64         done < "${stat_output}"
65         return 0
66 }
67
68 perf_cmd="-x$csv_sep -o ${stat_output}"
69
70 skip_test=$(check_for_topology)
71 check_no_args "CSV" "$perf_cmd"
72 check_system_wide "CSV" "$perf_cmd"
73 check_interval "CSV" "$perf_cmd"
74 check_event "CSV" "$perf_cmd"
75 check_per_thread "CSV" "$perf_cmd"
76 check_per_node "CSV" "$perf_cmd"
77 if [ $skip_test -ne 1 ]
78 then
79         check_system_wide_no_aggr "CSV" "$perf_cmd"
80         check_per_core "CSV" "$perf_cmd"
81         check_per_cache_instance "CSV" "$perf_cmd"
82         check_per_die "CSV" "$perf_cmd"
83         check_per_socket "CSV" "$perf_cmd"
84 else
85         echo "[Skip] Skipping tests for system_wide_no_aggr, per_core, per_die and per_socket since socket id exposed via topology is invalid"
86 fi
87 cleanup
88 exit 0