A special test file for syscalls in io.c, I tried to make the trace results as stable as each time we execute the program.
* test/.gitignore: Add json_io. * test/.Makefile: Add json_io.c to compile list. * test/json_io.c(newfile): contain test cases for syscalls in io.c, The only random number would be the pipe numver when calling syscalls like spice,vmsplice. --- test/.gitignore | 1 + test/Makefile | 2 +- test/json_io.c | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 test/json_io.c diff --git a/test/.gitignore b/test/.gitignore index c73b64a..f488409 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -1,3 +1,4 @@ +json_io vfork fork sig diff --git a/test/Makefile b/test/Makefile index cc7d47a..d19b187 100644 --- a/test/Makefile +++ b/test/Makefile @@ -3,7 +3,7 @@ CFLAGS += -Wall PROGS = \ vfork fork sig skodic clone leaderkill childthread \ sigkill_rain wait_must_be_interruptible threaded_execve \ - mtd ubi select sigreturn + mtd ubi select sigreturn json_io all: $(PROGS) diff --git a/test/json_io.c b/test/json_io.c new file mode 100644 index 0000000..f1e77e9 --- /dev/null +++ b/test/json_io.c @@ -0,0 +1,91 @@ +#define _GNU_SOURCE +#include <stdio.h> +#include <stdlib.h> +#include <fcntl.h> +#include <unistd.h> +#include <sys/uio.h> +#include <sys/sendfile.h> +#include <fcntl.h> +#include <errno.h> +#include <limits.h> +#include <string.h> +#include <linux/fs.h> + +void test(void) +{ + #define BUFSIZE (1000) + static char buf[BUFSIZE] = "xm\216\315r\177\0\0 \304\311\315r\177\0\0\0\0\0\0\1\0\0\0\242\10\0\0\1\0\0\0"; + static char str[] = "helloworld, this_is_a_test_string,\n\n\n. !@$%^$!@, \\{{{\"\"\"]]]}}}%%---%%"; + int strsz = strlen(str) + 1; + + int fd1 = open("/tmp/strace_GSOC_json_test.txt", O_CLOEXEC|O_CREAT|O_RDWR|O_TRUNC, S_IWUSR|S_IRUSR|S_IROTH|S_IRGRP); + + write(923, buf, 25); + write(fd1, buf, 0); + write(fd1, str, strsz); + write(fd1, str, 10); + + read(923, buf, BUFSIZE); + lseek(fd1, 0, SEEK_SET); + read(fd1, buf, 0); + read(fd1, buf, BUFSIZE); + lseek(fd1, -10, SEEK_END); + read(fd1, buf, 20); + + static char vecstr[5][50] = { + "abcdefgabcdefgabcdefg", + "6fgjgbcduifgabcdefgbcdefg", + "i890abfghgabcduioefg", + "vgyjghuvbbcddfsucdefgdefg", + "sfd0-9gcdefgabcdefgbcdefg"}; + + struct iovec vecbuf[5]; + int i; + for (i=0; i<5; i++) { + vecbuf[i].iov_base = vecstr[i]; + vecbuf[i].iov_len = strlen(vecstr[i]) + 1; + } + + pread(fd1, buf, BUFSIZE, 0); + pwrite(fd1, buf, BUFSIZE, 0); + preadv(fd1, vecbuf, 5, 0); + pwritev(fd1, vecbuf, 5, 0); + + int fd2 = 923; + off_t off = 99999346451407343; + sendfile(fd1, fd2, NULL, BUFSIZE); + sendfile(fd1, -1, &off, BUFSIZE); + fd2 = open("/tmp/strace_tmp_file2", O_RDWR | O_CREAT | O_TRUNC, S_IWUSR|S_IRUSR|S_IROTH|S_IRGRP); + write(fd2, buf, BUFSIZE); + lseek(fd2, 0, SEEK_SET); + sendfile(fd1, fd2, &off, BUFSIZE); + off = 0; + sendfile(fd1, fd2, &off, 100); + + tee(fd1, fd2, 2345, SPLICE_F_MORE | SPLICE_F_MOVE | SPLICE_F_GIFT); + tee(fd1, fd2, 2345, SPLICE_F_NONBLOCK | SPLICE_F_MOVE); + tee(STDIN_FILENO, STDOUT_FILENO, 99999, SPLICE_F_NONBLOCK); + + off_t o1 = 12; + int pfd[2]; + pipe2(pfd, O_NONBLOCK | O_CLOEXEC); + splice(fd1, NULL, fd2, NULL, 100, SPLICE_F_MOVE | SPLICE_F_NONBLOCK); + splice(fd1, &o1, pfd[1], NULL, 100, SPLICE_F_MOVE); + splice(fd1, &o1, pfd[1], NULL, 100, 8349583); + + vmsplice(923, vecbuf, 5, 23487); + vmsplice(pfd[0], vecbuf, 5, SPLICE_F_NONBLOCK|SPLICE_F_MOVE); + vmsplice(pfd[1], vecbuf, 5, SPLICE_F_NONBLOCK|SPLICE_F_MOVE); +} + + +int main(int argc, char *argv[]) +{ + int cnt = 1; + if (argc >= 2) + cnt = atoi(argv[1]); + while (cnt-- > 0) { + test(); + } + return 0; +} \ No newline at end of file -- 1.9.1 ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ Strace-devel mailing list Strace-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/strace-devel