164 lines · c
1// SPDX-License-Identifier: GPL-2.02#include <stdbool.h>3#include <stdlib.h>4#include <string.h>5#include "tests.h"6#include "dso.h"7#include "debug.h"8#include "event.h"9 10static int test(const char *path, bool alloc_name, bool kmod,11 int comp, const char *name)12{13 struct kmod_path m;14 15 memset(&m, 0x0, sizeof(m));16 17 TEST_ASSERT_VAL("kmod_path__parse",18 !__kmod_path__parse(&m, path, alloc_name));19 20 pr_debug("%s - alloc name %d, kmod %d, comp %d, name '%s'\n",21 path, alloc_name, m.kmod, m.comp, m.name);22 23 TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod);24 TEST_ASSERT_VAL("wrong comp", m.comp == comp);25 26 if (name)27 TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name));28 else29 TEST_ASSERT_VAL("wrong name", !m.name);30 31 free(m.name);32 return 0;33}34 35static int test_is_kernel_module(const char *path, int cpumode, bool expect)36{37 TEST_ASSERT_VAL("is_kernel_module",38 (!!is_kernel_module(path, cpumode)) == (!!expect));39 pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n",40 path, cpumode, expect ? "true" : "false");41 return 0;42}43 44#define T(path, an, k, c, n) \45 TEST_ASSERT_VAL("failed", !test(path, an, k, c, n))46 47#define M(path, c, e) \48 TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))49 50static int test__kmod_path__parse(struct test_suite *t __maybe_unused, int subtest __maybe_unused)51{52 /* path alloc_name kmod comp name */53 T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");54 T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL );55 T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");56 T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL );57 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);58 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true);59 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false);60 61#ifdef HAVE_ZLIB_SUPPORT62 /* path alloc_name kmod comp name */63 T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]");64 T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL );65 T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]");66 T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL );67 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);68 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true);69 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false);70 71 /* path alloc_name kmod comp name */72 T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz");73 T("/xxxx/xxxx/x.gz", false , false, 1 , NULL );74 T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz");75 T("/xxxx/xxxx/x.gz", false , false, 1 , NULL );76 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);77 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false);78 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false);79 80 /* path alloc_name kmod comp name */81 T("x.gz", true , false, 1 , "x.gz");82 T("x.gz", false , false, 1 , NULL );83 T("x.gz", true , false, 1 , "x.gz");84 T("x.gz", false , false, 1 , NULL );85 M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);86 M("x.gz", PERF_RECORD_MISC_KERNEL, false);87 M("x.gz", PERF_RECORD_MISC_USER, false);88 89 /* path alloc_name kmod comp name */90 T("x.ko.gz", true , true, 1 , "[x]");91 T("x.ko.gz", false , true, 1 , NULL );92 T("x.ko.gz", true , true, 1 , "[x]");93 T("x.ko.gz", false , true, 1 , NULL );94 M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);95 M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true);96 M("x.ko.gz", PERF_RECORD_MISC_USER, false);97#endif98 99 /* path alloc_name kmod comp name */100 T("[test_module]", true , true, false, "[test_module]");101 T("[test_module]", false , true, false, NULL );102 T("[test_module]", true , true, false, "[test_module]");103 T("[test_module]", false , true, false, NULL );104 M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);105 M("[test_module]", PERF_RECORD_MISC_KERNEL, true);106 M("[test_module]", PERF_RECORD_MISC_USER, false);107 108 /* path alloc_name kmod comp name */109 T("[test.module]", true , true, false, "[test.module]");110 T("[test.module]", false , true, false, NULL );111 T("[test.module]", true , true, false, "[test.module]");112 T("[test.module]", false , true, false, NULL );113 M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);114 M("[test.module]", PERF_RECORD_MISC_KERNEL, true);115 M("[test.module]", PERF_RECORD_MISC_USER, false);116 117 /* path alloc_name kmod comp name */118 T("[vdso]", true , false, false, "[vdso]");119 T("[vdso]", false , false, false, NULL );120 T("[vdso]", true , false, false, "[vdso]");121 T("[vdso]", false , false, false, NULL );122 M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);123 M("[vdso]", PERF_RECORD_MISC_KERNEL, false);124 M("[vdso]", PERF_RECORD_MISC_USER, false);125 126 T("[vdso32]", true , false, false, "[vdso32]");127 T("[vdso32]", false , false, false, NULL );128 T("[vdso32]", true , false, false, "[vdso32]");129 T("[vdso32]", false , false, false, NULL );130 M("[vdso32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);131 M("[vdso32]", PERF_RECORD_MISC_KERNEL, false);132 M("[vdso32]", PERF_RECORD_MISC_USER, false);133 134 T("[vdsox32]", true , false, false, "[vdsox32]");135 T("[vdsox32]", false , false, false, NULL );136 T("[vdsox32]", true , false, false, "[vdsox32]");137 T("[vdsox32]", false , false, false, NULL );138 M("[vdsox32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);139 M("[vdsox32]", PERF_RECORD_MISC_KERNEL, false);140 M("[vdsox32]", PERF_RECORD_MISC_USER, false);141 142 /* path alloc_name kmod comp name */143 T("[vsyscall]", true , false, false, "[vsyscall]");144 T("[vsyscall]", false , false, false, NULL );145 T("[vsyscall]", true , false, false, "[vsyscall]");146 T("[vsyscall]", false , false, false, NULL );147 M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);148 M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false);149 M("[vsyscall]", PERF_RECORD_MISC_USER, false);150 151 /* path alloc_name kmod comp name */152 T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]");153 T("[kernel.kallsyms]", false , false, false, NULL );154 T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]");155 T("[kernel.kallsyms]", false , false, false, NULL );156 M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);157 M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false);158 M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false);159 160 return 0;161}162 163DEFINE_SUITE("kmod_path__parse", kmod_path__parse);164