validate: Add a way to retrieve HTTP server port in .validatetest files

By setting a `$(http_server_port)s` variable in a dedicated config file
and making sure that file can always be imported in `.validatetest`
files.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7700>
This commit is contained in:
Thibault Saunier 2024-02-01 14:33:12 -03:00 committed by GStreamer Marge Bot
parent ea99a670e3
commit 19060b2ce0
3 changed files with 58 additions and 9 deletions

View file

@ -724,17 +724,30 @@ _file_get_structures (GFile * file, gchar ** err,
GList *tmpstructures; GList *tmpstructures;
gchar **include_dirs = NULL; gchar **include_dirs = NULL;
if (!get_include_paths_func if (get_include_paths_func)
&& g_str_has_suffix (location, GST_VALIDATE_SCENARIO_SUFFIX)) { include_dirs = get_include_paths_func (filename);
if (g_str_has_suffix (location, GST_VALIDATE_SCENARIO_SUFFIX)) {
GST_INFO GST_INFO
("Trying to include a scenario, take into account scenario include dir"); ("Trying to include a scenario, take into account scenario include dir");
get_include_paths_func = (GstValidateGetIncludePathsFunc) gchar **extra_includes =
gst_validate_scenario_get_include_paths; gst_validate_scenario_get_include_paths (filename);
if (extra_includes) {
gint i = 0;
gint existing_len =
include_dirs ? g_strv_length (include_dirs) : 0;
gint extra_len = g_strv_length (extra_includes);
include_dirs =
g_realloc_n (include_dirs, existing_len + extra_len + 1,
sizeof (gchar *));
for (i = 0; extra_includes[i] != NULL; i++) {
include_dirs[existing_len + i] = extra_includes[i];
}
include_dirs[existing_len + i] = NULL;
g_free (extra_includes);
}
} }
if (get_include_paths_func)
include_dirs = get_include_paths_func (filename);
if (!include_dirs) { if (!include_dirs) {
GFile *dir = g_file_get_parent (file); GFile *dir = g_file_get_parent (file);

View file

@ -587,6 +587,31 @@ gst_validate_get_test_file_scenario (GList ** structs,
return TRUE; return TRUE;
} }
static gchar **
validate_test_include_paths (const gchar * includer_file)
{
gchar **env_configdir;
gchar *configs_path = g_strdup (g_getenv ("GST_VALIDATE_TEST_CONFIG_PATH"));
if (includer_file) {
gchar *relative_dir = g_path_get_dirname (includer_file);
gchar *tmp_configs_path = configs_path ?
g_strdup_printf ("%s" G_SEARCHPATH_SEPARATOR_S "%s", configs_path,
relative_dir) : g_strdup (relative_dir);
g_free (relative_dir);
g_free (configs_path);
configs_path = tmp_configs_path;
}
env_configdir =
configs_path ? g_strsplit (configs_path, G_SEARCHPATH_SEPARATOR_S,
0) : NULL;
g_free (configs_path);
return env_configdir;
}
/* Only the first monitor pipeline will be used */ /* Only the first monitor pipeline will be used */
GstStructure * GstStructure *
gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks) gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks)
@ -603,8 +628,8 @@ gst_validate_setup_test_file (const gchar * testfile, gboolean use_fakesinks)
gst_validate_set_globals (NULL); gst_validate_set_globals (NULL);
gst_validate_structure_set_variables_from_struct_file (NULL, global_testfile); gst_validate_structure_set_variables_from_struct_file (NULL, global_testfile);
testfile_structs = testfile_structs =
gst_validate_utils_structs_parse_from_filename (global_testfile, NULL, gst_validate_utils_structs_parse_from_filename (global_testfile,
NULL); validate_test_include_paths, NULL);
if (!testfile_structs) if (!testfile_structs)
gst_validate_abort ("Could not load test file: %s", global_testfile); gst_validate_abort ("Could not load test file: %s", global_testfile);

View file

@ -43,6 +43,7 @@ import shutil
import uuid import uuid
from itertools import cycle from itertools import cycle
from fractions import Fraction from fractions import Fraction
from pathlib import Path
from .utils import GstCaps, which from .utils import GstCaps, which
from . import reporters from . import reporters
@ -1031,6 +1032,12 @@ class GstValidateTest(Test):
subproc_env['GST_XINITTHREADS'] = '1' subproc_env['GST_XINITTHREADS'] = '1'
self.add_env_variable('GST_XINITTHREADS', '1') self.add_env_variable('GST_XINITTHREADS', '1')
vaildateconfigs_path = os.environ.get('GST_VALIDATE_TEST_CONFIG_PATH', "")
extra_configs = os.path.join(self.options.logsdir, "_validate_test_extra_configs")
vaildateconfigs_path = f"{extra_configs}{os.pathsep}{vaildateconfigs_path}"
subproc_env['GST_VALIDATE_TEST_CONFIG_PATH'] = vaildateconfigs_path
self.add_env_variable('GST_VALIDATE_TEST_CONFIG_PATH', vaildateconfigs_path)
if self.scenario is not None: if self.scenario is not None:
scenario = self.scenario.get_execution_name() scenario = self.scenario.get_execution_name()
subproc_env["GST_VALIDATE_SCENARIO"] = scenario subproc_env["GST_VALIDATE_SCENARIO"] = scenario
@ -2023,6 +2030,10 @@ class _TestsLauncher(Loggable):
if self.needs_http_server() or options.httponly is True: if self.needs_http_server() or options.httponly is True:
self.httpsrv = HTTPServer(options) self.httpsrv = HTTPServer(options)
self.httpsrv.start() self.httpsrv.start()
configsdir = Path(options.logsdir) / "_validate_test_extra_configs"
os.makedirs(configsdir, exist_ok=True)
with open(configsdir / "http_server_port.var", "w") as f:
f.write(f"set-globals,http_server_port={self.options.http_server_port}")
if options.no_display: if options.no_display:
self.vfb_server = get_virual_frame_buffer_server(options) self.vfb_server = get_virual_frame_buffer_server(options)