bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

posix_spawn_file_actions_addfchdir: Avoid test failure under QEMU


From: Bruno Haible
Subject: posix_spawn_file_actions_addfchdir: Avoid test failure under QEMU
Date: Mon, 30 Aug 2021 02:00:50 +0200

In a QEMU user-mode environment (for various CPUs), the test-posix_spawn-fchdir
test fails.

The reason is that when the program opens "/", it actually is the
/usr/<cpu>-linux-gnu directory, and the "pwd" program thus prints the string
"/usr/<cpu>-linux-gnu", not "/" as expected.

This patch skips the parts of the test that are not supported under QEMU
user-mode.


2021-08-29  Bruno Haible  <bruno@clisp.org>

        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.

diff --git a/modules/posix_spawn_file_actions_addfchdir-tests 
b/modules/posix_spawn_file_actions_addfchdir-tests
index 789a85d2e..903a30f85 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 0f7137446..297a2de47 100644
--- a/tests/test-posix_spawn-fchdir.c
+++ b/tests/test-posix_spawn-fchdir.c
@@ -32,6 +32,9 @@
 #include <sys/wait.h>
 
 #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;
 }






reply via email to

[Prev in Thread] Current Thread [Next in Thread]