summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEugene Syromyatnikov <evgsyr@gmail.com>2021-09-20 04:50:56 +0200
committerEugene Syromyatnikov <evgsyr@gmail.com>2021-10-12 00:35:30 +0200
commit647aef386bb586122de232a68eb653fc9d5198b5 (patch)
treef692167792b0f22f55ff816351aea17a98ff5b6e
parent4298e4fdad32d7d94c7f0c559f9bc110296dc2f5 (diff)
downloadstrace-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/.gitignore4
-rw-r--r--tests/Makefile.am4
-rw-r--r--tests/gen_tests.in4
-rw-r--r--tests/io_uring_register-success-Xabbrev.c2
-rw-r--r--tests/io_uring_register-success-Xraw.c2
-rw-r--r--tests/io_uring_register-success-Xverbose.c2
-rw-r--r--tests/io_uring_register-success.c2
-rw-r--r--tests/io_uring_register.c123
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);