From: Sven Eden Date: Mon, 14 Aug 2017 07:16:16 +0000 (+0200) Subject: Prep v235: Apply upstream fixes (9/10) [src/test] X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=7dee75c3e92339d219732cf4908e40380c31c0bf;p=elogind.git Prep v235: Apply upstream fixes (9/10) [src/test] --- diff --git a/src/test/meson.build b/src/test/meson.build index 425c53f83..ccf0f7077 100644 --- a/src/test/meson.build +++ b/src/test/meson.build @@ -46,8 +46,9 @@ tests += [ # [['src/test/test-device-nodes.c'], # [], # []], - -# [['src/test/test-engine.c'], +# +# [['src/test/test-engine.c', +# 'src/test/test-helper.c'], # [libcore, # libudev, # libelogind_internal], @@ -57,7 +58,7 @@ tests += [ # libselinux, # libmount, # libblkid]], - +# # [['src/test/test-job-type.c'], # [libcore, # libshared], @@ -67,7 +68,7 @@ tests += [ # libselinux, # libmount, # libblkid]], - +# # [['src/test/test-ns.c'], # [libcore, # libshared], @@ -78,7 +79,7 @@ tests += [ # libmount, # libblkid], # '', 'manual'], - +# # [['src/test/test-loopback.c'], # [libcore, # libshared], @@ -88,7 +89,7 @@ tests += [ # libselinux, # libmount, # libblkid]], - +# # [['src/test/test-hostname.c'], # [libcore, # libshared], @@ -99,18 +100,19 @@ tests += [ # libmount, # libblkid], # '', 'unsafe'], - +# # [['src/test/test-dns-domain.c'], # [libcore, # libelogind_network], # []], - +# # [['src/test/test-boot-timestamps.c'], # [], # [], # 'ENABLE_EFI'], - -# [['src/test/test-unit-name.c'], +# +# [['src/test/test-unit-name.c', +# 'src/test/test-helper.c'], # [libcore, # libshared], # [threads, @@ -119,8 +121,9 @@ tests += [ # libselinux, # libmount, # libblkid]], - -# [['src/test/test-unit-file.c'], +# +# [['src/test/test-unit-file.c', +# 'src/test/test-helper.c'], # [libcore, # libshared], # [threads, @@ -279,32 +282,32 @@ tests += [ # [['src/test/test-terminal-util.c'], # [], # []], - +# # [['src/test/test-path-lookup.c'], # [], # []], - +# # [['src/test/test-uid-range.c'], # [], # []], - +# # [['src/test/test-cap-list.c', # generated_gperf_headers], # [], # [libcap]], - +# # [['src/test/test-socket-util.c'], # [], # []], - +# # [['src/test/test-barrier.c'], # [], # []], - +# # [['src/test/test-tmpfiles.c'], # [], # []], - +# # [['src/test/test-namespace.c'], # [libcore, # libshared], @@ -320,26 +323,26 @@ tests += [ # [['src/test/test-install-root.c'], # [], # []], - +# # [['src/test/test-acl-util.c'], # [], # [], # 'HAVE_ACL'], - +# # [['src/test/test-seccomp.c'], # [], # [libseccomp], # 'HAVE_SECCOMP'], - +# # [['src/test/test-rlimit-util.c'], # [], # []], - +# # [['src/test/test-ask-password-api.c'], # [], # [], # '', 'manual'], - +# # [['src/test/test-dissect-image.c'], # [], # [libblkid], @@ -373,7 +376,7 @@ tests += [ # [['src/test/test-bitmap.c'], # [], # []], - +# # [['src/test/test-xml.c'], # [], # []], @@ -415,15 +418,15 @@ tests += [ # [['src/test/test-fileio.c'], # [], # []], - +# # [['src/test/test-time.c'], # [], # []], - +# # [['src/test/test-clock.c'], # [], # []], - +# # [['src/test/test-architecture.c'], # [], # []], @@ -443,13 +446,13 @@ tests += [ # [], # [], # '', 'manual'], - - +# +# # [['src/test/test-firewall-util.c'], # [libshared], # [], # 'HAVE_LIBIPTC'], - +# # [['src/test/test-netlink-manual.c'], # [], # [libkmod], @@ -464,15 +467,15 @@ tests += [ # [['src/test/test-date.c'], # [], # []], - +# # [['src/test/test-sleep.c'], # [], # []], - +# # [['src/test/test-replace-var.c'], # [], # []], - +# # [['src/test/test-calendarspec.c'], # [], # []], @@ -505,19 +508,19 @@ tests += [ # libselinux, # libmount, # libblkid]], - +# # [['src/test/test-cgroup-util.c'], # [], # []], - +# # [['src/test/test-env-util.c'], # [], # []], - +# # [['src/test/test-strbuf.c'], # [], # []], - +# # [['src/test/test-strv.c'], # [], # []], @@ -538,8 +541,9 @@ tests += [ # libselinux, # libmount, # libblkid]], - -# [['src/test/test-execute.c'], +# +# [['src/test/test-execute.c', +# 'src/test/test-helper.c'], # [libcore, # libshared], # [threads, @@ -558,18 +562,19 @@ tests += [ # [['src/test/test-strxcpyx.c'], # [], # []], - +# # [['src/test/test-install.c'], # [libcore, # libshared], # [], # '', 'manual'], - +# # [['src/test/test-watchdog.c'], # [], # []], - -# [['src/test/test-sched-prio.c'], +# +# [['src/test/test-sched-prio.c', +# 'src/test/test-helper.c'], # [libcore, # libshared], # [threads, @@ -593,20 +598,20 @@ tests += [ # generated_gperf_headers], # [], # []], - +# # [['src/test/test-arphrd-list.c', # generated_gperf_headers], # [], # []], - +# # [['src/test/test-journal-importer.c'], # [], # []], - +# # [['src/test/test-libudev.c'], # [libshared], # []], - +# # [['src/test/test-udev.c'], # [libudev_core, # libudev_internal, @@ -648,14 +653,14 @@ tests += [ # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-send.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-syslog.c'], # [libjournal_core, # libshared], @@ -663,63 +668,63 @@ tests += [ # libxz, # liblz4, # libselinux]], - +# # [['src/journal/test-journal-match.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-enum.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-stream.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-flush.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-init.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-verify.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-journal-interleaving.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-mmap-cache.c'], # [libjournal_core, # libshared], # [threads, # libxz, # liblz4]], - +# # [['src/journal/test-catalog.c'], # [libjournal_core, # libshared], @@ -727,20 +732,20 @@ tests += [ # libxz, # liblz4], # '', '', '-DCATALOG_DIR="@0@"'.format(build_catalog_dir)], - +# # [['src/journal/test-compress.c'], # [libjournal_core, # libshared], # [liblz4, # libxz]], - +# # [['src/journal/test-compress-benchmark.c'], # [libjournal_core, # libshared], # [liblz4, # libxz], # '', 'timeout=90'], - +# # [['src/journal/test-audit-type.c'], # [libjournal_core, # libshared], @@ -770,7 +775,7 @@ tests += [ # [['src/libelogind/sd-bus/test-bus-chat.c'], # [], # [threads]], - +# # [['src/libelogind/sd-bus/test-bus-cleanup.c'], # [], # [threads, @@ -808,7 +813,7 @@ tests += [ # [libglib, # libgobject, # libgio]], - +# # [['src/libelogind/sd-bus/test-bus-creds.c'], # [], # []], @@ -822,15 +827,15 @@ tests += [ # [['src/libelogind/sd-bus/test-bus-kernel.c'], # [], # []], - +# # [['src/libelogind/sd-bus/test-bus-kernel-bloom.c'], # [], # []], - +# # [['src/libelogind/sd-bus/test-bus-benchmark.c'], # [], # [threads]], - +# # [['src/libelogind/sd-bus/test-bus-zero-copy.c'], # [], # []], @@ -848,11 +853,11 @@ tests += [ # [['src/libelogind/sd-netlink/test-netlink.c'], # [], # []], - +# # [['src/libelogind/sd-netlink/test-local-addresses.c'], # [], # []], - +# # [['src/libelogind/sd-resolve/test-resolve.c'], # [], # [threads]], @@ -883,13 +888,13 @@ tests += [ # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-sd-dhcp-lease.c', # 'src/libelogind-network/dhcp-lease-internal.h'], # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-dhcp-client.c', # 'src/libelogind-network/dhcp-protocol.h', # 'src/libelogind-network/dhcp-internal.h', @@ -897,33 +902,33 @@ tests += [ # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-dhcp-server.c'], # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-ipv4ll.c', # 'src/libelogind-network/arp-util.h', # 'src/systemd/sd-ipv4ll.h'], # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-ipv4ll-manual.c', # 'src/systemd/sd-ipv4ll.h'], # [libshared, # libelogind_network], # [], # '', 'manual'], - +# # [['src/libelogind-network/test-acd.c', # 'src/systemd/sd-ipv4acd.h'], # [libshared, # libelogind_network], # [], # '', 'manual'], - +# # [['src/libelogind-network/test-ndisc-rs.c', # 'src/libelogind-network/dhcp-identifier.h', # 'src/libelogind-network/dhcp-identifier.c', @@ -933,14 +938,14 @@ tests += [ # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-ndisc-ra.c', # 'src/libelogind-network/icmp6-util.h', # 'src/systemd/sd-ndisc.h'], # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-dhcp6-client.c', # 'src/libelogind-network/dhcp-identifier.h', # 'src/libelogind-network/dhcp-identifier.c', @@ -949,7 +954,7 @@ tests += [ # [libshared, # libelogind_network], # []], - +# # [['src/libelogind-network/test-lldp.c'], # [libshared, # libelogind_network], @@ -972,7 +977,5 @@ tests += [ [['src/login/test-login-tables.c'], [liblogind_core, libshared], - [threads, - libaudit, - libudev]], + [threads]], ] diff --git a/src/test/test-cgroup.c b/src/test/test-cgroup.c index 5336c1965..71e318a15 100644 --- a/src/test/test-cgroup.c +++ b/src/test/test-cgroup.c @@ -35,19 +35,19 @@ int main(int argc, char*argv[]) { assert_se(cg_create(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-c") == 0); assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b", 0) == 0); - assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0); + assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid_cached(), &path) == 0); assert_se(streq(path, "/test-b")); free(path); assert_se(cg_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-a", 0) == 0); - assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0); + assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid_cached(), &path) == 0); assert_se(path_equal(path, "/test-a")); free(path); assert_se(cg_create_and_attach(SYSTEMD_CGROUP_CONTROLLER, "/test-b/test-d", 0) == 0); - assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid(), &path) == 0); + assert_se(cg_pid_get_path(SYSTEMD_CGROUP_CONTROLLER, getpid_cached(), &path) == 0); assert_se(path_equal(path, "/test-b/test-d")); free(path); diff --git a/src/test/test-helper.h b/src/test/test-helper.h index ddb10f88f..8af32c874 100644 --- a/src/test/test-helper.h +++ b/src/test/test-helper.h @@ -39,3 +39,5 @@ -ENOENT, \ -ENOMEDIUM /* cannot determine cgroup */ \ ) + +void enter_cgroup_subroot(void); diff --git a/src/test/test-log.c b/src/test/test-log.c index 626d2c613..8ab569f47 100644 --- a/src/test/test-log.c +++ b/src/test/test-log.c @@ -39,7 +39,7 @@ int main(int argc, char* argv[]) { log_open(); log_struct(LOG_INFO, - "MESSAGE=Waldo PID="PID_FMT, getpid(), + "MESSAGE=Waldo PID="PID_FMT, getpid_cached(), "SERVICE=piepapo", NULL); @@ -47,12 +47,12 @@ int main(int argc, char* argv[]) { log_open(); log_struct(LOG_INFO, - "MESSAGE=Foobar PID="PID_FMT, getpid(), + "MESSAGE=Foobar PID="PID_FMT, getpid_cached(), "SERVICE=foobar", NULL); log_struct(LOG_INFO, - "MESSAGE=Foobar PID="PID_FMT, getpid(), + "MESSAGE=Foobar PID="PID_FMT, getpid_cached(), "FORMAT_STR_TEST=1=%i A=%c 2=%hi 3=%li 4=%lli 1=%p foo=%s 2.5=%g 3.5=%g 4.5=%Lg", (int) 1, 'A', (short) 2, (long int) 3, (long long int) 4, (void*) 1, "foo", (float) 2.5f, (double) 3.5, (long double) 4.5, "SUFFIX=GOT IT", diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c index 07c0704ef..c9050f0d6 100644 --- a/src/test/test-process-util.c +++ b/src/test/test-process-util.c @@ -121,7 +121,7 @@ static void test_pid_is_unwaited(void) { waitpid(pid, &status, 0); assert_se(!pid_is_unwaited(pid)); } - assert_se(pid_is_unwaited(getpid())); + assert_se(pid_is_unwaited(getpid_cached())); assert_se(!pid_is_unwaited(-1)); } @@ -138,7 +138,7 @@ static void test_pid_is_alive(void) { waitpid(pid, &status, 0); assert_se(!pid_is_alive(pid)); } - assert_se(pid_is_alive(getpid())); + assert_se(pid_is_alive(getpid_cached())); assert_se(!pid_is_alive(-1)); } @@ -213,149 +213,149 @@ static void test_get_process_cmdline_harder(void) { assert_se(prctl(PR_SET_NAME, "testa") >= 0); - assert_se(get_process_cmdline(getpid(), 0, false, &line) == -ENOENT); + assert_se(get_process_cmdline(getpid_cached(), 0, false, &line) == -ENOENT); - assert_se(get_process_cmdline(getpid(), 0, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, true, &line) >= 0); assert_se(streq(line, "[testa]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 1, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 1, true, &line) >= 0); assert_se(streq(line, "")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 2, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 2, true, &line) >= 0); assert_se(streq(line, "[")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 3, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 3, true, &line) >= 0); assert_se(streq(line, "[.")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 4, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 4, true, &line) >= 0); assert_se(streq(line, "[..")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 5, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 5, true, &line) >= 0); assert_se(streq(line, "[...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 6, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 6, true, &line) >= 0); assert_se(streq(line, "[...]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 7, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 7, true, &line) >= 0); assert_se(streq(line, "[t...]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 8, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 8, true, &line) >= 0); assert_se(streq(line, "[testa]")); line = mfree(line); assert_se(write(fd, "\0\0\0\0\0\0\0\0\0", 10) == 10); - assert_se(get_process_cmdline(getpid(), 0, false, &line) == -ENOENT); + assert_se(get_process_cmdline(getpid_cached(), 0, false, &line) == -ENOENT); - assert_se(get_process_cmdline(getpid(), 0, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, true, &line) >= 0); assert_se(streq(line, "[testa]")); line = mfree(line); assert_se(write(fd, "foo\0bar\0\0\0\0\0", 10) == 10); - assert_se(get_process_cmdline(getpid(), 0, false, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, false, &line) >= 0); assert_se(streq(line, "foo bar")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 0, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, true, &line) >= 0); assert_se(streq(line, "foo bar")); line = mfree(line); assert_se(write(fd, "quux", 4) == 4); - assert_se(get_process_cmdline(getpid(), 0, false, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, false, &line) >= 0); assert_se(streq(line, "foo bar quux")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 0, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, true, &line) >= 0); assert_se(streq(line, "foo bar quux")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 1, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 1, true, &line) >= 0); assert_se(streq(line, "")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 2, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 2, true, &line) >= 0); assert_se(streq(line, ".")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 3, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 3, true, &line) >= 0); assert_se(streq(line, "..")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 4, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 4, true, &line) >= 0); assert_se(streq(line, "...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 5, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 5, true, &line) >= 0); assert_se(streq(line, "f...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 6, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 6, true, &line) >= 0); assert_se(streq(line, "fo...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 7, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 7, true, &line) >= 0); assert_se(streq(line, "foo...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 8, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 8, true, &line) >= 0); assert_se(streq(line, "foo...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 9, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 9, true, &line) >= 0); assert_se(streq(line, "foo b...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 10, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 10, true, &line) >= 0); assert_se(streq(line, "foo ba...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 11, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 11, true, &line) >= 0); assert_se(streq(line, "foo bar...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 12, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 12, true, &line) >= 0); assert_se(streq(line, "foo bar...")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 13, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 13, true, &line) >= 0); assert_se(streq(line, "foo bar quux")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 14, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 14, true, &line) >= 0); assert_se(streq(line, "foo bar quux")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 1000, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 1000, true, &line) >= 0); assert_se(streq(line, "foo bar quux")); line = mfree(line); assert_se(ftruncate(fd, 0) >= 0); assert_se(prctl(PR_SET_NAME, "aaaa bbbb cccc") >= 0); - assert_se(get_process_cmdline(getpid(), 0, false, &line) == -ENOENT); + assert_se(get_process_cmdline(getpid_cached(), 0, false, &line) == -ENOENT); - assert_se(get_process_cmdline(getpid(), 0, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 0, true, &line) >= 0); assert_se(streq(line, "[aaaa bbbb cccc]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 10, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 10, true, &line) >= 0); assert_se(streq(line, "[aaaa...]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 11, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 11, true, &line) >= 0); assert_se(streq(line, "[aaaa...]")); line = mfree(line); - assert_se(get_process_cmdline(getpid(), 12, true, &line) >= 0); + assert_se(get_process_cmdline(getpid_cached(), 12, true, &line) >= 0); assert_se(streq(line, "[aaaa b...]")); line = mfree(line); @@ -364,38 +364,22 @@ static void test_get_process_cmdline_harder(void) { } #if 0 /// UNNEEDED by elogind -static void test_rename_process_one(const char *p, int ret) { +static void test_rename_process_now(const char *p, int ret) { _cleanup_free_ char *comm = NULL, *cmdline = NULL; - pid_t pid; int r; - pid = fork(); - assert_se(pid >= 0); - - if (pid > 0) { - siginfo_t si; - - assert_se(wait_for_terminate(pid, &si) >= 0); - assert_se(si.si_code == CLD_EXITED); - assert_se(si.si_status == EXIT_SUCCESS); - - return; - } - - /* child */ r = rename_process(p); - assert_se(r == ret || (ret == 0 && r >= 0) || (ret > 0 && r > 0)); if (r < 0) - goto finish; + return; #ifdef HAVE_VALGRIND_VALGRIND_H /* see above, valgrind is weird, we can't verify what we are doing here */ if (RUNNING_ON_VALGRIND) - goto finish; + return; #endif assert_se(get_process_comm(0, &comm) >= 0); @@ -403,11 +387,57 @@ static void test_rename_process_one(const char *p, int ret) { assert_se(strneq(comm, p, 15)); assert_se(get_process_cmdline(0, 0, false, &cmdline) >= 0); - log_info("cmdline = <%s>", cmdline); - assert_se(strneq(p, cmdline, strlen("test-process-util"))); - assert_se(startswith(p, cmdline)); + /* we cannot expect cmdline to be renamed properly without privileges */ + if (geteuid() == 0) { + log_info("cmdline = <%s>", cmdline); + assert_se(strneq(p, cmdline, strlen("test-process-util"))); + assert_se(startswith(p, cmdline)); + } else + log_info("cmdline = <%s> (not verified)", cmdline); +} + +static void test_rename_process_one(const char *p, int ret) { + siginfo_t si; + pid_t pid; + + pid = fork(); + assert_se(pid >= 0); + + if (pid == 0) { + /* child */ + test_rename_process_now(p, ret); + _exit(EXIT_SUCCESS); + } + + assert_se(wait_for_terminate(pid, &si) >= 0); + assert_se(si.si_code == CLD_EXITED); + assert_se(si.si_status == EXIT_SUCCESS); +} + +static void test_rename_process_multi(void) { + pid_t pid; -finish: + pid = fork(); + assert_se(pid >= 0); + + if (pid > 0) { + siginfo_t si; + + assert_se(wait_for_terminate(pid, &si) >= 0); + assert_se(si.si_code == CLD_EXITED); + assert_se(si.si_status == EXIT_SUCCESS); + + return; + } + + /* child */ + test_rename_process_now("one", 1); + test_rename_process_now("more", 0); /* longer than "one", hence truncated */ + setresuid(99, 99, 99); + test_rename_process_now("time!", 0); + test_rename_process_now("0", 1); /* shorter than "one", should fit */ + test_rename_process_one("", -EINVAL); + test_rename_process_one(NULL, -EINVAL); _exit(EXIT_SUCCESS); } @@ -417,6 +447,62 @@ static void test_rename_process(void) { test_rename_process_one("foo", 1); /* should always fit */ test_rename_process_one("this is a really really long process name, followed by some more words", 0); /* unlikely to fit */ test_rename_process_one("1234567", 1); /* should always fit */ + test_rename_process_multi(); /* multiple invocations and dropped privileges */ +} + +static void test_getpid_cached(void) { + siginfo_t si; + pid_t a, b, c, d, e, f, child; + + a = raw_getpid(); + b = getpid_cached(); + c = getpid(); + + assert_se(a == b && a == c); + + child = fork(); + assert_se(child >= 0); + + if (child == 0) { + /* In child */ + a = raw_getpid(); + b = getpid_cached(); + c = getpid(); + + assert_se(a == b && a == c); + _exit(0); + } + + d = raw_getpid(); + e = getpid_cached(); + f = getpid(); + + assert_se(a == d && a == e && a == f); + + assert_se(wait_for_terminate(child, &si) >= 0); + assert_se(si.si_status == 0); + assert_se(si.si_code == CLD_EXITED); +} + +#define MEASURE_ITERATIONS (10000000LLU) + +static void test_getpid_measure(void) { + unsigned long long i; + usec_t t, q; + + t = now(CLOCK_MONOTONIC); + for (i = 0; i < MEASURE_ITERATIONS; i++) + (void) getpid(); + q = now(CLOCK_MONOTONIC) - t; + + log_info(" glibc getpid(): %llu/s\n", (unsigned long long) (MEASURE_ITERATIONS*USEC_PER_SEC/q)); + + t = now(CLOCK_MONOTONIC); + for (i = 0; i < MEASURE_ITERATIONS; i++) + (void) getpid_cached(); + q = now(CLOCK_MONOTONIC) - t; + + log_info("getpid_cached(): %llu/s\n", (unsigned long long) (MEASURE_ITERATIONS*USEC_PER_SEC/q)); } #endif // 0 @@ -448,6 +534,8 @@ int main(int argc, char *argv[]) { #if 0 /// UNNEEDED by elogind test_rename_process(); #endif // 0 + test_getpid_cached(); + test_getpid_measure(); return 0; } diff --git a/src/test/test-signal-util.c b/src/test/test-signal-util.c index 671eb869c..92e392778 100644 --- a/src/test/test-signal-util.c +++ b/src/test/test-signal-util.c @@ -50,12 +50,12 @@ static void test_block_signals(void) { static void test_ignore_signals(void) { assert_se(ignore_signals(SIGINT, -1) >= 0); - assert_se(kill(getpid(), SIGINT) >= 0); + assert_se(kill(getpid_cached(), SIGINT) >= 0); assert_se(ignore_signals(SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE, -1) >= 0); - assert_se(kill(getpid(), SIGUSR1) >= 0); - assert_se(kill(getpid(), SIGUSR2) >= 0); - assert_se(kill(getpid(), SIGTERM) >= 0); - assert_se(kill(getpid(), SIGPIPE) >= 0); + assert_se(kill(getpid_cached(), SIGUSR1) >= 0); + assert_se(kill(getpid_cached(), SIGUSR2) >= 0); + assert_se(kill(getpid_cached(), SIGTERM) >= 0); + assert_se(kill(getpid_cached(), SIGPIPE) >= 0); assert_se(default_signals(SIGINT, SIGUSR1, SIGUSR2, SIGTERM, SIGPIPE, -1) >= 0); } diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c index 54fe87d2d..3938012d2 100644 --- a/src/test/test-string-util.c +++ b/src/test/test-string-util.c @@ -342,6 +342,12 @@ static void test_first_word(void) { assert_se(!first_word("Hellooo", "Hello")); } +static void test_strlen_ptr(void) { + assert_se(strlen_ptr("foo") == 3); + assert_se(strlen_ptr("") == 0); + assert_se(strlen_ptr(NULL) == 0); +} + int main(int argc, char *argv[]) { test_string_erase(); #if 0 /// UNNEEDED by elogind @@ -370,6 +376,7 @@ int main(int argc, char *argv[]) { test_in_charset(); test_split_pair(); test_first_word(); + test_strlen_ptr(); return 0; }