[PATCH] Add clone-f test

Fei, Jie/费 杰 feij.fnst at cn.fujitsu.com
Fri Jan 15 09:06:13 UTC 2016


Hi!

I'm still not sure what kind of tests are needed so I continued writing 
patches.
Could you give me some advice on these patches?

On 01/13/2016 04:43 PM, Fei Jie wrote:
> tests: add clone-f.test.
>
> Check how strace -f follows clone syscall.
>
> * tests/clone-f.c: New file.
> * tests/clone-f.test: New test.
> * tests/Makefile.am: (check_PROGRAMS): Add clone-f.
> (TESTS): Add clone-f.test.
> * tests/.gitignore: Add clone-f.
> ---
>   tests/.gitignore   |  1 +
>   tests/Makefile.am  |  2 ++
>   tests/clone-f.c    | 44 ++++++++++++++++++++++++++++++++++++++++++++
>   tests/clone-f.test | 11 +++++++++++
>   4 files changed, 58 insertions(+)
>   create mode 100644 tests/clone-f.c
>   create mode 100755 tests/clone-f.test
>
> diff --git a/tests/.gitignore b/tests/.gitignore
> index cfe1e9f..7aa2449 100644
> --- a/tests/.gitignore
> +++ b/tests/.gitignore
> @@ -12,6 +12,7 @@ bpf
>   caps
>   clock_nanosleep
>   clock_xettime
> +clone-f
>   epoll_create1
>   eventfd
>   execve
> diff --git a/tests/Makefile.am b/tests/Makefile.am
> index 33f76cb..80292c4 100644
> --- a/tests/Makefile.am
> +++ b/tests/Makefile.am
> @@ -58,6 +58,7 @@ check_PROGRAMS = \
>   	caps \
>   	clock_nanosleep \
>   	clock_xettime \
> +	clone-f \
>   	epoll_create1 \
>   	eventfd \
>   	execve \
> @@ -194,6 +195,7 @@ TESTS = \
>   	caps.test \
>   	clock_nanosleep.test \
>   	clock_xettime.test \
> +	clone-f.test \
>   	dumpio.test \
>   	epoll_create1.test \
>   	eventfd.test \
> diff --git a/tests/clone-f.c b/tests/clone-f.c
> new file mode 100644
> index 0000000..df97b54
> --- /dev/null
> +++ b/tests/clone-f.c
> @@ -0,0 +1,44 @@
> +#include "tests.h"
> +#include <stdio.h>
> +#include <string.h>
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <sched.h>
> +#include <signal.h>
> +
> +#define CHILD_STACK_SIZE 16384
> +
> +static int
> +logit(const char *const str)
> +{
> +	return pwrite(-1, str, strlen(str), 0) >= 0;
> +}
> +
> +void
> +child(void)
> +{
> +	logit("child");
> +}
> +
> +int main()
> +{
> +	logit("parent");
> +
> +	void *child_stack;
> +	if ((child_stack = (void *) malloc(CHILD_STACK_SIZE)) == NULL) {
> +		printf("cannot allocate stack for child!\n");
> +	}
> +
> +	pid_t child_pid = clone(&child, child_stack + CHILD_STACK_SIZE, CLONE_VM, NULL);
> +	if (child_pid < 0) {
> +		perror_msg_and_fail("clone");
> +	}
> +
> +	free(child_stack);
> +
> +	pid_t pid = getpid();
> +	printf("%-5d pwrite64(-1, \"parent\", 6, 0) = -1 EBADF (%m)\n"
> +	       "%-5d pwrite64(-1, \"child\", 5, 0) = -1 EBADF (%m)\n",
> +	       pid, child_pid);
> +	return 0;
> +}
> diff --git a/tests/clone-f.test b/tests/clone-f.test
> new file mode 100755
> index 0000000..439426d
> --- /dev/null
> +++ b/tests/clone-f.test
> @@ -0,0 +1,11 @@
> +#!/bin/sh
> +
> +. "${srcdir=.}/init.sh"
> +
> +OUT="$LOG.out"
> +run_prog > /dev/null
> +run_strace -a32 -epwrite64 -esignal=none -f -qq $args >"$OUT"
> +match_diff "$LOG" "$OUT"
> +rm -f "$OUT"
> +
> +exit 0

-- 
Thanks!
Fei Jie







More information about the Strace-devel mailing list