proc: test /proc/self symlink
Subsystems (2)
PATCH 1/2 proc: test /proc/self symlink
There are plans to change how /proc/self result is calculated, for that a test is necessary.
Use direct system call because of this whole getpid caching story.
Signed-off-by Alexey Dobriyan <[email protected]>
---
tools/testing/selftests/proc/.gitignore | 1 tools/testing/selftests/proc/Makefile | 2 + tools/testing/selftests/proc/proc.h | 7 +++++ tools/testing/selftests/proc/self.c | 39 ++++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+)
tools/testing/selftests/proc/.gitignore +1 -0
@@ -9,3 +9,4 @@ /proc-uptime-001 /proc-uptime-002 /read +/self
tools/testing/selftests/proc/Makefile +2 -0
@@ -1,4 +1,5 @@ CFLAGS += -Wall -O2 -Wno-unused-function +CFLAGS += -D_GNU_SOURCE TEST_GEN_PROGS := TEST_GEN_PROGS += fd-001-lookup
@@ -12,5 +13,6 @@ TEST_GEN_PROGS += proc-self-wchan TEST_GEN_PROGS += proc-uptime-001 TEST_GEN_PROGS += proc-uptime-002 TEST_GEN_PROGS += read +TEST_GEN_PROGS += self include ../lib.mk
tools/testing/selftests/proc/proc.h +7 -0
@@ -6,6 +6,13 @@#include <stdbool.h> #include <stdlib.h> #include <string.h> +#include <unistd.h> +#include <sys/syscall.h> + +static inline pid_t sys_getpid (void ) +{ +return syscall (SYS_getpid); +}static inline bool streq (const char *s1,const char *s2) {
new file mode 100644
tools/testing/selftests/proc/self.c new file +39 -0
@@ -0,0 +1,39 @@ +/* +* Copyright © 2018 Alexey Dobriyan <[email protected]> +* +* Permission to use, copy, modify, and distribute this software for any +* purpose with or without fee is hereby granted, provided that the above +* copyright notice and this permission notice appear in all copies. +* +* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ +// Test that /proc/self gives correct TGID. +#undef NDEBUG +#include <assert.h> +#include <stdio.h> +#include <unistd.h> + +#include "proc.h" + +int main (void ) +{ +char buf1[64 ], buf2[64 ]; +pid_t pid; +ssize_t rv; + + pid =sys_getpid (); +snprintf (buf1,sizeof (buf1),"%u" , pid); + + rv =readlink ("/proc/self" , buf2,sizeof (buf2)); +assert (rv ==strlen (buf1)); + buf2[rv] ='\0' ; +assert (streq (buf1, buf2)); + +return 0 ; +}