* [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting
@ 2018-02-23 17:16 Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 1/2] tools: tc-testing: Fix indentation Brenda J. Butler
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Brenda J. Butler @ 2018-02-23 17:16 UTC (permalink / raw)
To: davem
Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, andrew,
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: Fix indentation
tools: tc-testing: better error reporting
tools/testing/selftests/tc-testing/tdc.py | 88 +++++++++++++++++++++++++------
1 file changed, 72 insertions(+), 16 deletions(-)
--
2.15.1
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 net-next 1/2] tools: tc-testing: Fix indentation
2018-02-23 17:16 [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
@ 2018-02-23 17:16 ` Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-26 16:37 ` [PATCH v2 net-next 0/2] " David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Brenda J. Butler @ 2018-02-23 17:16 UTC (permalink / raw)
To: davem
Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, andrew,
netdev, Brenda J. Butler
Signed-off-by: Brenda J. Butler <bjb@mojatatu.com>
---
tools/testing/selftests/tc-testing/tdc.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
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] 4+ messages in thread
* [PATCH v2 net-next 2/2] tools: tc-testing: better error reporting
2018-02-23 17:16 [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 1/2] tools: tc-testing: Fix indentation Brenda J. Butler
@ 2018-02-23 17:16 ` Brenda J. Butler
2018-02-26 16:37 ` [PATCH v2 net-next 0/2] " David Miller
2 siblings, 0 replies; 4+ messages in thread
From: Brenda J. Butler @ 2018-02-23 17:16 UTC (permalink / raw)
To: davem
Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, andrew,
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] 4+ messages in thread
* Re: [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting
2018-02-23 17:16 [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 1/2] tools: tc-testing: Fix indentation Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler
@ 2018-02-26 16:37 ` David Miller
2 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2018-02-26 16:37 UTC (permalink / raw)
To: bjb; +Cc: jhs, xiyou.wangcong, jiri, chrism, lucasb, aring, mrv, andrew,
netdev
From: "Brenda J. Butler" <bjb@mojatatu.com>
Date: Fri, 23 Feb 2018 12:16:36 -0500
> This patch set contains a bit of cleanup and better error reporting,
> esp. in pre- and post-suite, and pre- and post-case commands.
Series applied.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2018-02-26 16:37 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-23 17:16 [PATCH v2 net-next 0/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 1/2] tools: tc-testing: Fix indentation Brenda J. Butler
2018-02-23 17:16 ` [PATCH v2 net-next 2/2] tools: tc-testing: better error reporting Brenda J. Butler
2018-02-26 16:37 ` [PATCH v2 net-next 0/2] " David Miller
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).