Hi,

On Fri, Jan 15, 2016 at 05:06:13PM +0800, Fei, Jie/费 杰 wrote:
> 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?

First of all, there has to be clear what is being tested.
Taking your clone-f.test as an example, are you testing just the fact
of following both threads after clone syscall, or maybe something beyond
that?

> 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;

My original idea of using pwrite for text marks in the log haven't passed
the test of real world: I stumbled upon a system where pwrite is not
implemented using pwrite64 syscall.  I had to replace pwrite with chdir
which is portable (see commit v4.11-125-g6833d61).

> > +}
> > +
> > +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);

On some architectures supported by strace, stack grows upwards.

clone behavior noticeably depends on the clone flags.  Is there any
particular reason to use these flags in the test?

> > +   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);

There is no guarantee of the parent being first, or visa versa.
I explicitly added synchronization into fork-f.test and vfork-f.test
to make the output predictable.

> > +   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

-- 
ldv

Attachment: pgpHeEQVswVXc.pgp
Description: PGP signature

------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
Strace-devel mailing list
Strace-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/strace-devel

Reply via email to