MCPcopy Create free account
hub / github.com/ElementsProject/elements / get_next

Method get_next

test/functional/test_runner.py:679–735  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

677 self.use_term_control = use_term_control
678
679 def get_next(self):
680 while self.num_running < self.num_jobs and self.test_list:
681 # Add tests
682 self.num_running += 1
683 test = self.test_list.pop(0)
684 portseed = len(self.test_list)
685 portseed_arg = ["--portseed={}".format(portseed)]
686 log_stdout = tempfile.SpooledTemporaryFile(max_size=2**16)
687 log_stderr = tempfile.SpooledTemporaryFile(max_size=2**16)
688 test_argv = test.split()
689 testdir = "{}/{}_{}".format(self.tmpdir, re.sub(".py$", "", test_argv[0]), portseed)
690 tmpdir_arg = ["--tmpdir={}".format(testdir)]
691 self.jobs.append((test,
692 time.time(),
693 subprocess.Popen([sys.executable, self.tests_dir + test_argv[0]] + test_argv[1:] + self.flags + portseed_arg + tmpdir_arg,
694 universal_newlines=True,
695 stdout=log_stdout,
696 stderr=log_stderr),
697 testdir,
698 log_stdout,
699 log_stderr))
700 if not self.jobs:
701 raise IndexError('pop from empty list')
702
703 # Print remaining running jobs when all jobs have been started.
704 if not self.test_list:
705 print("Remaining jobs: [{}]".format(", ".join(j[0] for j in self.jobs)))
706
707 dot_count = 0
708 while True:
709 # Return all procs that have finished, if any. Otherwise sleep until there is one.
710 time.sleep(.5)
711 ret = []
712 for job in self.jobs:
713 (name, start_time, proc, testdir, log_out, log_err) = job
714 if proc.poll() is not None:
715 log_out.seek(0), log_err.seek(0)
716 [stdout, stderr] = [log_file.read().decode('utf-8') for log_file in (log_out, log_err)]
717 log_out.close(), log_err.close()
718 if proc.returncode == TEST_EXIT_PASSED and stderr == "":
719 status = "Passed"
720 elif proc.returncode == TEST_EXIT_SKIPPED:
721 status = "Skipped"
722 else:
723 status = "Failed"
724 self.num_running -= 1
725 self.jobs.remove(job)
726 if self.use_term_control:
727 clearline = '\r' + (' ' * dot_count) + '\r'
728 print(clearline, end='', flush=True)
729 dot_count = 0
730 ret.append((TestResult(name, status, int(time.time() - start_time)), testdir, stdout, stderr))
731 if ret:
732 return ret
733 if self.use_term_control:
734 print('.', end='', flush=True)
735 dot_count += 1
736

Callers 1

run_testsFunction · 0.95

Calls 8

formatMethod · 0.80
TestResultClass · 0.70
joinMethod · 0.45
seekMethod · 0.45
decodeMethod · 0.45
readMethod · 0.45
closeMethod · 0.45
removeMethod · 0.45

Tested by

no test coverage detected