brintos

brintos / linux-shallow public Read only

0
0
Text · 5.3 KiB · 6ea2be8 Raw
214 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef TESTS_H3#define TESTS_H4 5#include <stdbool.h>6 7enum {8	TEST_OK   =  0,9	TEST_FAIL = -1,10	TEST_SKIP = -2,11};12 13#define TEST_ASSERT_VAL(text, cond)					 \14do {									 \15	if (!(cond)) {							 \16		pr_debug("FAILED %s:%d %s\n", __FILE__, __LINE__, text); \17		return TEST_FAIL;					 \18	}								 \19} while (0)20 21#define TEST_ASSERT_EQUAL(text, val, expected)				 \22do {									 \23	if (val != expected) {						 \24		pr_debug("FAILED %s:%d %s (%d != %d)\n",		 \25			 __FILE__, __LINE__, text, val, expected);	 \26		return TEST_FAIL;						 \27	}								 \28} while (0)29 30struct test_suite;31 32typedef int (*test_fnptr)(struct test_suite *, int);33 34struct test_case {35	const char *name;36	const char *desc;37	const char *skip_reason;38	test_fnptr run_case;39};40 41struct test_suite {42	const char *desc;43	struct test_case *test_cases;44	void *priv;45};46 47#define DECLARE_SUITE(name) \48	extern struct test_suite suite__##name;49 50#define TEST_CASE(description, _name)			\51	{						\52		.name = #_name,				\53		.desc = description,			\54		.run_case = test__##_name,		\55	}56 57#define TEST_CASE_REASON(description, _name, _reason)	\58	{						\59		.name = #_name,				\60		.desc = description,			\61		.run_case = test__##_name,		\62		.skip_reason = _reason,			\63	}64 65#define DEFINE_SUITE(description, _name)		\66	struct test_case tests__##_name[] = {           \67		TEST_CASE(description, _name),		\68		{	.name = NULL, }			\69	};						\70	struct test_suite suite__##_name = {		\71		.desc = description,			\72		.test_cases = tests__##_name,		\73	}74 75/* Tests */76DECLARE_SUITE(vmlinux_matches_kallsyms);77DECLARE_SUITE(openat_syscall_event);78DECLARE_SUITE(openat_syscall_event_on_all_cpus);79DECLARE_SUITE(basic_mmap);80DECLARE_SUITE(PERF_RECORD);81DECLARE_SUITE(perf_evsel__roundtrip_name_test);82DECLARE_SUITE(perf_evsel__tp_sched_test);83DECLARE_SUITE(syscall_openat_tp_fields);84DECLARE_SUITE(pmu);85DECLARE_SUITE(pmu_events);86DECLARE_SUITE(attr);87DECLARE_SUITE(dso_data);88DECLARE_SUITE(dso_data_cache);89DECLARE_SUITE(dso_data_reopen);90DECLARE_SUITE(parse_events);91DECLARE_SUITE(hists_link);92DECLARE_SUITE(python_use);93DECLARE_SUITE(bp_signal);94DECLARE_SUITE(bp_signal_overflow);95DECLARE_SUITE(bp_accounting);96DECLARE_SUITE(wp);97DECLARE_SUITE(task_exit);98DECLARE_SUITE(mem);99DECLARE_SUITE(sw_clock_freq);100DECLARE_SUITE(code_reading);101DECLARE_SUITE(sample_parsing);102DECLARE_SUITE(keep_tracking);103DECLARE_SUITE(parse_no_sample_id_all);104DECLARE_SUITE(dwarf_unwind);105DECLARE_SUITE(expr);106DECLARE_SUITE(hists_filter);107DECLARE_SUITE(mmap_thread_lookup);108DECLARE_SUITE(thread_maps_share);109DECLARE_SUITE(hists_output);110DECLARE_SUITE(hists_cumulate);111DECLARE_SUITE(switch_tracking);112DECLARE_SUITE(fdarray__filter);113DECLARE_SUITE(fdarray__add);114DECLARE_SUITE(kmod_path__parse);115DECLARE_SUITE(thread_map);116DECLARE_SUITE(bpf);117DECLARE_SUITE(session_topology);118DECLARE_SUITE(thread_map_synthesize);119DECLARE_SUITE(thread_map_remove);120DECLARE_SUITE(cpu_map);121DECLARE_SUITE(synthesize_stat_config);122DECLARE_SUITE(synthesize_stat);123DECLARE_SUITE(synthesize_stat_round);124DECLARE_SUITE(event_update);125DECLARE_SUITE(event_times);126DECLARE_SUITE(backward_ring_buffer);127DECLARE_SUITE(sdt_event);128DECLARE_SUITE(is_printable_array);129DECLARE_SUITE(bitmap_print);130DECLARE_SUITE(perf_hooks);131DECLARE_SUITE(unit_number__scnprint);132DECLARE_SUITE(mem2node);133DECLARE_SUITE(maps__merge_in);134DECLARE_SUITE(time_utils);135DECLARE_SUITE(jit_write_elf);136DECLARE_SUITE(api_io);137DECLARE_SUITE(demangle_java);138DECLARE_SUITE(demangle_ocaml);139DECLARE_SUITE(pfm);140DECLARE_SUITE(parse_metric);141DECLARE_SUITE(pe_file_parsing);142DECLARE_SUITE(expand_cgroup_events);143DECLARE_SUITE(perf_time_to_tsc);144DECLARE_SUITE(dlfilter);145DECLARE_SUITE(sigtrap);146DECLARE_SUITE(event_groups);147DECLARE_SUITE(symbols);148DECLARE_SUITE(util);149 150/*151 * PowerPC and S390 do not support creation of instruction breakpoints using the152 * perf_event interface.153 *154 * ARM requires explicit rounding down of the instruction pointer in Thumb mode,155 * and then requires the single-step to be handled explicitly in the overflow156 * handler to avoid stepping into the SIGIO handler and getting stuck on the157 * breakpointed instruction.158 *159 * Since arm64 has the same issue with arm for the single-step handling, this160 * case also gets stuck on the breakpointed instruction.161 *162 * Just disable the test for these architectures until these issues are163 * resolved.164 */165#if defined(__powerpc__) || defined(__s390x__) || defined(__arm__) || defined(__aarch64__)166#define BP_SIGNAL_IS_SUPPORTED 0167#else168#define BP_SIGNAL_IS_SUPPORTED 1169#endif170 171#ifdef HAVE_DWARF_UNWIND_SUPPORT172struct thread;173struct perf_sample;174int test__arch_unwind_sample(struct perf_sample *sample,175			     struct thread *thread);176#endif177 178#if defined(__arm__)179DECLARE_SUITE(vectors_page);180#endif181 182/*183 * Define test workloads to be used in test suites.184 */185typedef int (*workload_fnptr)(int argc, const char **argv);186 187struct test_workload {188	const char	*name;189	workload_fnptr	func;190};191 192#define DECLARE_WORKLOAD(work) \193	extern struct test_workload workload__##work194 195#define DEFINE_WORKLOAD(work) \196struct test_workload workload__##work = {	\197	.name = #work,				\198	.func = work,				\199}200 201/* The list of test workloads */202DECLARE_WORKLOAD(noploop);203DECLARE_WORKLOAD(thloop);204DECLARE_WORKLOAD(leafloop);205DECLARE_WORKLOAD(sqrtloop);206DECLARE_WORKLOAD(brstack);207DECLARE_WORKLOAD(datasym);208DECLARE_WORKLOAD(landlock);209 210extern const char *dso_to_test;211extern const char *test_objdump_path;212 213#endif /* TESTS_H */214