From: Dmitry V. Levin Date: Mon, 28 Mar 2016 00:15:15 +0000 (+0000) Subject: tests: add open.test X-Git-Tag: v4.12~489 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f09a474877035a380bdc1768aa9c55d909a098ab;p=strace tests: add open.test * tests/open.c: New file. * tests/open.test: New test. * tests/.gitignore: Add open. * tests/Makefile.am (check_PROGRAMS): Likewise. (DECODER_TESTS): Add open.test. --- diff --git a/tests/.gitignore b/tests/.gitignore index 9b43efd8..d5bbe588 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -82,6 +82,7 @@ netlink_inet_diag netlink_unix_diag newfstatat oldselect +open openat pc personality diff --git a/tests/Makefile.am b/tests/Makefile.am index 68cf7e7d..88324937 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -131,6 +131,7 @@ check_PROGRAMS = \ netlink_unix_diag \ newfstatat \ oldselect \ + open \ openat \ pc \ personality \ @@ -302,6 +303,7 @@ DECODER_TESTS = \ net.test \ newfstatat.test \ oldselect.test \ + open.test \ openat.test \ personality.test \ pipe.test \ diff --git a/tests/open.c b/tests/open.c new file mode 100644 index 00000000..c990cd08 --- /dev/null +++ b/tests/open.c @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2016 Dmitry V. Levin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "tests.h" +#include + +#ifdef __NR_open + +# include +# include +# include +# include + +int +main(void) +{ + static const char sample[] = "open.sample"; + int fd = syscall(__NR_open, sample, O_RDONLY|O_CREAT, 0400); + + if (fd < 0) { + if (errno != ENOSYS) + perror_msg_and_fail("open"); + printf("open(\"%s\", O_RDONLY|O_CREAT, 0400)" + " = %d ENOSYS (%m)\n", sample, fd); + } else { + printf("open(\"%s\", O_RDONLY|O_CREAT, 0400) = %d\n", + sample, fd); + close(fd); + if (unlink(sample)) + perror_msg_and_fail("unlink"); + + fd = syscall(__NR_open, sample, O_RDONLY); + if (fd >= 0 || errno != ENOENT) + perror_msg_and_fail("open"); + printf("open(\"%s\", O_RDONLY) = %d ENOENT (%m)\n", + sample, fd); + + fd = syscall(__NR_open, sample, O_WRONLY|O_NONBLOCK|0x80000000); + if (fd >= 0 || errno != ENOENT) + perror_msg_and_fail("open"); + printf("open(\"%s\", O_WRONLY|O_NONBLOCK|0x80000000)" + " = %d ENOENT (%m)\n", sample, fd); + } + + puts("+++ exited with 0 +++"); + return 0; +} + +#else + +SKIP_MAIN_UNDEFINED("__NR_open") + +#endif diff --git a/tests/open.test b/tests/open.test new file mode 100755 index 00000000..4f360461 --- /dev/null +++ b/tests/open.test @@ -0,0 +1,17 @@ +#!/bin/sh + +# Check open syscall decoding. + +. "${srcdir=.}/init.sh" + +# strace -P is implemented using /proc/self/fd +[ -d /proc/self/fd/ ] || + framework_skip_ '/proc/self/fd/ is not available' + +run_prog > /dev/null +OUT="$LOG.out" +syscall=${ME_%.test} +sample=$syscall.sample +run_strace -a30 -e$syscall -P$sample $args > "$OUT" +match_diff "$LOG" "$OUT" +rm -f "$OUT"