]> granicus.if.org Git - strace/commitdiff
tests: add umount.test and umount2.test
authorDmitry V. Levin <ldv@altlinux.org>
Mon, 7 Dec 2015 00:06:35 +0000 (00:06 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Mon, 7 Dec 2015 01:23:39 +0000 (01:23 +0000)
* tests/umount.c: New file.
* tests/umount2.c: Likewise.
* tests/umount.test: New test.
* tests/umount2.test: Likewise.
* tests/Makefile.am (check_PROGRAMS): Add umount and umount2.
(TESTS): Add umount.test and umount2.test.
* tests/.gitignore: Add umount and umount2.

tests/.gitignore
tests/Makefile.am
tests/umount.c [new file with mode: 0644]
tests/umount.test [new file with mode: 0755]
tests/umount2.c [new file with mode: 0644]
tests/umount2.test [new file with mode: 0755]

index ca3eb2bcbec570dccce1075f7d00524d43f6e64a..3cdfc6537dae33e7587a9ec9f4fe3f755eec5d56 100644 (file)
@@ -83,6 +83,8 @@ uid
 uid16
 uid32
 uio
+umount
+umount2
 umovestr
 umovestr2
 unix-pair-send-recv
index 56e64ab553c1a23fa0911903c4bb3ddd64de547c..71c8130e681bb06d557614ffcc79546918d1a186 100644 (file)
@@ -96,6 +96,8 @@ check_PROGRAMS = \
        uid16 \
        uid32 \
        uio \
+       umount \
+       umount2 \
        umovestr \
        umovestr2 \
        unix-pair-send-recv \
@@ -210,6 +212,8 @@ TESTS = \
        times-fail.test \
        truncate.test \
        truncate64.test \
+       umount.test \
+       umount2.test \
        umovestr.test \
        umovestr2.test \
        unix-yy.test \
diff --git a/tests/umount.c b/tests/umount.c
new file mode 100644 (file)
index 0000000..380417d
--- /dev/null
@@ -0,0 +1,44 @@
+#include <errno.h>
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_oldumount
+# define TEST_SYSCALL_STR "oldumount"
+#else
+# if defined __NR_umount && defined __NR_umount2
+#  define __NR_oldumount __NR_umount
+#  define TEST_SYSCALL_STR "umount"
+# endif
+#endif
+
+int
+main(void)
+{
+#ifdef __NR_oldumount
+       static const char sample[] = "umount.sample";
+       if (mkdir(sample, 0700)) {
+               perror(sample);
+               return 77;
+       }
+       (void) syscall(__NR_oldumount, sample);
+       printf("%s(\"%s\") = -1 ", TEST_SYSCALL_STR, sample);
+       switch (errno) {
+               case ENOSYS:
+                       printf("ENOSYS (%m)\n");
+                       break;
+               case EPERM:
+                       printf("EPERM (%m)\n");
+                       break;
+               default:
+                       printf("EINVAL (%m)\n");
+       }
+       (void) rmdir(sample);
+       puts("+++ exited with 0 +++");
+       return 0;
+#else
+       return 77;
+#endif
+}
diff --git a/tests/umount.test b/tests/umount.test
new file mode 100755 (executable)
index 0000000..bcabd09
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Check umount syscall decoding.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+case "$STRACE_ARCH" in
+       alpha) syscall=oldumount ;;
+       *) syscall=umount ;;
+esac
+OUT="$LOG.out"
+run_strace -a24 -s6 -e$syscall $args > "$OUT"
+match_diff "$LOG" "$OUT"
+rm -f "$OUT"
+
+exit 0
diff --git a/tests/umount2.c b/tests/umount2.c
new file mode 100644 (file)
index 0000000..141e383
--- /dev/null
@@ -0,0 +1,28 @@
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/mount.h>
+#include <sys/syscall.h>
+
+#ifdef __NR_umount2
+# define TEST_SYSCALL_STR "umount2"
+#else
+# define __NR_umount2 __NR_umount
+# define TEST_SYSCALL_STR "umount"
+#endif
+
+int
+main(void)
+{
+       static const char sample[] = "umount2.sample";
+       if (mkdir(sample, 0700)) {
+               perror(sample);
+               return 77;
+       }
+       (void) syscall(__NR_umount2, sample, 31);
+       printf("%s(\"%s\", MNT_FORCE|MNT_DETACH|MNT_EXPIRE|UMOUNT_NOFOLLOW|0x10)"
+              " = -1 EINVAL (%m)\n", TEST_SYSCALL_STR, sample);
+       (void) rmdir(sample);
+       puts("+++ exited with 0 +++");
+       return 0;
+}
diff --git a/tests/umount2.test b/tests/umount2.test
new file mode 100755 (executable)
index 0000000..ad4b25f
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+# Check umount2 syscall decoding.
+
+. "${srcdir=.}/init.sh"
+
+run_prog > /dev/null
+case "$STRACE_ARCH" in
+       alpha|ia64) syscall=umount ;;
+       *) syscall=umount2 ;;
+esac
+OUT="$LOG.out"
+run_strace -s7 -e$syscall $args > "$OUT"
+match_diff "$LOG" "$OUT"
+rm -f "$OUT"
+
+exit 0