3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-11-29 05:39:24 +01:00

test-runner: fix test skipping

Tests that called skipTest would result in an exception which would
hault execution as it was uncaught. In addition this wouldn't result
in an skipped test.

Now the actual test run is surrounded in a try/except block, skipped
exceptions are handled specifically, and a stack trace is printed if
some other exception occurs.
This commit is contained in:
James Prestwood 2021-08-13 14:49:25 -07:00 committed by Denis Kenzior
parent 6fee25af9b
commit dbd8842d51

View File

@ -13,9 +13,11 @@ import time
import unittest import unittest
import importlib import importlib
import signal import signal
from unittest.result import TestResult
import pyroute2 import pyroute2
import multiprocessing import multiprocessing
import re import re
import traceback
from configparser import ConfigParser from configparser import ConfigParser
from prettytable import PrettyTable from prettytable import PrettyTable
@ -1152,12 +1154,17 @@ def start_test(ctx, subtests, rqueue):
# #
file = file.strip('()').split('.')[0] + '.py' file = file.strip('()').split('.')[0] + '.py'
# Create an empty result here in case the test fails
result = TestResult()
try:
# Set up class only on first test # Set up class only on first test
if index == 0: if index == 0:
dbg(file) dbg("%s\n\t%s RUNNING" % (file, str(func)), end='')
t.setUpClass() t.setUpClass()
else:
dbg("\t%s RUNNING" % str(func), end='') dbg("\t%s RUNNING" % str(func), end='')
sys.__stdout__.flush() sys.__stdout__.flush()
# Run test (setUp/tearDown run automatically) # Run test (setUp/tearDown run automatically)
@ -1166,20 +1173,25 @@ def start_test(ctx, subtests, rqueue):
# Tear down class only on last test # Tear down class only on last test
if index == len(tlist) - 1: if index == len(tlist) - 1:
t.tearDownClass() t.tearDownClass()
except unittest.SkipTest as e:
result.skipped.append(t)
except Exception as e:
dbg('\n%s threw an uncaught exception:' % func)
traceback.print_exc(file=sys.__stdout__)
run += result.testsRun run += result.testsRun
errors += len(result.errors) errors += len(result.errors)
failures += len(result.failures) failures += len(result.failures)
skipped += len(result.skipped) skipped += len(result.skipped)
if len(result.errors) > 0 or len(result.failures) > 0: if len(result.skipped) > 0:
dbg(colored(" SKIPPED", "cyan"))
elif run == 0 or len(result.errors) > 0 or len(result.failures) > 0:
dbg(colored(" FAILED", "red")) dbg(colored(" FAILED", "red"))
for e in result.errors: for e in result.errors:
dbg(e[1]) dbg(e[1])
for f in result.failures: for f in result.failures:
dbg(f[1]) dbg(f[1])
elif len(result.skipped) > 0:
dbg(colored(" SKIPPED", "cyan"))
else: else:
dbg(colored(" PASSED", "green")) dbg(colored(" PASSED", "green"))
@ -1392,8 +1404,8 @@ def run_auto_tests(ctx, args):
ctx.results[os.path.basename(test)] = rqueue.get() ctx.results[os.path.basename(test)] = rqueue.get()
except Exception as ex: except Exception as ex:
dbg(ex) dbg("%s threw an uncaught exception" % test)
dbg("Uncaught exception thrown for %s" % test) traceback.print_exc(file=sys.__stdout__)
ctx.results[os.path.basename(test)] = SimpleResult(run=0, failures=0, ctx.results[os.path.basename(test)] = SimpleResult(run=0, failures=0,
errors=0, skipped=0, time=0) errors=0, skipped=0, time=0)
finally: finally: