kmod/testsuite
Julien Cristau b4d281f962 testsuite: fix override of `stat` on 32-bit architectures
When _FILE_OFFSET_BITS is 64, glibc headers turn `stat` calls into
`stat64`, and our `stat` override into a `stat64` function.  However,
because we use dlsym to get the address of libc's `stat`, we end up
calling into the "real" `stat` function, which deals with 32-bit off_t,
and we treat its result as if it were returned from stat64.  On most
architectures this seems to have been harmless, but on 32-bit mips,
st_mode's offset in struct stat and struct stat64 are different, so we
read garbage.

To fix this, explicitly unset _FILE_OFFSET_BITS in path.c, to turn off
the redirect magic in glibc headers, and override both the 32-bit and
64-bit functions so each call ends up wrapping the right libc function.

Fixes #16 (https://github.com/kmod-project/kmod/issues/16)
2022-09-05 13:35:09 -07:00
..
mkosi add Zstandard compression support 2020-09-10 21:55:01 -07:00
module-playground module-playground: Add debugfs entry in mod-simple 2022-06-26 23:23:46 -07:00
rootfs-pristine libkmod-config: re-quote option from kernel cmdline 2021-02-15 11:53:43 -08:00
.gitignore Add scratchbuf implementation 2016-08-15 10:26:42 -03:00
COPYING testsuite: re-license under LGPL 2012-07-10 10:31:57 -03:00
Makefile build-sys: add small redirecting Makefiles 2014-03-06 01:59:58 -03:00
README Remove bootstrap* scripts 2018-12-17 09:52:05 -08:00
delete_module.c testsuite: fix retcodes parsing 2015-01-14 14:25:02 -02:00
init_module.c testsuite: also wrap gettid in syscall() 2018-01-08 13:32:38 -08:00
path.c testsuite: fix override of `stat` on 32-bit architectures 2022-09-05 13:35:09 -07:00
populate-modules.sh testsuite: also test xz compression 2021-02-05 19:54:31 -08:00
stripped-module.h Use #pragma once instead of #ifndef 2012-07-18 10:31:50 -03:00
test-array.c testsuite: fix test_array_sort pointers inderection 2016-11-08 22:21:13 -02:00
test-blacklist.c testsuite: Automatically skip tests that fail when sysconfdir != /etc. 2021-01-07 19:44:50 -08:00
test-dependencies.c testsuite: port test-dependencies to module-playground 2015-02-03 01:12:13 -02:00
test-depmod.c testsuite: compress modules if feature is enabled 2021-02-05 19:52:00 -08:00
test-hash.c testsuite: add test for growing then shrinking a hash 2015-01-21 10:17:27 -02:00
test-init.c testsuite: add test for empty modules.builtin.aliases.bin 2020-12-27 16:40:08 -08:00
test-initstate.c test-initstate: Check for negative value on error 2022-02-20 20:58:11 -08:00
test-list.c testsuite: add tests for kmod_list 2015-01-26 19:20:51 -02:00
test-loaded.c Fix includes after change to build-sys 2015-01-02 12:41:01 -02:00
test-modinfo.c testsuite: fix modinfo test without openssl 2019-02-04 14:25:03 -08:00
test-modprobe.c test-modprobe: share single function for kcmdline tests 2021-02-15 11:53:43 -08:00
test-new-module.c Fix includes after change to build-sys 2015-01-02 12:41:01 -02:00
test-scratchbuf.c Add scratchbuf implementation 2016-08-15 10:26:42 -03:00
test-strbuf.c testsuite: prefer the use of streq() 2015-01-14 14:32:09 -02:00
test-testsuite.c util: fix warning of equal values on logical OR 2016-08-10 12:45:36 -03:00
test-tools.c tools: add basic versions of insert and remove 2015-03-07 12:09:51 -03:00
test-util.c testsuite: repair read of uninitialized memory 2022-06-30 09:54:23 -07:00
testsuite.c util: Add time-related functions from testsuite 2022-06-26 23:23:46 -07:00
testsuite.h testsuite: allow to re-use single function for tests 2021-02-15 11:53:43 -08:00
uname.c Remove FSF mailing address 2014-12-25 23:41:34 -02:00

README

testsuite

OVERVIEW
========

Kmod's testsuite was designed to automate the process of running tests with
different scenarios, configurations and architectures. The idea is that once we
received a bug report, we reproduce it using the testsuite so we avoid
recurring on the same bug in future.


FEATURES
========

- Isolate each test by running them in separate processes;
- Exec a binary, so we can test the tools and not only the lib API
- Fake accesses to filesystem so we can provide a test rootfs with all the
  configuration, indexes, etc that test needs to be executed.
- Fake calls to init_module(), delete_module() and uname(), so we don't have to
  run tests as root and figure out how to deal with different architectures.

HOW TO ADD A TEST
=================

The simplest way to add a test is to copy and paste one already there. Most of
the options you can have are covered by another tests. This is what you need to
pay attention when writing a test:

1 - Look at testsuite.h, struct test, to see all the options available.

2 - Use TESTSUITE_MAIN and DEFINE_TEST to add new tests. Don't forget to fill
    its description.

3 - If you want testsuite to compare the stdout/stderr of your tests in order
    to check if it worked or not, fill in output.{stderr,stdout} the file with
    the expected output. Bear in mind the same file is used for all
    architectures, so don't print arch-dependent content if you are comparing
    the output.

4 - Fill in the config vector. Setting any of these configuration will make
    testsuite to export LD_PRELOAD with the necessary override libs before
    executing the test. If you are not exec'ing an external binary, you need to
    pass "need_spawn = true" below, otherwise it will not work (LD_PRELOAD is
    only applied when exec'ing a binary). See each config description in
    testsuite.h

5 - need_spawn: if testsuite will exec itself before running a test

6 - expected_fail: if that test is expected to fail, i.e. the return code is
    expected not to be 0.

7 - The rootfs is populated by copying the entire contents of rootfs-pristine
    then running populate-modules.sh to copy generated modules from
    module-playground. Update the latter script to include any modules your
    test need.

8 - Tests can be run individually, outside of 'make check'. strace and gdb work
    too, as long as you tell them to operate on child process.

9 - Make sure test passes when using "default" build flags, i.e. by running
    'autogen.sh c'