diff options
author | Dmitry V. Levin <ldv@altlinux.org> | 2014-04-16 23:28:29 +0000 |
---|---|---|
committer | Dmitry V. Levin <ldv@altlinux.org> | 2014-04-16 23:49:33 +0000 |
commit | cc3d59199d80588a53ee353da5d69726bd093c51 (patch) | |
tree | d02aaf50ce5a0731c38d07d5c3bdee5c6d666daa | |
parent | 99a0544f010cfaade3f42d08656285555bec60db (diff) | |
download | strace-cc3d59199d80588a53ee353da5d69726bd093c51.tar.gz |
tests: add a test for pread/pwrite and preadv/pwritev offset decoding
* tests/uio.c: New file.
* tests/uio.test: New test.
* tests/Makefile.am (check_PROGRAMS): Add uio.
(uio_CFLAGS): Define.
(TESTS): Add uio.test.
-rw-r--r-- | tests/Makefile.am | 5 | ||||
-rw-r--r-- | tests/uio.c | 25 | ||||
-rwxr-xr-x | tests/uio.test | 34 |
3 files changed, 63 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index 82226df32..c63c41f6b 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -2,7 +2,9 @@ AM_CFLAGS = $(WARN_CFLAGS) -check_PROGRAMS = net-accept-connect set_ptracer_any sigaction +check_PROGRAMS = net-accept-connect set_ptracer_any sigaction uio + +uio_CFLAGS = $(AM_CFLAGS) -D_FILE_OFFSET_BITS=64 TESTS = \ ptrace_setoptions.test \ @@ -12,6 +14,7 @@ TESTS = \ stat.test \ net.test \ net-fd.test \ + uio.test \ detach-sleeping.test \ detach-stopped.test \ detach-running.test diff --git a/tests/uio.c b/tests/uio.c new file mode 100644 index 000000000..ca731e030 --- /dev/null +++ b/tests/uio.c @@ -0,0 +1,25 @@ +#include <fcntl.h> +#include <unistd.h> +#include <sys/uio.h> +#include <assert.h> + +int +main(void) +{ + const off_t offset = 0xdefaceddeadbeefLL; + int fd; + char buf[4]; + struct iovec iov = { buf, sizeof buf }; + + assert((fd = open("/dev/zero", O_RDONLY)) >= 0); + assert(pread(fd, buf, sizeof buf, offset) == 4); + assert(preadv(fd, &iov, 1, offset) == 4); + assert(!close(fd)); + + assert((fd = open("/dev/null", O_WRONLY)) >= 0); + assert(pwrite(fd, buf, sizeof buf, offset) == 4); + assert(pwritev(fd, &iov, 1, offset) == 4); + assert(!close(fd)); + + return 0; +} diff --git a/tests/uio.test b/tests/uio.test new file mode 100755 index 000000000..25f82cb8d --- /dev/null +++ b/tests/uio.test @@ -0,0 +1,34 @@ +#!/bin/sh + +# Check how pread/pwrite and preadv/pwritev syscalls are traced. + +. "${srcdir=.}/init.sh" + +check_prog grep +check_prog rm + +./uio || + fail_ 'uio failed' + +args="-edesc ./uio" +$STRACE $args > $LOG 2>&1 || { + cat $LOG + fail_ "$STRACE $args failed" +} + +grep_log() +{ + local syscall="$1"; shift + + LC_ALL=C grep -E -x "$syscall$*" $LOG > /dev/null || { + cat $LOG + fail_ "$STRACE $args failed to trace \"$syscall\" properly" + } +} + +grep_log 'pread(64)?' '\(3, "\\0\\0\\0\\0", 4, 1004211379570065135\) += 4' +grep_log 'preadv' '\(3, \[{"\\0\\0\\0\\0", 4}\], 1, 1004211379570065135\) += 4' +grep_log 'pwrite(64)?' '\(3, "\\0\\0\\0\\0", 4, 1004211379570065135\) += 4' +grep_log 'pwritev' '\(3, \[{"\\0\\0\\0\\0", 4}\], 1, 1004211379570065135\) += 4' + +exit 0 |