diff options
-rw-r--r-- | meta/lib/oeqa/core/utils/concurrencytest.py | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/meta/lib/oeqa/core/utils/concurrencytest.py b/meta/lib/oeqa/core/utils/concurrencytest.py index e050818f0f..df8d5d0c8d 100644 --- a/meta/lib/oeqa/core/utils/concurrencytest.py +++ b/meta/lib/oeqa/core/utils/concurrencytest.py | |||
@@ -19,6 +19,7 @@ import testtools | |||
19 | import threading | 19 | import threading |
20 | import time | 20 | import time |
21 | import io | 21 | import io |
22 | import subunit | ||
22 | 23 | ||
23 | from queue import Queue | 24 | from queue import Queue |
24 | from itertools import cycle | 25 | from itertools import cycle |
@@ -51,10 +52,11 @@ class BBThreadsafeForwardingResult(ThreadsafeForwardingResult): | |||
51 | def _add_result_with_semaphore(self, method, test, *args, **kwargs): | 52 | def _add_result_with_semaphore(self, method, test, *args, **kwargs): |
52 | self.semaphore.acquire() | 53 | self.semaphore.acquire() |
53 | try: | 54 | try: |
54 | self.result.starttime[test.id()] = self._test_start.timestamp() | 55 | if self._test_start: |
55 | self.result.threadprogress[self.threadnum].append(test.id()) | 56 | self.result.starttime[test.id()] = self._test_start.timestamp() |
56 | totalprogress = sum(len(x) for x in self.result.threadprogress.values()) | 57 | self.result.threadprogress[self.threadnum].append(test.id()) |
57 | self.result.progressinfo[test.id()] = "%s: %s/%s %s/%s (%ss) (%s)" % ( | 58 | totalprogress = sum(len(x) for x in self.result.threadprogress.values()) |
59 | self.result.progressinfo[test.id()] = "%s: %s/%s %s/%s (%ss) (%s)" % ( | ||
58 | self.threadnum, | 60 | self.threadnum, |
59 | len(self.result.threadprogress[self.threadnum]), | 61 | len(self.result.threadprogress[self.threadnum]), |
60 | self.totalinprocess, | 62 | self.totalinprocess, |
@@ -67,6 +69,23 @@ class BBThreadsafeForwardingResult(ThreadsafeForwardingResult): | |||
67 | super(BBThreadsafeForwardingResult, self)._add_result_with_semaphore(method, test, *args, **kwargs) | 69 | super(BBThreadsafeForwardingResult, self)._add_result_with_semaphore(method, test, *args, **kwargs) |
68 | 70 | ||
69 | # | 71 | # |
72 | # We have to patch subunit since it doesn't understand how to handle addError | ||
73 | # outside of a running test case. This can happen if classSetUp() fails | ||
74 | # for a class of tests. This unfortunately has horrible internal knowledge. | ||
75 | # | ||
76 | def outSideTestaddError(self, offset, line): | ||
77 | """An 'error:' directive has been read.""" | ||
78 | test_name = line[offset:-1].decode('utf8') | ||
79 | self.parser._current_test = subunit.RemotedTestCase(test_name) | ||
80 | self.parser.current_test_description = test_name | ||
81 | self.parser._state = self.parser._reading_error_details | ||
82 | self.parser._reading_error_details.set_simple() | ||
83 | self.parser.subunitLineReceived(line) | ||
84 | |||
85 | subunit._OutSideTest.addError = outSideTestaddError | ||
86 | |||
87 | |||
88 | # | ||
70 | # A dummy structure to add to io.StringIO so that the .buffer object | 89 | # A dummy structure to add to io.StringIO so that the .buffer object |
71 | # is available and accepts writes. This allows unittest with buffer=True | 90 | # is available and accepts writes. This allows unittest with buffer=True |
72 | # to interact ok with subunit which wants to access sys.stdout.buffer. | 91 | # to interact ok with subunit which wants to access sys.stdout.buffer. |