Skip to content

Commit 6a409f3

Browse files
authored
Improve ptf_runner exception and timeout handling (#4586)
The failures seen in ptf (tests started by ptf_runner) are difficult to examine. Make it easier by bringing out the exceptions and print the traceback message. Also, make the exeception handling generic in the ptf_runner. Earlier in the PR #4532 similar try-catch was added only for advanced_reboot cases.
1 parent 3736eb6 commit 6a409f3

File tree

2 files changed

+33
-26
lines changed

2 files changed

+33
-26
lines changed

tests/common/fixtures/advanced_reboot.py

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
from tests.common.reboot import reboot as rebootDut
1212
from tests.common.helpers.sad_path import SadOperation
1313
from tests.ptf_runner import ptf_runner
14+
from tests.common.helpers.assertions import pytest_assert
1415

1516
logger = logging.getLogger(__name__)
1617

@@ -424,25 +425,25 @@ def runRebootTest(self):
424425
# Run advanced-reboot.ReloadTest for item in preboot/inboot list
425426
count = 0
426427
result = True
427-
final_result = True
428+
failed_list = list()
428429
for rebootOper in self.rebootData['sadList']:
429430
count += 1
430431
try:
431432
self.__setupRebootOper(rebootOper)
432433
result = self.__runPtfRunner(rebootOper)
433434
self.__verifyRebootOper(rebootOper)
434435
except Exception:
435-
result = False
436+
failed_list.append(rebootOper)
436437
finally:
437438
# always capture the test logs
438439
self.__fetchTestLogs(rebootOper)
439440
self.__clearArpAndFdbTables()
440441
self.__revertRebootOper(rebootOper)
441-
if not result:
442-
final_result = False
443442
if len(self.rebootData['sadList']) > 1 and count != len(self.rebootData['sadList']):
444443
time.sleep(TIME_BETWEEN_SUCCESSIVE_TEST_OPER)
445-
return final_result
444+
pytest_assert(len(failed_list) == 0,\
445+
"Advanced-reboot failure. Failed cases: {}".format(failed_list))
446+
return result
446447

447448
def runRebootTestcase(self, prebootList=None, inbootList=None, prebootFiles=None):
448449
'''
@@ -536,23 +537,18 @@ def __runPtfRunner(self, rebootOper=None):
536537
self.__updateAndRestartArpResponder(rebootOper)
537538

538539
logger.info('Run advanced-reboot ReloadTest on the PTF host')
539-
try:
540-
result = ptf_runner(
541-
self.ptfhost,
542-
"ptftests",
543-
"advanced-reboot.ReloadTest",
544-
qlen=PTFRUNNER_QLEN,
545-
platform_dir="ptftests",
546-
platform="remote",
547-
params=params,
548-
log_file=u'/tmp/advanced-reboot.ReloadTest.log',
549-
module_ignore_errors=self.moduleIgnoreErrors,
550-
timeout=REBOOT_CASE_TIMEOUT
551-
)
552-
except Exception as err:
553-
logger.error("Timed out after {}s of executing advance reboot case: {}.".format(
554-
REBOOT_CASE_TIMEOUT, str(rebootOper)) + ". Error message: {}".format(err.message))
555-
raise Exception
540+
result = ptf_runner(
541+
self.ptfhost,
542+
"ptftests",
543+
"advanced-reboot.ReloadTest",
544+
qlen=PTFRUNNER_QLEN,
545+
platform_dir="ptftests",
546+
platform="remote",
547+
params=params,
548+
log_file=u'/tmp/advanced-reboot.ReloadTest.log',
549+
module_ignore_errors=self.moduleIgnoreErrors,
550+
timeout=REBOOT_CASE_TIMEOUT
551+
)
556552

557553
return result
558554

tests/ptf_runner.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,9 @@
11
import pipes
2+
import traceback
3+
import logging
4+
5+
logger = logging.getLogger(__name__)
6+
27

38
def ptf_runner(host, testdir, testname, platform_dir=None, params={},
49
platform="remote", qlen=0, relax=True, debug_level="info",
@@ -38,8 +43,14 @@ def ptf_runner(host, testdir, testname, platform_dir=None, params={},
3843
if timeout:
3944
cmd += " --test-case-timeout {}".format(int(timeout))
4045

41-
result = host.shell(cmd, chdir="/root", module_ignore_errors=module_ignore_errors)
42-
if module_ignore_errors:
43-
if result["rc"] != 0:
44-
return result
46+
try:
47+
result = host.shell(cmd, chdir="/root", module_ignore_errors=module_ignore_errors)
48+
if module_ignore_errors:
49+
if result["rc"] != 0:
50+
return result
51+
except Exception:
52+
traceback_msg = traceback.format_exc()
53+
logger.error("Exception caught while executing case: {}. Error message: {}"\
54+
.format(testname, traceback_msg))
55+
raise Exception
4556
return True

0 commit comments

Comments
 (0)