diff options
author | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-09-20 04:50:56 +0200 |
---|---|---|
committer | Eugene Syromyatnikov <evgsyr@gmail.com> | 2021-10-12 00:35:30 +0200 |
commit | 647aef386bb586122de232a68eb653fc9d5198b5 (patch) | |
tree | f692167792b0f22f55ff816351aea17a98ff5b6e | |
parent | 4298e4fdad32d7d94c7f0c559f9bc110296dc2f5 (diff) | |
download | strace-647aef386bb586122de232a68eb653fc9d5198b5.tar.gz |
tests: add io_uring_register-success* tests
* tests/.gitignore: Add io_uring_register-success,
io_uring_register-success-Xabbrev, io_uring_register-success-Xraw,
and io_uring_register-success-Xverbose.
* tests/Makefile.am (check_PROGRAMS): Likewise.
* tests/gen_tests.in (io_uring_register-success,
io_uring_register-success-Xabbrev, io_uring_register-success-Xraw,
io_uring_register-success-Xverbose): New tests.
* tests/io_uring_register-success-Xabbrev.c: New file.
* tests/io_uring_register-success-Xraw.c: Likewise.
* tests/io_uring_register-success-Xverbose.c: Likewise.
* tests/io_uring_register-success.c: Likewise.
* tests/io_uring_register.c: Update expected output.
-rw-r--r-- | tests/.gitignore | 4 | ||||
-rw-r--r-- | tests/Makefile.am | 4 | ||||
-rw-r--r-- | tests/gen_tests.in | 4 | ||||
-rw-r--r-- | tests/io_uring_register-success-Xabbrev.c | 2 | ||||
-rw-r--r-- | tests/io_uring_register-success-Xraw.c | 2 | ||||
-rw-r--r-- | tests/io_uring_register-success-Xverbose.c | 2 | ||||
-rw-r--r-- | tests/io_uring_register-success.c | 2 | ||||
-rw-r--r-- | tests/io_uring_register.c | 123 |
8 files changed, 112 insertions, 31 deletions
diff --git a/tests/.gitignore b/tests/.gitignore index e9388c941..d76512dc8 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -219,6 +219,10 @@ io_uring_register io_uring_register-Xabbrev io_uring_register-Xraw io_uring_register-Xverbose +io_uring_register-success +io_uring_register-success-Xabbrev +io_uring_register-success-Xraw +io_uring_register-success-Xverbose io_uring_setup ioctl ioctl_block diff --git a/tests/Makefile.am b/tests/Makefile.am index 7b4e86750..fe33e180a 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -150,6 +150,10 @@ check_PROGRAMS = $(PURE_EXECUTABLES) \ gettid--pidns-translation \ inject-nf \ int_0x80 \ + io_uring_register-success \ + io_uring_register-success-Xabbrev \ + io_uring_register-success-Xraw \ + io_uring_register-success-Xverbose \ ioctl_block--pidns-translation \ ioctl_dm-v \ ioctl_evdev-success \ diff --git a/tests/gen_tests.in b/tests/gen_tests.in index d44198519..b3578eb18 100644 --- a/tests/gen_tests.in +++ b/tests/gen_tests.in @@ -216,6 +216,10 @@ io_uring_register -y io_uring_register-Xabbrev -etrace=io_uring_register -y -Xabbrev io_uring_register-Xraw -etrace=io_uring_register -y -Xraw io_uring_register-Xverbose -etrace=io_uring_register -y -Xverbose +io_uring_register-success -einject=io_uring_register:retval=42 -etrace=io_uring_register -y +io_uring_register-success-Xabbrev -einject=io_uring_register:retval=42 -etrace=io_uring_register -y -Xabbrev +io_uring_register-success-Xraw -einject=io_uring_register:retval=42 -etrace=io_uring_register -y -Xraw +io_uring_register-success-Xverbose -einject=io_uring_register:retval=42 -etrace=io_uring_register -y -Xverbose io_uring_setup -a26 -y ioctl_block +ioctl.test ioctl_dm +ioctl.test -s9 diff --git a/tests/io_uring_register-success-Xabbrev.c b/tests/io_uring_register-success-Xabbrev.c new file mode 100644 index 000000000..a27d5f47f --- /dev/null +++ b/tests/io_uring_register-success-Xabbrev.c @@ -0,0 +1,2 @@ +#define XLAT_ABBREV 1 +#include "io_uring_register-success.c" diff --git a/tests/io_uring_register-success-Xraw.c b/tests/io_uring_register-success-Xraw.c new file mode 100644 index 000000000..0582cfb0d --- /dev/null +++ b/tests/io_uring_register-success-Xraw.c @@ -0,0 +1,2 @@ +#define XLAT_RAW 1 +#include "io_uring_register-success.c" diff --git a/tests/io_uring_register-success-Xverbose.c b/tests/io_uring_register-success-Xverbose.c new file mode 100644 index 000000000..6a55e8fd3 --- /dev/null +++ b/tests/io_uring_register-success-Xverbose.c @@ -0,0 +1,2 @@ +#define XLAT_VERBOSE 1 +#include "io_uring_register-success.c" diff --git a/tests/io_uring_register-success.c b/tests/io_uring_register-success.c new file mode 100644 index 000000000..b66da6485 --- /dev/null +++ b/tests/io_uring_register-success.c @@ -0,0 +1,2 @@ +#define RETVAL_INJECTED 1 +#include "io_uring_register.c" diff --git a/tests/io_uring_register.c b/tests/io_uring_register.c index 0b3fa2af0..392804f31 100644 --- a/tests/io_uring_register.c +++ b/tests/io_uring_register.c @@ -32,10 +32,20 @@ # define BIG_ADDR_MASK 0 #endif +#ifndef RETVAL_INJECTED +# define RETVAL_INJECTED 0 +#endif + +#if RETVAL_INJECTED +# define INJ_STR " (INJECTED)" +#else +# define INJ_STR "" +#endif + static const char path_null[] = "/dev/null"; static const char path_full[] = "/dev/full"; -static const char *errstr; +char errstr[1024]; static long sys_io_uring_register(unsigned int fd, unsigned int opcode, @@ -51,7 +61,7 @@ sys_io_uring_register(unsigned int fd, unsigned int opcode, long rc = syscall(__NR_io_uring_register, arg1, arg2, arg3, arg4, bad, bad); - errstr = sprintrc(rc); + snprintf(errstr, sizeof(errstr), "%s%s", sprintrc(rc), INJ_STR); return rc; } @@ -283,19 +293,39 @@ main(void) sys_io_uring_register(fd_null, IORING_REGISTER_PROBE, probe, 0); printf("io_uring_register(%u<%s>, " XLAT_FMT ", {last_op=%u" NRAW(" /* IORING_OP_??? */") ", ops_len=%hhu, resv=%#hx" - ", resv2=[%#x, %#x, %#x], ops=[]}, 0) = %s\n", + ", resv2=[%#x, %#x, %#x], ops=[]}" +#if RETVAL_INJECTED + " => {last_op=%u" NRAW(" /* IORING_OP_??? */") ", ops_len=%hhu" + ", resv=%#hx, resv2=[%#x, %#x, %#x], ops=[...]}" +#endif + ", 0) = %s\n", fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), probe->last_op, probe->ops_len, probe->resv, - probe->resv2[0], probe->resv2[1], probe->resv2[2], errstr); + probe->resv2[0], probe->resv2[1], probe->resv2[2], +#if RETVAL_INJECTED + probe->last_op, probe->ops_len, probe->resv, + probe->resv2[0], probe->resv2[1], probe->resv2[2], +#endif + errstr); probe->last_op = IORING_OP_READV; probe->resv = 0; sys_io_uring_register(fd_null, IORING_REGISTER_PROBE, probe, 0); printf("io_uring_register(%u<%s>, " XLAT_FMT ", {last_op=" XLAT_FMT_U - ", ops_len=%hhu, resv2=[%#x, %#x, %#x], ops=[]}, 0) = %s\n", + ", ops_len=%hhu, resv2=[%#x, %#x, %#x], ops=[]}" +#if RETVAL_INJECTED + " => {last_op=" XLAT_FMT_U ", ops_len=%hhu" + ", resv2=[%#x, %#x, %#x], ops=[...]}" +#endif + ", 0) = %s\n", fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), XLAT_ARGS(IORING_OP_READV), probe->ops_len, - probe->resv2[0], probe->resv2[1], probe->resv2[2], errstr); + probe->resv2[0], probe->resv2[1], probe->resv2[2], +#if RETVAL_INJECTED + XLAT_ARGS(IORING_OP_READV), probe->ops_len, + probe->resv2[0], probe->resv2[1], probe->resv2[2], +#endif + errstr); probe->last_op = IORING_OP_EPOLL_CTL; probe->resv2[0] = 0; @@ -328,12 +358,28 @@ main(void) "{op=" XLAT_FMT_U ", flags=" XLAT_FMT ", resv2=0xdeadc0de}, " "{op=40" NRAW(" /* IORING_OP_??? */") ", resv=0xaf, flags=" XLAT_FMT "}, {op=254" NRAW(" /* IORING_OP_??? */") - ", flags=0xc0de" NRAW(" /* IO_URING_OP_??? */") "}]}, 4) = %s\n", + ", flags=0xc0de" NRAW(" /* IO_URING_OP_??? */") "}]}" +#if RETVAL_INJECTED + " => {last_op=" XLAT_FMT_U ", ops_len=%hhu, resv2=[0, %#x, 0], " + "ops=[{op=" XLAT_FMT_U ", resv=0xde, flags=0, resv2=0xbeefface}" + ", {op=" XLAT_FMT_U ", flags=" XLAT_FMT ", resv2=0xdeadc0de}" + ", {op=40" NRAW(" /* IORING_OP_??? */") ", resv=0xaf, flags=" + XLAT_FMT "}, {op=254" NRAW(" /* IORING_OP_??? */") + ", flags=0xc0de" NRAW(" /* IO_URING_OP_??? */") "}, ...]}" +#endif + ", 4) = %s\n", fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), XLAT_ARGS(IORING_OP_EPOLL_CTL), probe->ops_len, probe->resv2[1], XLAT_ARGS(IORING_OP_NOP), XLAT_ARGS(IORING_OP_LINKAT), XLAT_ARGS(IO_URING_OP_SUPPORTED), - XLAT_ARGS(IO_URING_OP_SUPPORTED|0xbeee), errstr); + XLAT_ARGS(IO_URING_OP_SUPPORTED|0xbeee), +#if RETVAL_INJECTED + XLAT_ARGS(IORING_OP_EPOLL_CTL), probe->ops_len, probe->resv2[1], + XLAT_ARGS(IORING_OP_NOP), XLAT_ARGS(IORING_OP_LINKAT), + XLAT_ARGS(IO_URING_OP_SUPPORTED), + XLAT_ARGS(IO_URING_OP_SUPPORTED|0xbeee), +#endif + errstr); probe->last_op = 40; probe->resv2[1] = 0; @@ -341,40 +387,55 @@ main(void) 0x40, 0x80); sys_io_uring_register(fd_null, IORING_REGISTER_PROBE, probe, DEFAULT_STRLEN + 1); - printf("io_uring_register(%u<%s>, " XLAT_FMT ", {last_op=40" - NRAW(" /* IORING_OP_??? */") ", ops_len=%hhu, ops=[", - fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), - probe->ops_len); - for (size_t i = 0; i < DEFAULT_STRLEN; i++) { - printf("%s{op=%u" NRAW(" /* IORING_OP_??? */") ", resv=%#hhx" - ", flags=", - i ? ", " : "", probe->ops[i].op, probe->ops[i].resv); + printf("io_uring_register(%u<%s>, " XLAT_FMT, + fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE)); + for (size_t c = 0; c < 1 + RETVAL_INJECTED; c++) { + printf("%s{last_op=40" NRAW(" /* IORING_OP_??? */") + ", ops_len=%hhu, ops=[", + c ? " => " : ", ", probe->ops_len); + for (size_t i = 0; i < DEFAULT_STRLEN; i++) { + printf("%s{op=%u" NRAW(" /* IORING_OP_??? */") + ", resv=%#hhx, flags=", + i ? ", " : "", probe->ops[i].op, + probe->ops[i].resv); #if XLAT_RAW - printf("%#hx", - (typeof(probe->ops[i].flags)) (probe->ops[i].flags)); + printf("%#hx", + (typeof(probe->ops[i].flags)) + (probe->ops[i].flags)); #else /* !XLAT_RAW */ - if (probe->ops[i].flags & 1) { - printf(VERB("%#hx /* ") "IO_URING_OP_SUPPORTED|%#hx" - VERB(" */"), + if (probe->ops[i].flags & 1) { + printf(VERB("%#hx /* ") "IO_URING_OP_SUPPORTED" + "|%#hx" VERB(" */"), # if XLAT_VERBOSE - probe->ops[i].flags, + probe->ops[i].flags, # endif - (uint16_t) (probe->ops[i].flags & ~1)); - } else { - printf("%#hx /* IO_URING_OP_??? */", - probe->ops[i].flags); - } + (uint16_t) (probe->ops[i].flags & ~1)); + } else { + printf("%#hx /* IO_URING_OP_??? */", + probe->ops[i].flags); + } #endif /* XLAT_RAW */ - printf(", resv2=%#x}", probe->ops[i].resv2); + printf(", resv2=%#x}", probe->ops[i].resv2); + } + printf(", ...]}"); } - printf(", ...]}, %d) = %s\n", DEFAULT_STRLEN + 1, errstr); + printf(", %d) = %s\n", DEFAULT_STRLEN + 1, errstr); probe->last_op = 0; probe->ops_len = 0; memset(probe->ops, 0, sizeof(probe->ops[0]) * (DEFAULT_STRLEN + 1)); sys_io_uring_register(fd_null, IORING_REGISTER_PROBE, probe, 8); - printf("io_uring_register(%u<%s>, " XLAT_FMT ", %p, 8) = %s\n", - fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), probe, + printf("io_uring_register(%u<%s>, " XLAT_FMT ", " +#if RETVAL_INJECTED + "{last_op=" XLAT_KNOWN(0, "IORING_OP_NOP") ", ops_len=0, ops=[]}" +#else + "%p" +#endif + ", 8) = %s\n", + fd_null, path_null, XLAT_ARGS(IORING_REGISTER_PROBE), +#if !RETVAL_INJECTED + probe, +#endif errstr); |