test-coredump-util: add tests for parse_aux()

The test files are /proc//auxv files copies from various architecutres
signified by the file name suffix.

Those tests are fairly simple, but when we run them on n architectures, we do
~n² cross-arch tests.
This commit is contained in:
Zbigniew Jędrzejewski-Szmek
2023-03-23 18:06:46 +01:00
parent cb38fdbedb
commit 2f809d29e8
14 changed files with 92 additions and 57 deletions
+63
View File
@@ -1,7 +1,12 @@
/* SPDX-License-Identifier: LGPL-2.1-or-later */
#include <elf.h>
#include "alloc-util.h"
#include "coredump-util.h"
#include "fileio.h"
#include "fd-util.h"
#include "format-util.h"
#include "macro.h"
#include "tests.h"
@@ -64,4 +69,62 @@ TEST(coredump_filter_mask_from_string) {
1 << COREDUMP_FILTER_SHARED_DAX)));
}
static void test_parse_auxv_one(
uint8_t elf_class,
int dir_fd,
const char *filename,
int expect_at_secure,
uid_t expect_uid,
uid_t expect_euid,
gid_t expect_gid,
gid_t expect_egid) {
_cleanup_free_ char *data;
size_t data_size;
log_info("Parsing %s…", filename);
assert_se(read_full_file_at(dir_fd, filename, &data, &data_size) >= 0);
int at_secure;
uid_t uid, euid;
gid_t gid, egid;
assert_se(parse_auxv(LOG_ERR, elf_class, data, data_size,
&at_secure, &uid, &euid, &gid, &egid) == 0);
log_info("at_secure=%d, uid="UID_FMT", euid="UID_FMT", gid="GID_FMT", egid="GID_FMT,
at_secure, uid, euid, gid, egid);
assert_se(uid == expect_uid);
assert_se(euid == expect_euid);
assert_se(gid == expect_gid);
assert_se(egid == expect_egid);
}
TEST(test_parse_auxv) {
_cleanup_free_ char *dir = NULL;
_cleanup_close_ int dir_fd = -EBADF;
assert_se(get_testdata_dir("auxv", &dir) >= 0);
dir_fd = open(dir, O_RDONLY | O_CLOEXEC | O_DIRECTORY | O_PATH);
assert_se(dir_fd >= 0);
if (__BYTE_ORDER == __LITTLE_ENDIAN) {
test_parse_auxv_one(ELFCLASS32, dir_fd, "resolved.arm32", 0, 193, 193, 193, 193);
test_parse_auxv_one(ELFCLASS64, dir_fd, "bash.riscv64", 0, 1001, 1001, 1001, 1001);
test_parse_auxv_one(ELFCLASS32, dir_fd, "sleep.i686", 0, 1000, 1000, 1000, 1000);
/* after chgrp and chmod g+s */
test_parse_auxv_one(ELFCLASS32, dir_fd, "sleep32.i686", 1, 1000, 1000, 1000, 10);
test_parse_auxv_one(ELFCLASS64, dir_fd, "sleep64.amd64", 1, 1000, 1000, 1000, 10);
test_parse_auxv_one(ELFCLASS64, dir_fd, "sudo.aarch64", 1, 1494200408, 0, 1494200408, 1494200408);
test_parse_auxv_one(ELFCLASS64, dir_fd, "sudo.amd64", 1, 1000, 0, 1000, 1000);
/* Those run unprivileged, but start as root. */
test_parse_auxv_one(ELFCLASS64, dir_fd, "dbus-broker-launch.amd64", 0, 0, 0, 0, 0);
test_parse_auxv_one(ELFCLASS64, dir_fd, "dbus-broker-launch.aarch64", 0, 0, 0, 0, 0);
test_parse_auxv_one(ELFCLASS64, dir_fd, "polkitd.aarch64", 0, 0, 0, 0, 0);
} else {
test_parse_auxv_one(ELFCLASS64, dir_fd, "cat.s390x", 0, 3481, 3481, 3481, 3481);
}
}
DEFINE_TEST_MAIN(LOG_INFO);
+3
View File
@@ -0,0 +1,3 @@
/*.* -whitespace
/*.* binary
/*.* generated
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+26 -57
View File
@@ -3,63 +3,32 @@
if install_tests
testdata_dir = testsdir + '/testdata/'
install_subdir('journal-data',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-execute',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-fstab-generator',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-path',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-path-util',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-umount',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('test-network-generator-conversion',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-03.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-04.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-06.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-10.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-11.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-16.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-28.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-30.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-52.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-63.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
install_subdir('testsuite-80.units',
exclude_files : '.gitattributes',
install_dir : testdata_dir)
foreach subdir : [
'auxv',
'journal-data',
'units',
'test-execute',
'test-fstab-generator',
'test-path',
'test-path-util',
'test-umount',
'test-network-generator-conversion',
'testsuite-03.units',
'testsuite-04.units',
'testsuite-06.units',
'testsuite-10.units',
'testsuite-11.units',
'testsuite-16.units',
'testsuite-28.units',
'testsuite-30.units',
'testsuite-52.units',
'testsuite-63.units',
'testsuite-80.units',
]
install_subdir(subdir,
exclude_files : '.gitattributes',
install_dir : testdata_dir)
endforeach
install_data(kbd_model_map,
install_dir : testdata_dir + '/test-keymap-util')