tests: Add pam_malcontent.so tests
These tests check that the built `pam_malcontent.so` module can be loaded using `dlopen()` and that it exports the right symbol. This should mean that PAM can load it and use it. Unfortunately, we can’t actually run the module, since PAM hard-codes its configuration path as being in `/etc`, and there seems to be no way to override that to load a dummy configuration from a test directory. So the only way to test the PAM module is to use a file system bind mount to fake `/etc` (which requires privileges); or to actually install it on your system and integrate it into your real PAM configuration. Neither of those are acceptable for a unit test. It might be possible to re-execute a test under `bwrap` (if installed) to achieve this, bind mounting a dummy `/etc/pam.d/dummy` service file into the subprocess’ mount namespace, and otherwise bind mounting `/` to `/`. It would need a mock malcontent D-Bus API to talk to. Something to experiment with another time. (See `_pam_init_handlers()` in https://github.com/linux-pam/linux-pam/blob/master/libpam/pam_handlers.c for details of how PAM modules are loaded.) Signed-off-by: Philip Withnall <withnall@endlessm.com>
This commit is contained in:
parent
bd7b17ffd4
commit
876c155efb
3 changed files with 112 additions and 0 deletions
48
pam/tests/meson.build
Normal file
48
pam/tests/meson.build
Normal file
|
@ -0,0 +1,48 @@
|
|||
deps = [
|
||||
dependency('glib-2.0', version: '>= 2.60.0'),
|
||||
cc.find_library('dl'),
|
||||
]
|
||||
|
||||
envs = test_env + [
|
||||
'G_TEST_SRCDIR=' + meson.current_source_dir(),
|
||||
'G_TEST_BUILDDIR=' + meson.current_build_dir(),
|
||||
]
|
||||
|
||||
test_programs = [
|
||||
['pam_malcontent', [], deps],
|
||||
]
|
||||
|
||||
installed_tests_metadir = join_paths(datadir, 'installed-tests',
|
||||
'libmalcontent-' + libmalcontent_api_version)
|
||||
installed_tests_execdir = join_paths(libexecdir, 'installed-tests',
|
||||
'libmalcontent-' + libmalcontent_api_version)
|
||||
|
||||
foreach program: test_programs
|
||||
test_conf = configuration_data()
|
||||
test_conf.set('installed_tests_dir', installed_tests_execdir)
|
||||
test_conf.set('program', program[0])
|
||||
|
||||
configure_file(
|
||||
input: test_template,
|
||||
output: program[0] + '.test',
|
||||
install: enable_installed_tests,
|
||||
install_dir: installed_tests_metadir,
|
||||
configuration: test_conf,
|
||||
)
|
||||
|
||||
exe = executable(
|
||||
program[0],
|
||||
[program[0] + '.c'] + program[1],
|
||||
dependencies: program[2],
|
||||
include_directories: root_inc,
|
||||
install: enable_installed_tests,
|
||||
install_dir: installed_tests_execdir,
|
||||
)
|
||||
|
||||
test(
|
||||
program[0],
|
||||
exe,
|
||||
env: envs,
|
||||
args: ['--tap'],
|
||||
)
|
||||
endforeach
|
Loading…
Add table
Add a link
Reference in a new issue