All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net-next 0/2] tools: tc-testing: better error reporting
@ 2018-02-23 15:51 Brenda J. Butler
  2018-02-23 15:51 ` [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore Brenda J. Butler
  2018-02-23 15:51 ` [PATCH net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler
  0 siblings, 2 replies; 5+ messages in thread
From: Brenda J. Butler @ 2018-02-23 15:51 UTC (permalink / raw)
  To: davem
  Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, netdev,
	Brenda J. Butler

This patch set contains a bit of cleanup and better error reporting,
esp. in pre- and post-suite, and pre- and post-case commands.

Brenda J. Butler (2):
  tools: tc-testing: whitespace and .gitignore
  tools: tc-testing: better error reporting

 tools/testing/selftests/tc-testing/.gitignore |  1 +
 tools/testing/selftests/tc-testing/tdc.py     | 88 ++++++++++++++++++++++-----
 2 files changed, 73 insertions(+), 16 deletions(-)

-- 
2.15.1

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

* [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore
  2018-02-23 15:51 [PATCH net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
@ 2018-02-23 15:51 ` Brenda J. Butler
  2018-02-23 16:13   ` Andrew Lunn
  2018-02-23 15:51 ` [PATCH net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler
  1 sibling, 1 reply; 5+ messages in thread
From: Brenda J. Butler @ 2018-02-23 15:51 UTC (permalink / raw)
  To: davem
  Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, netdev,
	Brenda J. Butler

Fix indentation and add editor backup files to .gitignore

Signed-off-by: Brenda J. Butler <bjb@mojatatu.com>
---
 tools/testing/selftests/tc-testing/.gitignore | 1 +
 tools/testing/selftests/tc-testing/tdc.py     | 4 ++--
 2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/tools/testing/selftests/tc-testing/.gitignore b/tools/testing/selftests/tc-testing/.gitignore
index 7a60b85e148f..d668a0fdea39 100644
--- a/tools/testing/selftests/tc-testing/.gitignore
+++ b/tools/testing/selftests/tc-testing/.gitignore
@@ -1,2 +1,3 @@
 __pycache__/
 *.pyc
+*.py~
diff --git a/tools/testing/selftests/tc-testing/tdc.py b/tools/testing/selftests/tc-testing/tdc.py
index b3754b9aa302..ab28373dccd7 100755
--- a/tools/testing/selftests/tc-testing/tdc.py
+++ b/tools/testing/selftests/tc-testing/tdc.py
@@ -347,9 +347,9 @@ def check_default_settings(args, remaining, pm):
     global NAMES
 
     if args.path != None:
-         NAMES['TC'] = args.path
+        NAMES['TC'] = args.path
     if args.device != None:
-         NAMES['DEV2'] = args.device
+        NAMES['DEV2'] = args.device
     if not os.path.isfile(NAMES['TC']):
         print("The specified tc path " + NAMES['TC'] + " does not exist.")
         exit(1)
-- 
2.15.1

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

* [PATCH net-next 2/2] tools: tc-testing: better error reporting
  2018-02-23 15:51 [PATCH net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
  2018-02-23 15:51 ` [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore Brenda J. Butler
@ 2018-02-23 15:51 ` Brenda J. Butler
  1 sibling, 0 replies; 5+ messages in thread
From: Brenda J. Butler @ 2018-02-23 15:51 UTC (permalink / raw)
  To: davem
  Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, netdev,
	Brenda J. Butler

Do a better job with error handling - in pre- and post-suite,
in pre- and post-case.  Show a traceback for errors.

Signed-off-by: Brenda J. Butler <bjb@mojatatu.com>
---
 tools/testing/selftests/tc-testing/tdc.py | 84 +++++++++++++++++++++++++------
 1 file changed, 70 insertions(+), 14 deletions(-)

diff --git a/tools/testing/selftests/tc-testing/tdc.py b/tools/testing/selftests/tc-testing/tdc.py
index ab28373dccd7..6c220bc26d9f 100755
--- a/tools/testing/selftests/tc-testing/tdc.py
+++ b/tools/testing/selftests/tc-testing/tdc.py
@@ -15,6 +15,7 @@ import importlib
 import json
 import subprocess
 import time
+import traceback
 from collections import OrderedDict
 from string import Template
 
@@ -23,6 +24,13 @@ from tdc_helper import *
 
 import TdcPlugin
 
+
+class PluginMgrTestFail(Exception):
+    def __init__(self, stage, output, message):
+        self.stage = stage
+        self.output = output
+        self.message = message
+
 class PluginMgr:
     def __init__(self, argparser):
         super().__init__()
@@ -135,7 +143,7 @@ def exec_cmd(args, pm, stage, command):
     return proc, foutput
 
 
-def prepare_env(args, pm, stage, prefix, cmdlist):
+def prepare_env(args, pm, stage, prefix, cmdlist, output = None):
     """
     Execute the setup/teardown commands for a test case.
     Optionally terminate test execution if the command fails.
@@ -164,7 +172,9 @@ def prepare_env(args, pm, stage, prefix, cmdlist):
             print("\n{} *** Aborting test run.".format(prefix), file=sys.stderr)
             print("\n\n{} *** stdout ***".format(proc.stdout), file=sys.stderr)
             print("\n\n{} *** stderr ***".format(proc.stderr), file=sys.stderr)
-            raise Exception('"{}" did not complete successfully'.format(prefix))
+            raise PluginMgrTestFail(
+                stage, output,
+                '"{}" did not complete successfully'.format(prefix))
 
 def run_one_test(pm, args, index, tidx):
     result = True
@@ -194,8 +204,11 @@ def run_one_test(pm, args, index, tidx):
         match_pattern = re.compile(
             str(tidx["matchPattern"]), re.DOTALL | re.MULTILINE)
         (p, procout) = exec_cmd(args, pm, 'verify', tidx["verifyCmd"])
-        match_index = re.findall(match_pattern, procout)
-        if len(match_index) != int(tidx["matchCount"]):
+        if procout:
+            match_index = re.findall(match_pattern, procout)
+            if len(match_index) != int(tidx["matchCount"]):
+                result = False
+        elif int(tidx["matchCount"]) != 0:
             result = False
 
     if not result:
@@ -204,9 +217,12 @@ def run_one_test(pm, args, index, tidx):
     tap += tresult
 
     if result == False:
-        tap += procout
+        if procout:
+            tap += procout
+        else:
+            tap += 'No output!\n'
 
-    prepare_env(args, pm, 'teardown', '-----> teardown stage', tidx['teardown'])
+    prepare_env(args, pm, 'teardown', '-----> teardown stage', tidx['teardown'], procout)
     pm.call_post_case()
 
     index += 1
@@ -227,30 +243,70 @@ def test_runner(pm, args, filtered_tests):
     index = 1
     tap = str(index) + ".." + str(tcount) + "\n"
     badtest = None
+    stage = None
+    emergency_exit = False
+    emergency_exit_message = ''
 
-    pm.call_pre_suite(tcount, [tidx['id'] for tidx in testlist])
-
+    try:
+        pm.call_pre_suite(tcount, [tidx['id'] for tidx in testlist])
+    except Exception as ee:
+        ex_type, ex, ex_tb = sys.exc_info()
+        print('Exception {} {} (caught in pre_suite).'.
+              format(ex_type, ex))
+        # when the extra print statements are uncommented,
+        # the traceback does not appear between them
+        # (it appears way earlier in the tdc.py output)
+        # so don't bother ...
+        # print('--------------------(')
+        # print('traceback')
+        traceback.print_tb(ex_tb)
+        # print('--------------------)')
+        emergency_exit_message = 'EMERGENCY EXIT, call_pre_suite failed with exception {} {}\n'.format(ex_type, ex)
+        emergency_exit = True
+        stage = 'pre-SUITE'
+
+    if emergency_exit:
+        pm.call_post_suite(index)
+        return emergency_exit_message
     if args.verbose > 1:
-        print('Run tests here')
+        print('give test rig 2 seconds to stabilize')
+    time.sleep(2)
     for tidx in testlist:
         if "flower" in tidx["category"] and args.device == None:
+            if args.verbose > 1:
+                print('Not executing test {} {} because DEV2 not defined'.
+                      format(tidx['id'], tidx['name']))
             continue
         try:
             badtest = tidx  # in case it goes bad
             tap += run_one_test(pm, args, index, tidx)
-        except Exception as ee:
-            print('Exception {} (caught in test_runner, running test {} {} {})'.
-                  format(ee, index, tidx['id'], tidx['name']))
+        except PluginMgrTestFail as pmtf:
+            ex_type, ex, ex_tb = sys.exc_info()
+            stage = pmtf.stage
+            message = pmtf.message
+            output = pmtf.output
+            print(message)
+            print('Exception {} {} (caught in test_runner, running test {} {} {} stage {})'.
+                  format(ex_type, ex, index, tidx['id'], tidx['name'], stage))
+            print('---------------')
+            print('traceback')
+            traceback.print_tb(ex_tb)
+            print('---------------')
+            if stage == 'teardown':
+                print('accumulated output for this test:')
+                if pmtf.output:
+                    print(pmtf.output)
+            print('---------------')
             break
         index += 1
 
     # if we failed in setup or teardown,
-    # fill in the remaining tests with not ok
+    # fill in the remaining tests with ok-skipped
     count = index
     tap += 'about to flush the tap output if tests need to be skipped\n'
     if tcount + 1 != index:
         for tidx in testlist[index - 1:]:
-            msg = 'skipped - previous setup or teardown failed'
+            msg = 'skipped - previous {} failed'.format(stage)
             tap += 'ok {} - {} # {} {} {}\n'.format(
                 count, tidx['id'], msg, index, badtest.get('id', '--Unknown--'))
             count += 1
-- 
2.15.1

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

* Re: [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore
  2018-02-23 15:51 ` [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore Brenda J. Butler
@ 2018-02-23 16:13   ` Andrew Lunn
  2018-02-23 16:59     ` Brenda Butler
  0 siblings, 1 reply; 5+ messages in thread
From: Andrew Lunn @ 2018-02-23 16:13 UTC (permalink / raw)
  To: Brenda J. Butler
  Cc: davem, jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv,
	netdev

On Fri, Feb 23, 2018 at 10:51:32AM -0500, Brenda J. Butler wrote:
> Fix indentation and add editor backup files to .gitignore
> 
> Signed-off-by: Brenda J. Butler <bjb@mojatatu.com>
> ---
>  tools/testing/selftests/tc-testing/.gitignore | 1 +
>  tools/testing/selftests/tc-testing/tdc.py     | 4 ++--
>  2 files changed, 3 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/tc-testing/.gitignore b/tools/testing/selftests/tc-testing/.gitignore
> index 7a60b85e148f..d668a0fdea39 100644
> --- a/tools/testing/selftests/tc-testing/.gitignore
> +++ b/tools/testing/selftests/tc-testing/.gitignore
> @@ -1,2 +1,3 @@
>  __pycache__/
>  *.pyc
> +*.py~

Hi Brenda

Isn't this something which can be done once at the top level?

      Andrew

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

* Re: [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore
  2018-02-23 16:13   ` Andrew Lunn
@ 2018-02-23 16:59     ` Brenda Butler
  0 siblings, 0 replies; 5+ messages in thread
From: Brenda Butler @ 2018-02-23 16:59 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: David Miller, Jamal Hadi Salim, Cong Wang, Jiri Pirko, Chris Mi,
	Lucas Bates, Alexander Aring, Roman Mashak, netdev

On Fri, Feb 23, 2018 at 11:13 AM, Andrew Lunn <andrew@lunn.ch> wrote:
> On Fri, Feb 23, 2018 at 10:51:32AM -0500, Brenda J. Butler wrote:
>> Fix indentation and add editor backup files to .gitignore
>>
>> Signed-off-by: Brenda J. Butler <bjb@mojatatu.com>
>> ---
>>  tools/testing/selftests/tc-testing/.gitignore | 1 +
>>  tools/testing/selftests/tc-testing/tdc.py     | 4 ++--
>>  2 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/tools/testing/selftests/tc-testing/.gitignore b/tools/testing/selftests/tc-testing/.gitignore
>> index 7a60b85e148f..d668a0fdea39 100644
>> --- a/tools/testing/selftests/tc-testing/.gitignore
>> +++ b/tools/testing/selftests/tc-testing/.gitignore
>> @@ -1,2 +1,3 @@
>>  __pycache__/
>>  *.pyc
>> +*.py~
>
> Hi Brenda
>
> Isn't this something which can be done once at the top level?

You mean, the very top level?  Yes it can.

If we did that, the .pyc and __pycache__
could be removed from other directories like

Documentation
scripts/gdb/linux
tools/perf

Oops, there is already *~ in the top-level .gitignore.  Sorry about that.

I will make a v2 to remove *.py~.

Thanks.

bjb

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

end of thread, other threads:[~2018-02-23 16:59 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-23 15:51 [PATCH net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-23 15:51 ` [PATCH net-next 1/2] tools: tc-testing: whitespace and .gitignore Brenda J. Butler
2018-02-23 16:13   ` Andrew Lunn
2018-02-23 16:59     ` Brenda Butler
2018-02-23 15:51 ` [PATCH net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.