launcher: Move http serveur and xvfb server to the main test runner object

No good reason for it to be in the main function
This commit is contained in:
Thibault Saunier 2019-01-25 22:09:30 -03:00 committed by Thibault Saunier
parent 3f4f815500
commit 1b3867b82d
2 changed files with 47 additions and 40 deletions

View file

@ -49,6 +49,8 @@ try:
except ImportError:
import xml.etree.cElementTree as ET
from .vfb_server import get_virual_frame_buffer_server
from .httpserver import HTTPServer
from .utils import mkdir, Result, Colors, printc, DEFAULT_TIMEOUT, GST_SECOND, \
Protocols, look_for_file_in_source_dir, get_data_file, BackTraceGenerator, \
check_bugs_resolution
@ -1414,6 +1416,9 @@ class _TestsLauncher(Loggable):
self.jobs = []
self.total_num_tests = 0
self.server = None
self.httpsrv = None
self.vfb_server = None
def _list_app_dirs(self):
app_dirs = []
@ -1589,6 +1594,19 @@ class _TestsLauncher(Loggable):
if not tester.check_expected_failures():
return False
if self.needs_http_server() or options.httponly is True:
self.httpsrv = HTTPServer(options)
self.httpsrv.start()
if options.no_display:
self.vfb_server = get_virual_frame_buffer_server(options)
res = vfb_server.start()
if res[0] is False:
printc("Could not start virtual frame server: %s" % res[1],
Colors.FAIL)
return False
os.environ["DISPLAY"] = vfb_server.display_id
return True
def _check_tester_has_other_testsuite(self, testsuite, tester):
@ -1790,30 +1808,37 @@ class _TestsLauncher(Loggable):
self._stop_server()
def run_tests(self):
self._start_server()
if self.options.forever:
r = 1
while True:
printc("Running iteration %d" % r, title=True)
try:
self._start_server()
if self.options.forever:
r = 1
while True:
printc("Running iteration %d" % r, title=True)
if not self._run_tests():
break
r += 1
self.clean_tests()
if not self._run_tests():
break
r += 1
self.clean_tests()
return False
elif self.options.n_runs:
res = True
for r in range(self.options.n_runs):
t = "Running iteration %d" % r
print("%s\n%s\n%s\n" % ("=" * len(t), t, "=" * len(t)))
if not self._run_tests():
res = False
self.clean_tests()
return False
elif self.options.n_runs:
res = True
for r in range(self.options.n_runs):
t = "Running iteration %d" % r
print("%s\n%s\n%s\n" % ("=" * len(t), t, "=" * len(t)))
if not self._run_tests():
res = False
self.clean_tests()
return res
else:
return self._run_tests()
return res
else:
return self._run_tests()
finally:
if self.httpsrv:
self.httpsrv.stop()
if self.vfb_server:
vfb_server.stop()
self.clean_tests()
def final_report(self):
return self.reporter.final_report()

View file

@ -29,8 +29,6 @@ import subprocess
from .loggable import Loggable
from .httpserver import HTTPServer
from .vfb_server import get_virual_frame_buffer_server
from .baseclasses import _TestsLauncher, ScenarioManager
from .utils import printc, path2url, DEFAULT_MAIN_DIR, launch_command, Colors, Protocols, which
@ -581,22 +579,9 @@ Note that all testsuite should be inside python modules, so the directory should
printc("\nNumber of tests: %d" % len(tests), Colors.OKGREEN)
return 0
httpsrv = HTTPServer(options)
if tests_launcher.needs_http_server() or options.httponly is True:
httpsrv.start()
vfb_server = get_virual_frame_buffer_server(options)
if options.no_display:
res = vfb_server.start()
if res[0] is False:
printc("Could not start virtual frame server: %s" % res[1],
Colors.FAIL)
exit(1)
os.environ["DISPLAY"] = vfb_server.display_id
if options.httponly is True:
print("Running HTTP server only")
return
return 0
# There seems to be some issue with forking, dconf and some gtype
# initialization that deadlocks occasionally, setting the
@ -615,9 +600,6 @@ Note that all testsuite should be inside python modules, so the directory should
res = tests_launcher.final_report()
if options.ignore_numfailures:
res = 0
tests_launcher.clean_tests()
httpsrv.stop()
vfb_server.stop()
if exception is not None:
raise exception