Changeset View
Changeset View
Standalone View
Standalone View
test/functional/test_runner.py
Show First 20 Lines • Show All 124 Lines • ▼ Show 20 Lines | def __init__(self, test_num, test_case, tests_dir, | ||||
tmpdir, failfast_event, flags=None): | tmpdir, failfast_event, flags=None): | ||||
self.tests_dir = tests_dir | self.tests_dir = tests_dir | ||||
self.tmpdir = tmpdir | self.tmpdir = tmpdir | ||||
self.test_case = test_case | self.test_case = test_case | ||||
self.test_num = test_num | self.test_num = test_num | ||||
self.failfast_event = failfast_event | self.failfast_event = failfast_event | ||||
self.flags = flags | self.flags = flags | ||||
def run(self, portseed_offset): | def run(self): | ||||
if self.failfast_event.is_set(): | if self.failfast_event.is_set(): | ||||
return TestResult(self.test_num, self.test_case, | return TestResult(self.test_num, self.test_case, | ||||
"", "Skipped", 0, "", "") | "", "Skipped", 0, "", "") | ||||
portseed = self.test_num + portseed_offset | portseed = self.test_num | ||||
portseed_arg = ["--portseed={}".format(portseed)] | portseed_arg = ["--portseed={}".format(portseed)] | ||||
log_stdout = tempfile.SpooledTemporaryFile(max_size=2**16) | log_stdout = tempfile.SpooledTemporaryFile(max_size=2**16) | ||||
log_stderr = tempfile.SpooledTemporaryFile(max_size=2**16) | log_stderr = tempfile.SpooledTemporaryFile(max_size=2**16) | ||||
test_argv = self.test_case.split() | test_argv = self.test_case.split() | ||||
testdir = os.path.join("{}", "{}_{}").format( | testdir = os.path.join("{}", "{}_{}").format( | ||||
self.tmpdir, re.sub(".py$", "", test_argv[0]), portseed) | self.tmpdir, re.sub(".py$", "", test_argv[0]), portseed) | ||||
tmpdir_arg = ["--tmpdir={}".format(testdir)] | tmpdir_arg = ["--tmpdir={}".format(testdir)] | ||||
start_time = time.time() | start_time = time.time() | ||||
▲ Show 20 Lines • Show All 295 Lines • ▼ Show 20 Lines | |||||
def execute_test_processes( | def execute_test_processes( | ||||
num_jobs, test_list, tests_dir, tmpdir, flags, failfast=False): | num_jobs, test_list, tests_dir, tmpdir, flags, failfast=False): | ||||
update_queue = Queue() | update_queue = Queue() | ||||
job_queue = Queue() | job_queue = Queue() | ||||
failfast_event = threading.Event() | failfast_event = threading.Event() | ||||
test_results = [] | test_results = [] | ||||
poll_timeout = 10 # seconds | poll_timeout = 10 # seconds | ||||
# In case there is a graveyard of zombie bitcoinds, we can apply a | |||||
# pseudorandom offset to hopefully jump over them. | |||||
# (625 is PORT_RANGE/MAX_NODES) | |||||
portseed_offset = int(time.time() * 1000) % 625 | |||||
## | ## | ||||
# Define some helper functions we will need for threading. | # Define some helper functions we will need for threading. | ||||
## | ## | ||||
def handle_message(message, running_jobs): | def handle_message(message, running_jobs): | ||||
""" | """ | ||||
handle_message handles a single message from handle_test_cases | handle_message handles a single message from handle_test_cases | ||||
▲ Show 20 Lines • Show All 68 Lines • ▼ Show 20 Lines | def handle_test_cases(): | ||||
""" | """ | ||||
while True: | while True: | ||||
test = job_queue.get() | test = job_queue.get() | ||||
if test is None: | if test is None: | ||||
break | break | ||||
# Signal that the test is starting to inform the poor waiting | # Signal that the test is starting to inform the poor waiting | ||||
# programmer | # programmer | ||||
update_queue.put(test) | update_queue.put(test) | ||||
result = test.run(portseed_offset) | result = test.run() | ||||
update_queue.put(result) | update_queue.put(result) | ||||
job_queue.task_done() | job_queue.task_done() | ||||
## | ## | ||||
# Setup our threads, and start sending tasks | # Setup our threads, and start sending tasks | ||||
## | ## | ||||
# Start our result collection thread. | # Start our result collection thread. | ||||
▲ Show 20 Lines • Show All 354 Lines • Show Last 20 Lines |