]> granicus.if.org Git - strace/commitdiff
tests: extend test coverage of xattr family syscalls
authorDmitry V. Levin <ldv@altlinux.org>
Tue, 10 May 2016 18:18:32 +0000 (18:18 +0000)
committerDmitry V. Levin <ldv@altlinux.org>
Tue, 10 May 2016 22:25:23 +0000 (22:25 +0000)
* tests/xattr.c: Check decoding of all xattr family syscalls.
* tests/xattr.test: Use run_strace_match_diff.
* tests/xattr.expected: Remove.
* tests/Makefile.am (EXTRA_DIST): Remove it.

tests/Makefile.am
tests/xattr.c
tests/xattr.expected [deleted file]
tests/xattr.test

index ff86d7947dff40e87e8e03c2a48971df276ad4e5..9362cda7f9142640cb33eb7b25283ee5b39e3f3c 100644 (file)
@@ -668,7 +668,6 @@ EXTRA_DIST = init.sh run.sh match.awk \
             uio.expected \
             umovestr.expected \
             wait.expected \
-            xattr.expected \
             xchownx.c \
             xselect.c \
             xstatfs.c \
index 7ae13c0d10722926b7c21315b2411277e1ad4700..c7a3342370794871cc480e688ec47a05a1634f7f 100644 (file)
 
 #ifdef HAVE_SYS_XATTR_H
 
+# include <assert.h>
+# include <stdio.h>
 # include <sys/xattr.h>
 
+# ifndef XATTR_SIZE_MAX
+#  define XATTR_SIZE_MAX 65536
+# endif
+
 int
 main(void)
 {
-#define NAME "strace.test"
-#define VALUE "foo\0bar"
-       if (!removexattr(".", NAME))
-               error_msg_and_skip("removexattr: error expected");
-       if (!setxattr(".", NAME, VALUE, sizeof(VALUE), XATTR_CREATE))
-               error_msg_and_skip("setxattr: error expected");
+       static const char name[] = "strace.test";
+       static const char c_value[] = "foo\0bar";
+       static const char q_value[] = "foo\\0bar";
+
+       tail_alloc(1);
+       const char *const z_value = tail_memdup(c_value, sizeof(c_value));
+       char *const efault = tail_alloc(1) + 1;
+       const char *const value = tail_memdup(c_value, sizeof(c_value) - 1);
+       char *const big = tail_alloc(XATTR_SIZE_MAX + 1);
+       tail_alloc(1);
+
+       assert(fsetxattr(-1, 0, 0, 0, XATTR_CREATE) == -1);
+       printf("fsetxattr(-1, NULL, NULL, 0, XATTR_CREATE) = -1 %s (%m)\n",
+              errno2name());
+
+       assert(fsetxattr(-1, 0, z_value, 0, XATTR_CREATE) == -1);
+       printf("fsetxattr(-1, NULL, \"\", 0, XATTR_CREATE) = -1 %s (%m)\n",
+              errno2name());
+
+       assert(fsetxattr(-1, name, big, XATTR_SIZE_MAX + 1, XATTR_CREATE) == -1);
+       printf("fsetxattr(-1, \"%s\", %p, %u, XATTR_CREATE)"
+              " = -1 %s (%m)\n",
+              name, big, XATTR_SIZE_MAX + 1, errno2name());
+
+       assert(fsetxattr(-1, name, value, sizeof(c_value), XATTR_CREATE) == -1);
+       printf("fsetxattr(-1, \"%s\", %p, %u, XATTR_CREATE)"
+              " = -1 %s (%m)\n",
+              name, value, (unsigned) sizeof(c_value), errno2name());
+
+       assert(fsetxattr(-1, name, z_value, sizeof(c_value), XATTR_REPLACE) == -1);
+       printf("fsetxattr(-1, \"%s\", \"%s\", %u, XATTR_REPLACE)"
+              " = -1 %s (%m)\n",
+              name, q_value, (unsigned) sizeof(c_value), errno2name());
+
+       assert(fsetxattr(-1, name, value, sizeof(c_value) - 1, XATTR_CREATE|XATTR_REPLACE) == -1);
+       printf("fsetxattr(-1, \"%s\", \"%s\", %u, XATTR_CREATE|XATTR_REPLACE)"
+              " = -1 %s (%m)\n",
+              name, q_value, (unsigned) sizeof(c_value) - 1, errno2name());
+
+       assert(setxattr(".", name, z_value, sizeof(c_value), XATTR_CREATE) == -1);
+       printf("setxattr(\".\", \"%s\", \"%s\", %u, XATTR_CREATE)"
+              " = -1 %s (%m)\n",
+              name, q_value, (unsigned) sizeof(c_value), errno2name());
+
+       assert(lsetxattr(".", name, value, sizeof(c_value) - 1, XATTR_CREATE) == -1);
+       printf("lsetxattr(\".\", \"%s\", \"%s\", %u, XATTR_CREATE)"
+              " = -1 %s (%m)\n",
+              name, q_value, (unsigned) sizeof(c_value) - 1, errno2name());
+
+       assert(fgetxattr(-1, name, efault, 4) == -1);
+       printf("fgetxattr(-1, \"%s\", %p, 4) = -1 %s (%m)\n",
+              name, efault, errno2name());
+
+       assert(getxattr(".", name, big, XATTR_SIZE_MAX + 1) == -1);
+       printf("getxattr(\".\", \"%s\", %p, %u) = -1 %s (%m)\n",
+              name, big, XATTR_SIZE_MAX + 1, errno2name());
+
+       assert(lgetxattr(".", name, big + 1, XATTR_SIZE_MAX) == -1);
+       printf("lgetxattr(\".\", \"%s\", %p, %u) = -1 %s (%m)\n",
+              name, big + 1, XATTR_SIZE_MAX, errno2name());
+
+       assert(flistxattr(-1, efault, 4) == -1);
+       printf("flistxattr(-1, %p, 4) = -1 %s (%m)\n",
+              efault, errno2name());
+
+       assert(llistxattr("", efault + 1, 4) == -1);
+       printf("llistxattr(\"\", %p, 4) = -1 %s (%m)\n",
+              efault + 1, errno2name());
+
+       ssize_t rc = listxattr(".", big, 0);
+       if (rc < 0)
+               printf("listxattr(\".\", %p, 0) = -1 %s (%m)\n",
+                      big, errno2name());
+       else
+               printf("listxattr(\".\", %p, 0) = %ld\n",
+                      big, (long) rc);
+
+       rc = listxattr(".", big, XATTR_SIZE_MAX + 1);
+       if (rc < 0)
+               printf("listxattr(\".\", %p, %u) = -1 %s (%m)\n",
+                      big, XATTR_SIZE_MAX + 1, errno2name());
+       else {
+               printf("listxattr(\".\", \"");
+               print_quoted_memory(big, rc);
+               printf("\", %u) = %ld\n", XATTR_SIZE_MAX + 1, (long) rc);
+       }
+
+       assert(fremovexattr(-1, name) == -1);
+       printf("fremovexattr(-1, \"%s\") = -1 %s (%m)\n",
+              name, errno2name());
+
+       assert(removexattr(".", name) == -1);
+       printf("removexattr(\".\", \"%s\") = -1 %s (%m)\n",
+              name, errno2name());
+
+       assert(lremovexattr(".", name) == -1);
+       printf("lremovexattr(\".\", \"%s\") = -1 %s (%m)\n",
+              name, errno2name());
+
+       puts("+++ exited with 0 +++");
        return 0;
 }
 
diff --git a/tests/xattr.expected b/tests/xattr.expected
deleted file mode 100644 (file)
index 0179a17..0000000
+++ /dev/null
@@ -1,2 +0,0 @@
-removexattr\("\.", "strace\.test"\) += -1 .*
-setxattr\("\.", "strace\.test", "foo\\0bar", 8, XATTR_CREATE\) += -1 .*
index 613352b69f29fff7e65c1f446c1dede52eae99e0..8c7a87b9467a2c9aad361943915daff6e82b58db 100755 (executable)
@@ -4,8 +4,9 @@
 
 . "${srcdir=.}/init.sh"
 
-run_prog
-run_strace -e removexattr,setxattr $args
-match_grep
+syscalls=
+for n in getxattr setxattr listxattr removexattr; do
+       syscalls="$syscalls,${n},f${n},l${n}"
+done
 
-exit 0
+run_strace_match_diff -a22 -e trace=$syscalls