linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] selftests: ftrace: Allow some tests to be run in a tracing instance
@ 2017-04-21 14:41 Steven Rostedt
  2017-04-21 23:00 ` Masami Hiramatsu
  0 siblings, 1 reply; 3+ messages in thread
From: Steven Rostedt @ 2017-04-21 14:41 UTC (permalink / raw)
  To: LKML; +Cc: Shuah Khan, Masami Hiramatsu, Namhyung Kim


An tracing instance has several of the same capabilities as the top level
instance, but may be implemented slightly different. Instead of just writing
tests that duplicat the same test cases of the top level instance, allow a
test to be written for both the top level as well as for an instance.

If a test case can be run in both the top level as well as in an tracing
instance directory, then it should add a tag "# flags: instance" in the
header of the test file. Then after all tests have run, any test that has an
instance flag set, will run again within a tracing instance.

Cc: Shuah Khan <shuah@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
---

Changes since v1: (comments from Masami Hiramatsu)

 Use test flag instead of file name change.
 Remove -i option to run_test function
 Use global variable to denote instance running
 Update TRACING_DIR instead of cd'ing to another directory.

 tools/testing/selftests/ftrace/ftracetest | 40 +++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
index a8631d9..9992ff6 100755
--- a/tools/testing/selftests/ftrace/ftracetest
+++ b/tools/testing/selftests/ftrace/ftracetest
@@ -157,6 +157,15 @@ testcase() { # testfile
   prlog -n "[$CASENO]$desc"
 }
 
+INSTANCE=0
+testinstance() { # testfile
+    if grep -q '^#[ \t]*flags:.*instance' $1 ; then
+	INSTANCE=1
+    else
+	INSTANCE=0
+    fi
+}
+
 eval_result() { # sigval
   case $1 in
     $PASS)
@@ -233,18 +242,26 @@ exit_xfail () {
 }
 trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
 
+INSTANCE_DIR="."
 __run_test() { # testfile
   # setup PID and PPID, $$ is not updated.
   (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x; initialize_ftrace; . $1)
   [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
 }
 
+TEST_INSTANCES=0
+
 # Run one test case
 run_test() { # testfile
   local testname=`basename $1`
   local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
   export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
   testcase $1
+  local SAVE_TRACING_DIR=$TRACING_DIR
+  if [ $TEST_INSTANCES -eq 1 ]; then
+    TRACING_DIR=$TRACING_DIR/instances/${testname}_test_$$
+    mkdir $TRACING_DIR
+  fi
   echo "execute: "$1 > $testlog
   SIG_RESULT=0
   if [ $VERBOSE -ge 2 ]; then
@@ -260,17 +277,40 @@ run_test() { # testfile
     [ $VERBOSE -ge 1 ] && catlog $testlog
     TOTAL_RESULT=1
   fi
+  if [ $TEST_INSTANCES -eq 1 ]; then
+    rmdir $TRACING_DIR
+  fi
+  TRACING_DIR=$SAVE_TRACING_DIR
   rm -rf $TMPDIR
 }
 
 # load in the helper functions
 . $TEST_DIR/functions
 
+RUN_INSTANCES=0
+
 # Main loop
 for t in $TEST_CASES; do
+  testinstance $t
+  if [ $INSTANCE -eq 1 ]; then
+    RUN_INSTANCES=1
+  fi
   run_test $t
 done
 
+TEST_INSTANCES=1
+
+if [ $RUN_INSTANCES -eq 1 ]; then
+    echo "Running tests in a tracing instance:"
+    for t in $TEST_CASES; do
+	testinstance $t
+	if [ $INSTANCE -eq 0 ]; then
+	    continue
+	fi
+	run_test $t
+    done
+fi
+
 prlog ""
 prlog "# of passed: " `echo $PASSED_CASES | wc -w`
 prlog "# of failed: " `echo $FAILED_CASES | wc -w`
-- 
2.9.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] selftests: ftrace: Allow some tests to be run in a tracing instance
  2017-04-21 14:41 [PATCH v2] selftests: ftrace: Allow some tests to be run in a tracing instance Steven Rostedt
@ 2017-04-21 23:00 ` Masami Hiramatsu
  2017-04-22  3:22   ` Steven Rostedt
  0 siblings, 1 reply; 3+ messages in thread
From: Masami Hiramatsu @ 2017-04-21 23:00 UTC (permalink / raw)
  To: Steven Rostedt; +Cc: LKML, Shuah Khan, Masami Hiramatsu, Namhyung Kim

On Fri, 21 Apr 2017 10:41:44 -0400
Steven Rostedt <rostedt@goodmis.org> wrote:

> 
> An tracing instance has several of the same capabilities as the top level
> instance, but may be implemented slightly different. Instead of just writing
> tests that duplicat the same test cases of the top level instance, allow a
> test to be written for both the top level as well as for an instance.
> 
> If a test case can be run in both the top level as well as in an tracing
> instance directory, then it should add a tag "# flags: instance" in the
> header of the test file. Then after all tests have run, any test that has an
> instance flag set, will run again within a tracing instance.
> 
> Cc: Shuah Khan <shuah@kernel.org>
> Cc: Masami Hiramatsu <mhiramat@kernel.org>
> Cc: Namhyung Kim <namhyung@kernel.org>
> Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
> ---
> 
> Changes since v1: (comments from Masami Hiramatsu)
> 
>  Use test flag instead of file name change.
>  Remove -i option to run_test function
>  Use global variable to denote instance running
>  Update TRACING_DIR instead of cd'ing to another directory.
> 
>  tools/testing/selftests/ftrace/ftracetest | 40 +++++++++++++++++++++++++++++++
>  1 file changed, 40 insertions(+)
> 
> diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests/ftrace/ftracetest
> index a8631d9..9992ff6 100755
> --- a/tools/testing/selftests/ftrace/ftracetest
> +++ b/tools/testing/selftests/ftrace/ftracetest
> @@ -157,6 +157,15 @@ testcase() { # testfile
>    prlog -n "[$CASENO]$desc"
>  }
>  
> +INSTANCE=0
> +testinstance() { # testfile
> +    if grep -q '^#[ \t]*flags:.*instance' $1 ; then
> +	INSTANCE=1
> +    else
> +	INSTANCE=0
> +    fi
> +}

In this case we can just run grep.

BTW, this seems too complecated (with many similar variables).
I think we just need following patch, if we run the tests which
have "instance" flag twice on top-level and an instance.
(If you'd like to run those tests only on instance, we need
 just one more line in the main loop ;-) )

-----------
diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests
index 52e3c4d..bdb10e6 100755
--- a/tools/testing/selftests/ftrace/ftracetest
+++ b/tools/testing/selftests/ftrace/ftracetest
@@ -152,6 +152,10 @@ testcase() { # testfile
   prlog -n "[$CASENO]$desc"
 }
 
+test_on_instance() { # testfile
+  grep "^#[ \t]*flag:.*instance" $1
+}
+
 eval_result() { # sigval
   case $1 in
     $PASS)
@@ -266,6 +270,16 @@ for t in $TEST_CASES; do
   run_test $t
 done
 
+# Test on instance loop
+for t in $TEST_CASES; do
+  test_on_instance $t || continue
+  SAVED_TRACING_DIR=$TRACING_DIR
+  export TRACING_DIR=`mktemp -d $TRACING_DIR/instances/ftracetest.XXXXXX`
+  run_test $t
+  rmdir $TRACING_DIR
+  TRACING_DIR=$SAVED_TRACING_DIR
+done
+
 prlog ""
 prlog "# of passed: " `echo $PASSED_CASES | wc -w`
 prlog "# of failed: " `echo $FAILED_CASES | wc -w`
-----------

Would this work for you?

Thank you,

> +
>  eval_result() { # sigval
>    case $1 in
>      $PASS)
> @@ -233,18 +242,26 @@ exit_xfail () {
>  }
>  trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
>  
> +INSTANCE_DIR="."
>  __run_test() { # testfile
>    # setup PID and PPID, $$ is not updated.
>    (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x; initialize_ftrace; . $1)
>    [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
>  }
>  
> +TEST_INSTANCES=0
> +
>  # Run one test case
>  run_test() { # testfile
>    local testname=`basename $1`
>    local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
>    export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
>    testcase $1
> +  local SAVE_TRACING_DIR=$TRACING_DIR
> +  if [ $TEST_INSTANCES -eq 1 ]; then
> +    TRACING_DIR=$TRACING_DIR/instances/${testname}_test_$$
> +    mkdir $TRACING_DIR
> +  fi
>    echo "execute: "$1 > $testlog
>    SIG_RESULT=0
>    if [ $VERBOSE -ge 2 ]; then
> @@ -260,17 +277,40 @@ run_test() { # testfile
>      [ $VERBOSE -ge 1 ] && catlog $testlog
>      TOTAL_RESULT=1
>    fi
> +  if [ $TEST_INSTANCES -eq 1 ]; then
> +    rmdir $TRACING_DIR
> +  fi
> +  TRACING_DIR=$SAVE_TRACING_DIR
>    rm -rf $TMPDIR
>  }
>  
>  # load in the helper functions
>  . $TEST_DIR/functions
>  
> +RUN_INSTANCES=0
> +
>  # Main loop
>  for t in $TEST_CASES; do
> +  testinstance $t
> +  if [ $INSTANCE -eq 1 ]; then
> +    RUN_INSTANCES=1
> +  fi
>    run_test $t
>  done
>  
> +TEST_INSTANCES=1
> +
> +if [ $RUN_INSTANCES -eq 1 ]; then
> +    echo "Running tests in a tracing instance:"
> +    for t in $TEST_CASES; do
> +	testinstance $t
> +	if [ $INSTANCE -eq 0 ]; then
> +	    continue
> +	fi
> +	run_test $t
> +    done
> +fi
> +
>  prlog ""
>  prlog "# of passed: " `echo $PASSED_CASES | wc -w`
>  prlog "# of failed: " `echo $FAILED_CASES | wc -w`
> -- 
> 2.9.3
> 


-- 
Masami Hiramatsu <mhiramat@kernel.org>

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2] selftests: ftrace: Allow some tests to be run in a tracing instance
  2017-04-21 23:00 ` Masami Hiramatsu
@ 2017-04-22  3:22   ` Steven Rostedt
  0 siblings, 0 replies; 3+ messages in thread
From: Steven Rostedt @ 2017-04-22  3:22 UTC (permalink / raw)
  To: Masami Hiramatsu; +Cc: LKML, Shuah Khan, Namhyung Kim

On Sat, 22 Apr 2017 08:00:36 +0900
Masami Hiramatsu <mhiramat@kernel.org> wrote:

> 
> BTW, this seems too complecated (with many similar variables).

I'm use to complicated ;-)

> I think we just need following patch, if we run the tests which
> have "instance" flag twice on top-level and an instance.
> (If you'd like to run those tests only on instance, we need
>  just one more line in the main loop ;-) )
> 
> -----------
> diff --git a/tools/testing/selftests/ftrace/ftracetest b/tools/testing/selftests
> index 52e3c4d..bdb10e6 100755
> --- a/tools/testing/selftests/ftrace/ftracetest
> +++ b/tools/testing/selftests/ftrace/ftracetest
> @@ -152,6 +152,10 @@ testcase() { # testfile
>    prlog -n "[$CASENO]$desc"
>  }
>  
> +test_on_instance() { # testfile
> +  grep "^#[ \t]*flag:.*instance" $1
> +}
> +
>  eval_result() { # sigval
>    case $1 in
>      $PASS)
> @@ -266,6 +270,16 @@ for t in $TEST_CASES; do
>    run_test $t
>  done
>  
> +# Test on instance loop
> +for t in $TEST_CASES; do
> +  test_on_instance $t || continue
> +  SAVED_TRACING_DIR=$TRACING_DIR
> +  export TRACING_DIR=`mktemp -d $TRACING_DIR/instances/ftracetest.XXXXXX`
> +  run_test $t
> +  rmdir $TRACING_DIR
> +  TRACING_DIR=$SAVED_TRACING_DIR
> +done

I have a slight modification to this. Will send soon.

-- Steve

> +
>  prlog ""
>  prlog "# of passed: " `echo $PASSED_CASES | wc -w`
>  prlog "# of failed: " `echo $FAILED_CASES | wc -w`
> -----------
> 
> Would this work for you?
> 
> Thank you,
> 
> > +
> >  eval_result() { # sigval
> >    case $1 in
> >      $PASS)
> > @@ -233,18 +242,26 @@ exit_xfail () {
> >  }
> >  trap 'SIG_RESULT=$XFAIL' $SIG_XFAIL
> >  
> > +INSTANCE_DIR="."
> >  __run_test() { # testfile
> >    # setup PID and PPID, $$ is not updated.
> >    (cd $TRACING_DIR; read PID _ < /proc/self/stat; set -e; set -x; initialize_ftrace; . $1)
> >    [ $? -ne 0 ] && kill -s $SIG_FAIL $SIG_PID
> >  }
> >  
> > +TEST_INSTANCES=0
> > +
> >  # Run one test case
> >  run_test() { # testfile
> >    local testname=`basename $1`
> >    local testlog=`mktemp $LOG_DIR/${testname}-log.XXXXXX`
> >    export TMPDIR=`mktemp -d /tmp/ftracetest-dir.XXXXXX`
> >    testcase $1
> > +  local SAVE_TRACING_DIR=$TRACING_DIR
> > +  if [ $TEST_INSTANCES -eq 1 ]; then
> > +    TRACING_DIR=$TRACING_DIR/instances/${testname}_test_$$
> > +    mkdir $TRACING_DIR
> > +  fi
> >    echo "execute: "$1 > $testlog
> >    SIG_RESULT=0
> >    if [ $VERBOSE -ge 2 ]; then
> > @@ -260,17 +277,40 @@ run_test() { # testfile
> >      [ $VERBOSE -ge 1 ] && catlog $testlog
> >      TOTAL_RESULT=1
> >    fi
> > +  if [ $TEST_INSTANCES -eq 1 ]; then
> > +    rmdir $TRACING_DIR
> > +  fi
> > +  TRACING_DIR=$SAVE_TRACING_DIR
> >    rm -rf $TMPDIR
> >  }
> >  
> >  # load in the helper functions
> >  . $TEST_DIR/functions
> >  
> > +RUN_INSTANCES=0
> > +
> >  # Main loop
> >  for t in $TEST_CASES; do
> > +  testinstance $t
> > +  if [ $INSTANCE -eq 1 ]; then
> > +    RUN_INSTANCES=1
> > +  fi
> >    run_test $t
> >  done
> >  
> > +TEST_INSTANCES=1
> > +
> > +if [ $RUN_INSTANCES -eq 1 ]; then
> > +    echo "Running tests in a tracing instance:"
> > +    for t in $TEST_CASES; do
> > +	testinstance $t
> > +	if [ $INSTANCE -eq 0 ]; then
> > +	    continue
> > +	fi
> > +	run_test $t
> > +    done
> > +fi
> > +
> >  prlog ""
> >  prlog "# of passed: " `echo $PASSED_CASES | wc -w`
> >  prlog "# of failed: " `echo $FAILED_CASES | wc -w`
> > -- 
> > 2.9.3
> >   
> 
> 

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2017-04-22  3:22 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-04-21 14:41 [PATCH v2] selftests: ftrace: Allow some tests to be run in a tracing instance Steven Rostedt
2017-04-21 23:00 ` Masami Hiramatsu
2017-04-22  3:22   ` Steven Rostedt

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).