chiark / gitweb /
Prep v235: Apply upstream fixes (9/10) [src/test]
authorSven Eden <yamakuzure@gmx.net>
Mon, 14 Aug 2017 07:16:16 +0000 (09:16 +0200)
committerSven Eden <yamakuzure@gmx.net>
Mon, 14 Aug 2017 07:20:58 +0000 (09:20 +0200)
src/test/meson.build
src/test/test-cgroup.c
src/test/test-helper.h
src/test/test-log.c
src/test/test-process-util.c
src/test/test-signal-util.c
src/test/test-string-util.c

index 425c53f8333b9622e5680cacbcc9fd874f4a35a9..ccf0f70779a40687343d28f888d58e2798951681 100644 (file)
@@ -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]],
 ]
index 5336c196521d1560ddf9fd6a3c942f6160d74871..71e318a15bc19926a457aa183f0ce235b5a884fc 100644 (file)
@@ -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);
 
index ddb10f88fd1956010a6cc411b89f9073d6d3bf77..8af32c8744f0bc73680195d5c6c3c05e8f8fe99e 100644 (file)
@@ -39,3 +39,5 @@
                -ENOENT,                                         \
                -ENOMEDIUM /* cannot determine cgroup */         \
                )
+
+void enter_cgroup_subroot(void);
index 626d2c6135b1d23efedaab57816f38211ec73da8..8ab569f477fced5505f9e7e06ed0798d25a7d90e 100644 (file)
@@ -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",
index 07c0704efbd908dd6646e6772a8447428ff5528c..c9050f0d66bb371a7f33fa1590665526f54b5fb4 100644 (file)
@@ -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;
 }
index 671eb869cb9f9e3da9ab00530fbbde56b19b2b0b..92e39277849c46ca1ac0a3e422e60a26d9114117 100644 (file)
@@ -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);
 }
 
index 54fe87d2de758e4baf18de929212d9da8d443b19..3938012d22789d26a0905f8bf89b1ef7dd4e080d 100644 (file)
@@ -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;
 }