Index: scripts/slave/unittests/expect_tests/pipeline.py |
diff --git a/scripts/slave/unittests/expect_tests/pipeline.py b/scripts/slave/unittests/expect_tests/pipeline.py |
index fff0b3d792d7b941a5c5b4b804057adf57271d9f..9f23d3427bb64bd273304277308c276a851acb06 100644 |
--- a/scripts/slave/unittests/expect_tests/pipeline.py |
+++ b/scripts/slave/unittests/expect_tests/pipeline.py |
@@ -16,6 +16,8 @@ from .type_definitions import ( |
Test, UnknownError, TestError, NoMatchingTestsError, MultiTest, |
Result, ResultStageAbort) |
+from . import util |
+ |
class ResetableStringIO(object): |
def __init__(self): |
@@ -60,7 +62,13 @@ def gen_loop_process(gen, test_queue, result_queue, opts, kill_switch, |
paths_seen = set() |
seen_tests = False |
try: |
- for root_test in gen(): |
+ with cover_ctx: |
+ gen_inst = gen() |
+ |
+ while not kill_switch.is_set(): |
+ with cover_ctx: |
+ root_test = next(gen_inst) |
+ |
if kill_switch.is_set(): |
break |
@@ -95,6 +103,8 @@ def gen_loop_process(gen, test_queue, result_queue, opts, kill_switch, |
if not seen_tests: |
result_queue.put_nowait(NoMatchingTestsError()) |
+ except StopIteration: |
+ pass |
except KeyboardInterrupt: |
pass |
finally: |
@@ -103,9 +113,8 @@ def gen_loop_process(gen, test_queue, result_queue, opts, kill_switch, |
next_stage = (result_queue if opts.handler.SKIP_RUNLOOP else test_queue) |
- with cover_ctx: |
- opts.handler.gen_stage_loop(opts, generate_tests(), next_stage.put_nowait, |
- result_queue.put_nowait) |
+ opts.handler.gen_stage_loop(opts, generate_tests(), next_stage.put_nowait, |
+ result_queue.put_nowait) |
def run_loop_process(test_queue, result_queue, opts, kill_switch, cover_ctx): |
@@ -113,6 +122,7 @@ def run_loop_process(test_queue, result_queue, opts, kill_switch, cover_ctx): |
into opts.run_stage_loop(). |
Generates coverage data as a side-effect. |
+ |
@type test_queue: multiprocessing.Queue() |
@type result_queue: multiprocessing.Queue() |
@type opts: argparse.Namespace |
@@ -130,7 +140,8 @@ def run_loop_process(test_queue, result_queue, opts, kill_switch, cover_ctx): |
SKIP = object() |
def process_test(subtest): |
logstream.reset() |
- subresult = subtest.run() |
+ with cover_ctx(include=subtest.coverage_includes()): |
+ subresult = subtest.run() |
if isinstance(subresult, TestError): |
result_queue.put_nowait(subresult) |
return SKIP |
@@ -163,9 +174,8 @@ def run_loop_process(test_queue, result_queue, opts, kill_switch, cover_ctx): |
except KeyboardInterrupt: |
pass |
- with cover_ctx: |
- opts.handler.run_stage_loop(opts, generate_tests_results(), |
- result_queue.put_nowait) |
+ opts.handler.run_stage_loop(opts, generate_tests_results(), |
+ result_queue.put_nowait) |
def result_loop(test_gen, cover_ctx, opts): |
@@ -181,8 +191,12 @@ def result_loop(test_gen, cover_ctx, opts): |
test_queue = multiprocessing.Queue() |
result_queue = multiprocessing.Queue() |
+ gen_cover_ctx = cover_ctx |
+ if cover_ctx.enabled: |
+ gen_cover_ctx = cover_ctx(include=util.get_cover_list(test_gen)) |
+ |
test_gen_args = ( |
- test_gen, test_queue, result_queue, opts, kill_switch, cover_ctx) |
+ test_gen, test_queue, result_queue, opts, kill_switch, gen_cover_ctx) |
procs = [] |
if opts.handler.SKIP_RUNLOOP: |