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:
parent
6fee25af9b
commit
dbd8842d51
@ -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:
|
||||||
|
Loading…
Reference in New Issue
Block a user