0001
0002 #include <stdbool.h>
0003 #include <stdlib.h>
0004 #include <string.h>
0005 #include "tests.h"
0006 #include "dso.h"
0007 #include "debug.h"
0008 #include "event.h"
0009
0010 static int test(const char *path, bool alloc_name, bool kmod,
0011 int comp, const char *name)
0012 {
0013 struct kmod_path m;
0014
0015 memset(&m, 0x0, sizeof(m));
0016
0017 TEST_ASSERT_VAL("kmod_path__parse",
0018 !__kmod_path__parse(&m, path, alloc_name));
0019
0020 pr_debug("%s - alloc name %d, kmod %d, comp %d, name '%s'\n",
0021 path, alloc_name, m.kmod, m.comp, m.name);
0022
0023 TEST_ASSERT_VAL("wrong kmod", m.kmod == kmod);
0024 TEST_ASSERT_VAL("wrong comp", m.comp == comp);
0025
0026 if (name)
0027 TEST_ASSERT_VAL("wrong name", m.name && !strcmp(name, m.name));
0028 else
0029 TEST_ASSERT_VAL("wrong name", !m.name);
0030
0031 free(m.name);
0032 return 0;
0033 }
0034
0035 static int test_is_kernel_module(const char *path, int cpumode, bool expect)
0036 {
0037 TEST_ASSERT_VAL("is_kernel_module",
0038 (!!is_kernel_module(path, cpumode)) == (!!expect));
0039 pr_debug("%s (cpumode: %d) - is_kernel_module: %s\n",
0040 path, cpumode, expect ? "true" : "false");
0041 return 0;
0042 }
0043
0044 #define T(path, an, k, c, n) \
0045 TEST_ASSERT_VAL("failed", !test(path, an, k, c, n))
0046
0047 #define M(path, c, e) \
0048 TEST_ASSERT_VAL("failed", !test_is_kernel_module(path, c, e))
0049
0050 static int test__kmod_path__parse(struct test_suite *t __maybe_unused, int subtest __maybe_unused)
0051 {
0052
0053 T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");
0054 T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL );
0055 T("/xxxx/xxxx/x-x.ko", true , true, 0 , "[x_x]");
0056 T("/xxxx/xxxx/x-x.ko", false , true, 0 , NULL );
0057 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
0058 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_KERNEL, true);
0059 M("/xxxx/xxxx/x-x.ko", PERF_RECORD_MISC_USER, false);
0060
0061 #ifdef HAVE_ZLIB_SUPPORT
0062
0063 T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]");
0064 T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL );
0065 T("/xxxx/xxxx/x.ko.gz", true , true, 1 , "[x]");
0066 T("/xxxx/xxxx/x.ko.gz", false , true, 1 , NULL );
0067 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
0068 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
0069 M("/xxxx/xxxx/x.ko.gz", PERF_RECORD_MISC_USER, false);
0070
0071
0072 T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz");
0073 T("/xxxx/xxxx/x.gz", false , false, 1 , NULL );
0074 T("/xxxx/xxxx/x.gz", true , false, 1 , "x.gz");
0075 T("/xxxx/xxxx/x.gz", false , false, 1 , NULL );
0076 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0077 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_KERNEL, false);
0078 M("/xxxx/xxxx/x.gz", PERF_RECORD_MISC_USER, false);
0079
0080
0081 T("x.gz", true , false, 1 , "x.gz");
0082 T("x.gz", false , false, 1 , NULL );
0083 T("x.gz", true , false, 1 , "x.gz");
0084 T("x.gz", false , false, 1 , NULL );
0085 M("x.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0086 M("x.gz", PERF_RECORD_MISC_KERNEL, false);
0087 M("x.gz", PERF_RECORD_MISC_USER, false);
0088
0089
0090 T("x.ko.gz", true , true, 1 , "[x]");
0091 T("x.ko.gz", false , true, 1 , NULL );
0092 T("x.ko.gz", true , true, 1 , "[x]");
0093 T("x.ko.gz", false , true, 1 , NULL );
0094 M("x.ko.gz", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
0095 M("x.ko.gz", PERF_RECORD_MISC_KERNEL, true);
0096 M("x.ko.gz", PERF_RECORD_MISC_USER, false);
0097 #endif
0098
0099
0100 T("[test_module]", true , true, false, "[test_module]");
0101 T("[test_module]", false , true, false, NULL );
0102 T("[test_module]", true , true, false, "[test_module]");
0103 T("[test_module]", false , true, false, NULL );
0104 M("[test_module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
0105 M("[test_module]", PERF_RECORD_MISC_KERNEL, true);
0106 M("[test_module]", PERF_RECORD_MISC_USER, false);
0107
0108
0109 T("[test.module]", true , true, false, "[test.module]");
0110 T("[test.module]", false , true, false, NULL );
0111 T("[test.module]", true , true, false, "[test.module]");
0112 T("[test.module]", false , true, false, NULL );
0113 M("[test.module]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, true);
0114 M("[test.module]", PERF_RECORD_MISC_KERNEL, true);
0115 M("[test.module]", PERF_RECORD_MISC_USER, false);
0116
0117
0118 T("[vdso]", true , false, false, "[vdso]");
0119 T("[vdso]", false , false, false, NULL );
0120 T("[vdso]", true , false, false, "[vdso]");
0121 T("[vdso]", false , false, false, NULL );
0122 M("[vdso]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0123 M("[vdso]", PERF_RECORD_MISC_KERNEL, false);
0124 M("[vdso]", PERF_RECORD_MISC_USER, false);
0125
0126 T("[vdso32]", true , false, false, "[vdso32]");
0127 T("[vdso32]", false , false, false, NULL );
0128 T("[vdso32]", true , false, false, "[vdso32]");
0129 T("[vdso32]", false , false, false, NULL );
0130 M("[vdso32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0131 M("[vdso32]", PERF_RECORD_MISC_KERNEL, false);
0132 M("[vdso32]", PERF_RECORD_MISC_USER, false);
0133
0134 T("[vdsox32]", true , false, false, "[vdsox32]");
0135 T("[vdsox32]", false , false, false, NULL );
0136 T("[vdsox32]", true , false, false, "[vdsox32]");
0137 T("[vdsox32]", false , false, false, NULL );
0138 M("[vdsox32]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0139 M("[vdsox32]", PERF_RECORD_MISC_KERNEL, false);
0140 M("[vdsox32]", PERF_RECORD_MISC_USER, false);
0141
0142
0143 T("[vsyscall]", true , false, false, "[vsyscall]");
0144 T("[vsyscall]", false , false, false, NULL );
0145 T("[vsyscall]", true , false, false, "[vsyscall]");
0146 T("[vsyscall]", false , false, false, NULL );
0147 M("[vsyscall]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0148 M("[vsyscall]", PERF_RECORD_MISC_KERNEL, false);
0149 M("[vsyscall]", PERF_RECORD_MISC_USER, false);
0150
0151
0152 T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]");
0153 T("[kernel.kallsyms]", false , false, false, NULL );
0154 T("[kernel.kallsyms]", true , false, false, "[kernel.kallsyms]");
0155 T("[kernel.kallsyms]", false , false, false, NULL );
0156 M("[kernel.kallsyms]", PERF_RECORD_MISC_CPUMODE_UNKNOWN, false);
0157 M("[kernel.kallsyms]", PERF_RECORD_MISC_KERNEL, false);
0158 M("[kernel.kallsyms]", PERF_RECORD_MISC_USER, false);
0159
0160 return 0;
0161 }
0162
0163 DEFINE_SUITE("kmod_path__parse", kmod_path__parse);