From dec35a21ca3440cdaa4057557b2793b4b3aebf39 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 30 Aug 2021 01:56:46 +0200 Subject: posix_spawn_file_actions_addfchdir: Avoid test failure under QEMU. * tests/test-posix_spawn-fchdir.c: Include qemu.h. (is_qemu): New variable. (test): Under QEMU user-mode, don't expect that "pwd" produces the result "/". (main): Initialize is_qemu. Under QEMU user-mode, skip the relative file name test. * modules/posix_spawn_file_actions_addfchdir-tests (Files): Add qemu.h. (Depends-on): Add stdbool. --- ChangeLog | 12 ++++++++ modules/posix_spawn_file_actions_addfchdir-tests | 2 ++ tests/test-posix_spawn-fchdir.c | 35 ++++++++++++++++-------- 3 files changed, 38 insertions(+), 11 deletions(-) diff --git a/ChangeLog b/ChangeLog index 88a396e09e..511765e126 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2021-08-29 Bruno Haible + + posix_spawn_file_actions_addfchdir: Avoid test failure under QEMU. + * tests/test-posix_spawn-fchdir.c: Include qemu.h. + (is_qemu): New variable. + (test): Under QEMU user-mode, don't expect that "pwd" produces the + result "/". + (main): Initialize is_qemu. Under QEMU user-mode, skip the relative file + name test. + * modules/posix_spawn_file_actions_addfchdir-tests (Files): Add qemu.h. + (Depends-on): Add stdbool. + 2021-08-29 Bruno Haible getcwd tests: Avoid test failure when running under QEMU user-mode. diff --git a/modules/posix_spawn_file_actions_addfchdir-tests b/modules/posix_spawn_file_actions_addfchdir-tests index 789a85d2e8..903a30f859 100644 --- a/modules/posix_spawn_file_actions_addfchdir-tests +++ b/modules/posix_spawn_file_actions_addfchdir-tests @@ -2,12 +2,14 @@ Files: tests/test-posix_spawn_file_actions_addfchdir.c tests/test-posix_spawn-fchdir.c tests/signature.h +tests/qemu.h tests/macros.h Depends-on: posix_spawn_file_actions_init posix_spawn_file_actions_destroy posix_spawnp-tests +stdbool findprog configure.ac: diff --git a/tests/test-posix_spawn-fchdir.c b/tests/test-posix_spawn-fchdir.c index 0f71374460..297a2de47d 100644 --- a/tests/test-posix_spawn-fchdir.c +++ b/tests/test-posix_spawn-fchdir.c @@ -32,6 +32,9 @@ #include #include "findprog.h" +#include "qemu.h" + +static bool is_qemu; static int fd_safer (int fd) @@ -135,10 +138,17 @@ test (const char *pwd_prog) fprintf (stderr, "could not read expected output\n"); exit (1); } - if (memcmp (line, "/\n", 2) != 0) + /* For a process running under QEMU user-mode, rootfd points to the directory + that is the value of the QEMU_LD_PREFIX environment variable or of the -L + command-line option, and the line produced by 'pwd' is that directory, not + "/". */ + if (!is_qemu) { - fprintf (stderr, "read output is not the expected output\n"); - exit (1); + if (memcmp (line, "/\n", 2) != 0) + { + fprintf (stderr, "read output is not the expected output\n"); + exit (1); + } } fclose (fp); status = 0; @@ -160,19 +170,22 @@ test (const char *pwd_prog) int main () { + is_qemu = is_running_under_qemu_user (); + test ("pwd"); /* Verify that if a program is given as a relative file name with at least one slash, it is interpreted w.r.t. the current directory after fchdir has been executed. */ - { - const char *abs_pwd_prog = find_in_path ("pwd"); - - if (abs_pwd_prog != NULL - && abs_pwd_prog[0] == '/' - && abs_pwd_prog[1] != '0' && abs_pwd_prog[1] != '/') - test (&abs_pwd_prog[1]); - } + if (!is_qemu) + { + const char *abs_pwd_prog = find_in_path ("pwd"); + + if (abs_pwd_prog != NULL + && abs_pwd_prog[0] == '/' + && abs_pwd_prog[1] != '0' && abs_pwd_prog[1] != '/') + test (&abs_pwd_prog[1]); + } return 0; } -- cgit v1.2.1