Commit | Line | Data |
---|---|---|
b2441318 | 1 | /* SPDX-License-Identifier: GPL-2.0 */ |
0a4e1ae6 JO |
2 | #ifndef TESTS_H |
3 | #define TESTS_H | |
4 | ||
e8c6d500 WN |
5 | #include <stdbool.h> |
6 | ||
8680999d ACM |
7 | enum { |
8 | TEST_OK = 0, | |
9 | TEST_FAIL = -1, | |
10 | TEST_SKIP = -2, | |
11 | }; | |
12 | ||
450ac18d JO |
13 | #define TEST_ASSERT_VAL(text, cond) \ |
14 | do { \ | |
15 | if (!(cond)) { \ | |
16 | pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \ | |
8680999d | 17 | return TEST_FAIL; \ |
450ac18d JO |
18 | } \ |
19 | } while (0) | |
20 | ||
8f196013 ACM |
21 | #define TEST_ASSERT_EQUAL(text, val, expected) \ |
22 | do { \ | |
23 | if (val != expected) { \ | |
24 | pr_debug("FAILED %s:%d %s (%d != %d)\n", \ | |
25 | __FILE__, __LINE__, text, val, expected); \ | |
8680999d | 26 | return TEST_FAIL; \ |
8f196013 ACM |
27 | } \ |
28 | } while (0) | |
29 | ||
f832044c IR |
30 | struct test_suite; |
31 | ||
32 | typedef int (*test_fnptr)(struct test_suite *, int); | |
33 | ||
78244d2e IR |
34 | struct test_case { |
35 | const char *name; | |
36 | const char *desc; | |
9be56d30 | 37 | const char *skip_reason; |
78244d2e | 38 | test_fnptr run_case; |
79e72f38 | 39 | bool exclusive; |
78244d2e IR |
40 | }; |
41 | ||
33f44bfd | 42 | struct test_suite { |
31b6753f | 43 | const char *desc; |
78244d2e | 44 | struct test_case *test_cases; |
1209b273 | 45 | void *priv; |
31b6753f MF |
46 | }; |
47 | ||
fe90d378 | 48 | #define DECLARE_SUITE(name) \ |
33f44bfd | 49 | extern struct test_suite suite__##name; |
fe90d378 | 50 | |
78244d2e IR |
51 | #define TEST_CASE(description, _name) \ |
52 | { \ | |
53 | .name = #_name, \ | |
54 | .desc = description, \ | |
55 | .run_case = test__##_name, \ | |
56 | } | |
57 | ||
9be56d30 IR |
58 | #define TEST_CASE_REASON(description, _name, _reason) \ |
59 | { \ | |
60 | .name = #_name, \ | |
61 | .desc = description, \ | |
62 | .run_case = test__##_name, \ | |
63 | .skip_reason = _reason, \ | |
64 | } | |
65 | ||
79e72f38 IR |
66 | #define TEST_CASE_EXCLUSIVE(description, _name) \ |
67 | { \ | |
68 | .name = #_name, \ | |
69 | .desc = description, \ | |
70 | .run_case = test__##_name, \ | |
71 | .exclusive = true, \ | |
72 | } | |
73 | ||
9be56d30 | 74 | #define DEFINE_SUITE(description, _name) \ |
78244d2e IR |
75 | struct test_case tests__##_name[] = { \ |
76 | TEST_CASE(description, _name), \ | |
77 | { .name = NULL, } \ | |
4cd67bac RB |
78 | }; \ |
79 | struct test_suite suite__##_name = { \ | |
80 | .desc = description, \ | |
81 | .test_cases = tests__##_name, \ | |
82 | } | |
83 | ||
84 | #define DEFINE_SUITE_EXCLUSIVE(description, _name) \ | |
85 | struct test_case tests__##_name[] = { \ | |
86 | TEST_CASE_EXCLUSIVE(description, _name),\ | |
87 | { .name = NULL, } \ | |
78244d2e IR |
88 | }; \ |
89 | struct test_suite suite__##_name = { \ | |
90 | .desc = description, \ | |
91 | .test_cases = tests__##_name, \ | |
df225205 IR |
92 | } |
93 | ||
d3b59a38 | 94 | /* Tests */ |
fe90d378 IR |
95 | DECLARE_SUITE(vmlinux_matches_kallsyms); |
96 | DECLARE_SUITE(openat_syscall_event); | |
97 | DECLARE_SUITE(openat_syscall_event_on_all_cpus); | |
98 | DECLARE_SUITE(basic_mmap); | |
99 | DECLARE_SUITE(PERF_RECORD); | |
100 | DECLARE_SUITE(perf_evsel__roundtrip_name_test); | |
101 | DECLARE_SUITE(perf_evsel__tp_sched_test); | |
102 | DECLARE_SUITE(syscall_openat_tp_fields); | |
103 | DECLARE_SUITE(pmu); | |
104 | DECLARE_SUITE(pmu_events); | |
8c329057 | 105 | DECLARE_SUITE(hwmon_pmu); |
8c25df7a | 106 | DECLARE_SUITE(tool_pmu); |
fe90d378 IR |
107 | DECLARE_SUITE(attr); |
108 | DECLARE_SUITE(dso_data); | |
109 | DECLARE_SUITE(dso_data_cache); | |
110 | DECLARE_SUITE(dso_data_reopen); | |
111 | DECLARE_SUITE(parse_events); | |
112 | DECLARE_SUITE(hists_link); | |
113 | DECLARE_SUITE(python_use); | |
114 | DECLARE_SUITE(bp_signal); | |
115 | DECLARE_SUITE(bp_signal_overflow); | |
116 | DECLARE_SUITE(bp_accounting); | |
117 | DECLARE_SUITE(wp); | |
fe90d378 IR |
118 | DECLARE_SUITE(task_exit); |
119 | DECLARE_SUITE(mem); | |
120 | DECLARE_SUITE(sw_clock_freq); | |
121 | DECLARE_SUITE(code_reading); | |
122 | DECLARE_SUITE(sample_parsing); | |
123 | DECLARE_SUITE(keep_tracking); | |
124 | DECLARE_SUITE(parse_no_sample_id_all); | |
d68f0365 | 125 | DECLARE_SUITE(dwarf_unwind); |
fe90d378 IR |
126 | DECLARE_SUITE(expr); |
127 | DECLARE_SUITE(hists_filter); | |
128 | DECLARE_SUITE(mmap_thread_lookup); | |
129 | DECLARE_SUITE(thread_maps_share); | |
130 | DECLARE_SUITE(hists_output); | |
131 | DECLARE_SUITE(hists_cumulate); | |
132 | DECLARE_SUITE(switch_tracking); | |
133 | DECLARE_SUITE(fdarray__filter); | |
134 | DECLARE_SUITE(fdarray__add); | |
135 | DECLARE_SUITE(kmod_path__parse); | |
136 | DECLARE_SUITE(thread_map); | |
fe90d378 | 137 | DECLARE_SUITE(bpf); |
fe90d378 IR |
138 | DECLARE_SUITE(session_topology); |
139 | DECLARE_SUITE(thread_map_synthesize); | |
140 | DECLARE_SUITE(thread_map_remove); | |
5cebb33f | 141 | DECLARE_SUITE(cpu_map); |
fe90d378 IR |
142 | DECLARE_SUITE(synthesize_stat_config); |
143 | DECLARE_SUITE(synthesize_stat); | |
144 | DECLARE_SUITE(synthesize_stat_round); | |
145 | DECLARE_SUITE(event_update); | |
146 | DECLARE_SUITE(event_times); | |
147 | DECLARE_SUITE(backward_ring_buffer); | |
fe90d378 IR |
148 | DECLARE_SUITE(sdt_event); |
149 | DECLARE_SUITE(is_printable_array); | |
150 | DECLARE_SUITE(bitmap_print); | |
151 | DECLARE_SUITE(perf_hooks); | |
fe90d378 IR |
152 | DECLARE_SUITE(unit_number__scnprint); |
153 | DECLARE_SUITE(mem2node); | |
154 | DECLARE_SUITE(maps__merge_in); | |
155 | DECLARE_SUITE(time_utils); | |
156 | DECLARE_SUITE(jit_write_elf); | |
157 | DECLARE_SUITE(api_io); | |
158 | DECLARE_SUITE(demangle_java); | |
159 | DECLARE_SUITE(demangle_ocaml); | |
bdf05ccd | 160 | DECLARE_SUITE(demangle_rust); |
fe90d378 | 161 | DECLARE_SUITE(pfm); |
fe90d378 IR |
162 | DECLARE_SUITE(parse_metric); |
163 | DECLARE_SUITE(pe_file_parsing); | |
164 | DECLARE_SUITE(expand_cgroup_events); | |
165 | DECLARE_SUITE(perf_time_to_tsc); | |
166 | DECLARE_SUITE(dlfilter); | |
5504f679 | 167 | DECLARE_SUITE(sigtrap); |
9d9b22be | 168 | DECLARE_SUITE(event_groups); |
1b69346e | 169 | DECLARE_SUITE(symbols); |
8a55c1e2 | 170 | DECLARE_SUITE(util); |
d3b59a38 | 171 | |
4935e2cd IR |
172 | /* |
173 | * PowerPC and S390 do not support creation of instruction breakpoints using the | |
174 | * perf_event interface. | |
175 | * | |
176 | * ARM requires explicit rounding down of the instruction pointer in Thumb mode, | |
177 | * and then requires the single-step to be handled explicitly in the overflow | |
178 | * handler to avoid stepping into the SIGIO handler and getting stuck on the | |
179 | * breakpointed instruction. | |
180 | * | |
181 | * Since arm64 has the same issue with arm for the single-step handling, this | |
182 | * case also gets stuck on the breakpointed instruction. | |
183 | * | |
184 | * Just disable the test for these architectures until these issues are | |
185 | * resolved. | |
186 | */ | |
187 | #if defined(__powerpc__) || defined(__s390x__) || defined(__arm__) || defined(__aarch64__) | |
188 | #define BP_SIGNAL_IS_SUPPORTED 0 | |
189 | #else | |
190 | #define BP_SIGNAL_IS_SUPPORTED 1 | |
191 | #endif | |
598762cf | 192 | |
9ff125d1 | 193 | #ifdef HAVE_DWARF_UNWIND_SUPPORT |
aa16b81f JO |
194 | struct thread; |
195 | struct perf_sample; | |
196 | int test__arch_unwind_sample(struct perf_sample *sample, | |
197 | struct thread *thread); | |
198 | #endif | |
21327c78 FF |
199 | |
200 | #if defined(__arm__) | |
fe90d378 | 201 | DECLARE_SUITE(vectors_page); |
21327c78 FF |
202 | #endif |
203 | ||
f215054d NK |
204 | /* |
205 | * Define test workloads to be used in test suites. | |
206 | */ | |
207 | typedef int (*workload_fnptr)(int argc, const char **argv); | |
208 | ||
209 | struct test_workload { | |
210 | const char *name; | |
211 | workload_fnptr func; | |
212 | }; | |
213 | ||
214 | #define DECLARE_WORKLOAD(work) \ | |
215 | extern struct test_workload workload__##work | |
216 | ||
217 | #define DEFINE_WORKLOAD(work) \ | |
218 | struct test_workload workload__##work = { \ | |
219 | .name = #work, \ | |
220 | .func = work, \ | |
221 | } | |
222 | ||
223 | /* The list of test workloads */ | |
224 | DECLARE_WORKLOAD(noploop); | |
69b35292 | 225 | DECLARE_WORKLOAD(thloop); |
41522f74 | 226 | DECLARE_WORKLOAD(leafloop); |
39281709 | 227 | DECLARE_WORKLOAD(sqrtloop); |
a104f0ea | 228 | DECLARE_WORKLOAD(brstack); |
3dfc01fe | 229 | DECLARE_WORKLOAD(datasym); |
3656e566 | 230 | DECLARE_WORKLOAD(landlock); |
f215054d | 231 | |
1b69346e | 232 | extern const char *dso_to_test; |
33ce9fc4 | 233 | extern const char *test_objdump_path; |
1b69346e | 234 | |
0a4e1ae6 | 235 | #endif /* TESTS_H */ |