]> Savannah Git Hosting - gnulib.git/commitdiff
euidaccess: Add tests.
authorBruno Haible <bruno@clisp.org>
Tue, 3 Oct 2023 14:42:59 +0000 (16:42 +0200)
committerBruno Haible <bruno@clisp.org>
Tue, 3 Oct 2023 16:01:06 +0000 (18:01 +0200)
* tests/test-access.h: New file, extracted from tests/test-access.c.
* tests/test-access.c: Moved most code to tests/test-access.h.
Include test-access.h.
(main): Invoke test_access.
* tests/test-euidaccess.c: New file, based on tests/test-access.c.
* modules/access-tests (Files): Add tests/test-access.h.
* modules/euidaccess-tests: New file, based on modules/access-tests.

ChangeLog
modules/access-tests
modules/euidaccess-tests [new file with mode: 0644]
tests/test-access.c
tests/test-access.h [new file with mode: 0644]
tests/test-euidaccess.c [new file with mode: 0644]

index 9b4317264ed632bb587826737cfbd6eecd91df3a..7a70e6ab9add594de083ba850d14be77963e445b 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,14 @@
+2023-10-03  Bruno Haible  <bruno@clisp.org>
+
+       euidaccess: Add tests.
+       * tests/test-access.h: New file, extracted from tests/test-access.c.
+       * tests/test-access.c: Moved most code to tests/test-access.h.
+       Include test-access.h.
+       (main): Invoke test_access.
+       * tests/test-euidaccess.c: New file, based on tests/test-access.c.
+       * modules/access-tests (Files): Add tests/test-access.h.
+       * modules/euidaccess-tests: New file, based on modules/access-tests.
+
 2023-10-03  Bruno Haible  <bruno@clisp.org>
 
        access: Make last change work also when module 'stat' is in use.
index 78344887cda4ffe17e19708db7c5c166fbdf914f..0c9179f70c79a0e89076ce1e959353c252c19871 100644 (file)
@@ -1,5 +1,6 @@
 Files:
 tests/test-access.c
+tests/test-access.h
 tests/signature.h
 tests/macros.h
 
diff --git a/modules/euidaccess-tests b/modules/euidaccess-tests
new file mode 100644 (file)
index 0000000..7465470
--- /dev/null
@@ -0,0 +1,17 @@
+Files:
+tests/test-euidaccess.c
+tests/test-access.h
+tests/signature.h
+tests/macros.h
+
+Depends-on:
+creat
+root-uid
+symlink
+
+configure.ac:
+AC_CHECK_FUNCS_ONCE([geteuid])
+
+Makefile.am:
+TESTS += test-euidaccess
+check_PROGRAMS += test-euidaccess
index 771678f0f750fa076cdc64258edb6fe5259598cb..3d0b6d1ba5324348878bcf59c792ad283580a3a0 100644 (file)
@@ -27,93 +27,14 @@ SIGNATURE_CHECK (access, int, (const char *, int));
 #include "root-uid.h"
 #include "macros.h"
 
-/* mingw and MSVC 9 lack geteuid, so setup a dummy value.  */
-#if !HAVE_GETEUID
-# define geteuid() ROOT_UID
-#endif
-
 #define BASE "test-access.t"
 
+#include "test-access.h"
+
 int
 main ()
 {
-  /* Remove anything from prior partial run.  */
-  unlink (BASE "f");
-  unlink (BASE "f1");
-  chmod (BASE "f2", 0600);
-  unlink (BASE "f2");
-  unlink (BASE "sl");
-
-  {
-    errno = 0;
-    ASSERT (access (BASE "f", R_OK) == -1);
-    ASSERT (errno == ENOENT);
-
-    errno = 0;
-    ASSERT (access (BASE "f", W_OK) == -1);
-    ASSERT (errno == ENOENT);
-
-    errno = 0;
-    ASSERT (access (BASE "f", X_OK) == -1);
-    ASSERT (errno == ENOENT);
-  }
-  {
-    ASSERT (close (creat (BASE "f1", 0700)) == 0);
-
-    ASSERT (access (BASE "f1", F_OK) == 0);
-    ASSERT (access (BASE "f1", R_OK) == 0);
-    ASSERT (access (BASE "f1", W_OK) == 0);
-    ASSERT (access (BASE "f1", X_OK) == 0);
-
-    ASSERT (access (BASE "f1/", F_OK) == -1);
-    ASSERT (errno == ENOTDIR);
-    ASSERT (access (BASE "f1/", R_OK) == -1);
-    ASSERT (errno == ENOTDIR);
-    ASSERT (access (BASE "f1/", W_OK) == -1);
-    ASSERT (errno == ENOTDIR);
-    ASSERT (access (BASE "f1/", X_OK) == -1);
-    ASSERT (errno == ENOTDIR);
-
-    if (symlink (BASE "f1", BASE "sl") == 0)
-      {
-        ASSERT (access (BASE "sl/", F_OK) == -1);
-        ASSERT (errno == ENOTDIR);
-        ASSERT (access (BASE "sl/", R_OK) == -1);
-        ASSERT (errno == ENOTDIR);
-        ASSERT (access (BASE "sl/", W_OK) == -1);
-        ASSERT (errno == ENOTDIR);
-        ASSERT (access (BASE "sl/", X_OK) == -1);
-        ASSERT (errno == ENOTDIR);
-      }
-  }
-  {
-    ASSERT (close (creat (BASE "f2", 0600)) == 0);
-    ASSERT (chmod (BASE "f2", 0400) == 0);
-
-    ASSERT (access (BASE "f2", R_OK) == 0);
-
-    if (geteuid () != ROOT_UID)
-      {
-        errno = 0;
-        ASSERT (access (BASE "f2", W_OK) == -1);
-        ASSERT (errno == EACCES);
-      }
-
-#if defined _WIN32 && !defined __CYGWIN__
-    /* X_OK works like R_OK.  */
-    ASSERT (access (BASE "f2", X_OK) == 0);
-#else
-    errno = 0;
-    ASSERT (access (BASE "f2", X_OK) == -1);
-    ASSERT (errno == EACCES);
-#endif
-  }
-
-  /* Cleanup.  */
-  ASSERT (unlink (BASE "f1") == 0);
-  ASSERT (chmod (BASE "f2", 0600) == 0);
-  ASSERT (unlink (BASE "f2") == 0);
-  unlink (BASE "sl");
+  test_access (access);
 
   return 0;
 }
diff --git a/tests/test-access.h b/tests/test-access.h
new file mode 100644 (file)
index 0000000..f6958de
--- /dev/null
@@ -0,0 +1,102 @@
+/* Tests of access and euidaccess.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* mingw and MSVC 9 lack geteuid, so setup a dummy value.  */
+#if !HAVE_GETEUID
+# define geteuid() ROOT_UID
+#endif
+
+static void
+test_access (int (*func) (const char * /*file*/, int /*mode*/))
+{
+  /* Remove anything from prior partial run.  */
+  unlink (BASE "f");
+  unlink (BASE "f1");
+  chmod (BASE "f2", 0600);
+  unlink (BASE "f2");
+  unlink (BASE "sl");
+
+  {
+    errno = 0;
+    ASSERT (func (BASE "f", R_OK) == -1);
+    ASSERT (errno == ENOENT);
+
+    errno = 0;
+    ASSERT (func (BASE "f", W_OK) == -1);
+    ASSERT (errno == ENOENT);
+
+    errno = 0;
+    ASSERT (func (BASE "f", X_OK) == -1);
+    ASSERT (errno == ENOENT);
+  }
+  {
+    ASSERT (close (creat (BASE "f1", 0700)) == 0);
+
+    ASSERT (func (BASE "f1", F_OK) == 0);
+    ASSERT (func (BASE "f1", R_OK) == 0);
+    ASSERT (func (BASE "f1", W_OK) == 0);
+    ASSERT (func (BASE "f1", X_OK) == 0);
+
+    ASSERT (func (BASE "f1/", F_OK) == -1);
+    ASSERT (errno == ENOTDIR);
+    ASSERT (func (BASE "f1/", R_OK) == -1);
+    ASSERT (errno == ENOTDIR);
+    ASSERT (func (BASE "f1/", W_OK) == -1);
+    ASSERT (errno == ENOTDIR);
+    ASSERT (func (BASE "f1/", X_OK) == -1);
+    ASSERT (errno == ENOTDIR);
+
+    if (symlink (BASE "f1", BASE "sl") == 0)
+      {
+        ASSERT (func (BASE "sl/", F_OK) == -1);
+        ASSERT (errno == ENOTDIR);
+        ASSERT (func (BASE "sl/", R_OK) == -1);
+        ASSERT (errno == ENOTDIR);
+        ASSERT (func (BASE "sl/", W_OK) == -1);
+        ASSERT (errno == ENOTDIR);
+        ASSERT (func (BASE "sl/", X_OK) == -1);
+        ASSERT (errno == ENOTDIR);
+      }
+  }
+  {
+    ASSERT (close (creat (BASE "f2", 0600)) == 0);
+    ASSERT (chmod (BASE "f2", 0400) == 0);
+
+    ASSERT (func (BASE "f2", R_OK) == 0);
+
+    if (geteuid () != ROOT_UID)
+      {
+        errno = 0;
+        ASSERT (func (BASE "f2", W_OK) == -1);
+        ASSERT (errno == EACCES);
+      }
+
+#if defined _WIN32 && !defined __CYGWIN__
+    /* X_OK works like R_OK.  */
+    ASSERT (func (BASE "f2", X_OK) == 0);
+#else
+    errno = 0;
+    ASSERT (func (BASE "f2", X_OK) == -1);
+    ASSERT (errno == EACCES);
+#endif
+  }
+
+  /* Cleanup.  */
+  ASSERT (unlink (BASE "f1") == 0);
+  ASSERT (chmod (BASE "f2", 0600) == 0);
+  ASSERT (unlink (BASE "f2") == 0);
+  unlink (BASE "sl");
+}
diff --git a/tests/test-euidaccess.c b/tests/test-euidaccess.c
new file mode 100644 (file)
index 0000000..510ba6e
--- /dev/null
@@ -0,0 +1,40 @@
+/* Tests of euidaccess.
+   Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation, either version 3 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#include <unistd.h>
+
+#include "signature.h"
+SIGNATURE_CHECK (euidaccess, int, (const char *, int));
+
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/stat.h>
+#include "root-uid.h"
+#include "macros.h"
+
+#define BASE "test-euidaccess.t"
+
+#include "test-access.h"
+
+int
+main ()
+{
+  test_access (euidaccess);
+
+  return 0;
+}