launcher: Move http serveur and xvfb server to the main test runner object
authorThibault Saunier <tsaunier@igalia.com>
Sat, 26 Jan 2019 01:09:30 +0000 (22:09 -0300)
committerThibault Saunier <tsaunier@gnome.org>
Sat, 26 Jan 2019 15:54:00 +0000 (15:54 +0000)
No good reason for it to be in the main function

validate/launcher/baseclasses.py
validate/launcher/main.py

index 26a20b2..69f3718 100644 (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 res
-        else:
-            return self._run_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()
+        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()
index 8d3b084..c1c097b 100644 (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