def acquire(self): pass
def release(self): pass
-def create_run(tests, lit_config, workers, progress_callback, max_time):
+def create_run(tests, lit_config, workers, progress_callback, timeout=None):
# TODO(yln) assert workers > 0
if workers == 1:
- return SerialRun(tests, lit_config, progress_callback, max_time)
- return ParallelRun(tests, lit_config, progress_callback, max_time, workers)
+ return SerialRun(tests, lit_config, progress_callback, timeout)
+ return ParallelRun(tests, lit_config, progress_callback, timeout, workers)
class Run(object):
"""A concrete, configured testing run."""
- def __init__(self, tests, lit_config, progress_callback, max_time):
+ def __init__(self, tests, lit_config, progress_callback, timeout):
self.tests = tests
self.lit_config = lit_config
self.progress_callback = progress_callback
- self.max_time = max_time
+ self.timeout = timeout
def execute(self):
"""
The progress_callback will be invoked for each completed test.
- If max_time is non-None, it should be a time in seconds after which to
+ If timeout is non-None, it should be a time in seconds after which to
stop executing tests.
Returns the elapsed testing time.
self.failure_count = 0
self.hit_max_failures = False
+ one_year = 365 * 24 * 60 * 60 # days * hours * minutes * seconds
+ timeout = self.timeout or one_year
+
start = time.time()
- self._execute()
+ deadline = start + timeout
+ self._execute(deadline)
end = time.time()
# Mark any tests that weren't run as UNRESOLVED.
self.hit_max_failures = True
class SerialRun(Run):
- def __init__(self, tests, lit_config, progress_callback, max_time):
- super(SerialRun, self).__init__(tests, lit_config, progress_callback, max_time)
+ def __init__(self, tests, lit_config, progress_callback, timeout):
+ super(SerialRun, self).__init__(tests, lit_config, progress_callback, timeout)
- def _execute(self):
- # TODO(yln): ignores max_time
+ def _execute(self, deadline):
+ # TODO(yln): ignores deadline
for test_index, test in enumerate(self.tests):
lit.worker._execute_test(test, self.lit_config)
self._consume_test_result((test_index, test))
break
class ParallelRun(Run):
- def __init__(self, tests, lit_config, progress_callback, max_time, workers):
- super(ParallelRun, self).__init__(tests, lit_config, progress_callback, max_time)
+ def __init__(self, tests, lit_config, progress_callback, timeout, workers):
+ super(ParallelRun, self).__init__(tests, lit_config, progress_callback, timeout)
self.workers = workers
- def _execute(self):
- one_year = 365 * 24 * 60 * 60 # days * hours * minutes * seconds
- max_time = self.max_time or one_year
- deadline = time.time() + max_time
-
+ def _execute(self, deadline):
semaphores = {
k: NopSemaphore() if v is None else
multiprocessing.BoundedSemaphore(v) for k, v in