mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-09-03 02:33:53 +00:00
validate:launcher: Handle launching launching a sub launcher
If you use validate-launcher in a meson testsuite, those test now gets integrated as one unique testsuite (with a pretty long namespace).
This commit is contained in:
parent
6665652cff
commit
9b69bcad08
3 changed files with 45 additions and 5 deletions
|
@ -19,6 +19,7 @@
|
||||||
import argparse
|
import argparse
|
||||||
import json
|
import json
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
import re
|
import re
|
||||||
import pickle
|
import pickle
|
||||||
import platform
|
import platform
|
||||||
|
@ -30,6 +31,7 @@ import concurrent.futures as conc
|
||||||
|
|
||||||
from launcher import config
|
from launcher import config
|
||||||
from launcher.utils import printc, Colors
|
from launcher.utils import printc, Colors
|
||||||
|
from launcher.main import setup_launcher_from_args
|
||||||
|
|
||||||
|
|
||||||
class MesonTest(Test):
|
class MesonTest(Test):
|
||||||
|
@ -166,12 +168,35 @@ class MesonTestsManager(TestsManager):
|
||||||
|
|
||||||
mesontests = self.get_meson_tests()
|
mesontests = self.get_meson_tests()
|
||||||
for test in mesontests:
|
for test in mesontests:
|
||||||
self.add_test(MesonTest(self.get_test_name(test),
|
if not self.setup_tests_from_sublauncher(test):
|
||||||
self.options, self.reporter, test))
|
self.add_test(MesonTest(self.get_test_name(test),
|
||||||
|
self.options, self.reporter, test))
|
||||||
|
|
||||||
self._registered = True
|
self._registered = True
|
||||||
return self.tests
|
return self.tests
|
||||||
|
|
||||||
|
def setup_tests_from_sublauncher(self, test):
|
||||||
|
cmd = test['cmd']
|
||||||
|
binary = cmd[0]
|
||||||
|
sublauncher_tests = set()
|
||||||
|
if binary != sys.argv[0]:
|
||||||
|
return sublauncher_tests
|
||||||
|
|
||||||
|
res, _, tests_launcher = setup_launcher_from_args(cmd[1:], main_options=self.options)
|
||||||
|
if res is False:
|
||||||
|
return sublauncher_tests
|
||||||
|
|
||||||
|
for sublauncher_test in tests_launcher.list_tests():
|
||||||
|
name = self.get_test_name(test)
|
||||||
|
sublauncher_tests.add(name)
|
||||||
|
|
||||||
|
sublauncher_test.generator = None
|
||||||
|
sublauncher_test.options = self.options
|
||||||
|
sublauncher_test.classname = name + '.' + sublauncher_test.classname
|
||||||
|
self.add_test(sublauncher_test)
|
||||||
|
|
||||||
|
return sublauncher_tests
|
||||||
|
|
||||||
|
|
||||||
class GstCheckTestsManager(MesonTestsManager):
|
class GstCheckTestsManager(MesonTestsManager):
|
||||||
name = "check"
|
name = "check"
|
||||||
|
@ -268,7 +293,12 @@ class GstCheckTestsManager(MesonTestsManager):
|
||||||
self.load_tests_info()
|
self.load_tests_info()
|
||||||
mesontests = self.get_meson_tests()
|
mesontests = self.get_meson_tests()
|
||||||
to_inspect = []
|
to_inspect = []
|
||||||
|
all_sublaunchers_tests = set()
|
||||||
for test in mesontests:
|
for test in mesontests:
|
||||||
|
sublauncher_tests = self.setup_tests_from_sublauncher(test)
|
||||||
|
if sublauncher_tests:
|
||||||
|
all_sublaunchers_tests |= sublauncher_tests
|
||||||
|
continue
|
||||||
binary = test['cmd'][0]
|
binary = test['cmd'][0]
|
||||||
test_info = self.check_binary_ts(binary)
|
test_info = self.check_binary_ts(binary)
|
||||||
if test_info is True:
|
if test_info is True:
|
||||||
|
@ -296,9 +326,11 @@ class GstCheckTestsManager(MesonTestsManager):
|
||||||
e.result()
|
e.result()
|
||||||
|
|
||||||
for test in mesontests:
|
for test in mesontests:
|
||||||
|
name = self.get_test_name(test)
|
||||||
|
if name in all_sublaunchers_tests:
|
||||||
|
continue
|
||||||
gst_tests = self.tests_info[test['cmd'][0]][1]
|
gst_tests = self.tests_info[test['cmd'][0]][1]
|
||||||
if not gst_tests:
|
if not gst_tests:
|
||||||
name = self.get_test_name(test)
|
|
||||||
child_env = self.get_child_env(name)
|
child_env = self.get_child_env(name)
|
||||||
self.add_test(MesonTest(name, self.options, self.reporter, test,
|
self.add_test(MesonTest(name, self.options, self.reporter, test,
|
||||||
child_env))
|
child_env))
|
||||||
|
|
|
@ -592,6 +592,7 @@ class GstValidateTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
|
||||||
|
|
||||||
|
|
||||||
class GstValidateListener(socketserver.BaseRequestHandler):
|
class GstValidateListener(socketserver.BaseRequestHandler):
|
||||||
|
|
||||||
def handle(self):
|
def handle(self):
|
||||||
"""Implements BaseRequestHandler handle method"""
|
"""Implements BaseRequestHandler handle method"""
|
||||||
test = None
|
test = None
|
||||||
|
@ -1518,6 +1519,7 @@ class _TestsLauncher(Loggable):
|
||||||
tester.name not in wanted_test_manager:
|
tester.name not in wanted_test_manager:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
prev_testsuite_name = TestsManager.loading_testsuite
|
||||||
if self.options.user_paths:
|
if self.options.user_paths:
|
||||||
TestsManager.loading_testsuite = tester.name
|
TestsManager.loading_testsuite = tester.name
|
||||||
tester.register_defaults()
|
tester.register_defaults()
|
||||||
|
@ -1526,7 +1528,8 @@ class _TestsLauncher(Loggable):
|
||||||
TestsManager.loading_testsuite = testsuite.__name__
|
TestsManager.loading_testsuite = testsuite.__name__
|
||||||
if testsuite.setup_tests(tester, self.options):
|
if testsuite.setup_tests(tester, self.options):
|
||||||
loaded = True
|
loaded = True
|
||||||
TestsManager.loading_testsuite = None
|
if prev_testsuite_name:
|
||||||
|
TestsManager.loading_testsuite = prev_testsuite_name
|
||||||
|
|
||||||
if not loaded:
|
if not loaded:
|
||||||
printc("Could not load testsuite: %s"
|
printc("Could not load testsuite: %s"
|
||||||
|
|
|
@ -540,7 +540,7 @@ class LauncherConfig(Loggable):
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
|
|
||||||
def setup_launcher_from_args(args):
|
def setup_launcher_from_args(args, main_options=None):
|
||||||
loggable.init("GST_VALIDATE_LAUNCHER_DEBUG", True, False)
|
loggable.init("GST_VALIDATE_LAUNCHER_DEBUG", True, False)
|
||||||
parser = LauncherConfig.create_parser()
|
parser = LauncherConfig.create_parser()
|
||||||
tests_launcher = _TestsLauncher()
|
tests_launcher = _TestsLauncher()
|
||||||
|
@ -555,6 +555,11 @@ def setup_launcher_from_args(args):
|
||||||
|
|
||||||
options = LauncherConfig()
|
options = LauncherConfig()
|
||||||
parser.parse_args(args=args, namespace=options)
|
parser.parse_args(args=args, namespace=options)
|
||||||
|
if main_options:
|
||||||
|
# Override output directories and logging properties of the sub launcher.
|
||||||
|
for option in ["main_dir", "output_dir", "logsdir", "dest", "clone_dir",
|
||||||
|
"redirect_logs", "verbose"]:
|
||||||
|
setattr(options, option, getattr(main_options, option))
|
||||||
if not options.cleanup():
|
if not options.cleanup():
|
||||||
return False, None, None
|
return False, None, None
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue