validate: Allow overidding issue severity from configs

Refactoring sensibly to allow getting configs outside the `core` namespace
and outside plugin names.

The `GST_VALIDATE_OVERRIDE` env variable should probably be removed
all together at some point.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-devtools/-/merge_requests/185>
This commit is contained in:
Thibault Saunier 2020-04-28 23:06:24 -04:00
parent 0e85d15da0
commit ec2a139246
4 changed files with 64 additions and 29 deletions

View file

@ -27,7 +27,7 @@ See [GstValidateVerbosityFlags](GstValidateVerbosityFlags) for possible values.
The [action type](gst-validate-action-types.md) to execute, the action type
must be a CONFIG action or the action type must have a `as-config` argument. When the `action`
is specified in a parametter, a validate action is executed using the other parametters of the
is specified in a parameter, a validate action is executed using the other parameters of the
config as configuration for the validate scenario action.
#### Example:
@ -72,7 +72,7 @@ Defaults variables are:
- `$(CONFIG_DIR)`: The directory the running scenario is in.
- `$(CONFIG_NAME)`: The name of the config file
- `$(LOGSDIR)`: The directory where to place log files. This uses the
`GST_VALIDATE_LOGSDIR` environment variable if avalaible or `$(TMPDIR)` if
`GST_VALIDATE_LOGSDIR` environment variable if available or `$(TMPDIR)` if
the variables hasn't been set. (Note that the
[gst-validate-launcher](gst-validate-launcher.md) set the environment
variables).
@ -88,4 +88,19 @@ It is also possible to set global variables (also usable from
``` yaml
set-globals, TESTSUITE_ROOT_DIR=$(CONFIG_DIR)
```
```
## `change-issue-severity` settings parameters
You can change issues severity with the `change-issue-severity` configuration
with the following parameters:
* `issue-id`: The GQuark name of the issue, for example: `event::segment-has-wrong-start`,
You can use `gst-validate-1.0 --print-issue-types` to list all issue types.
* `new-severity`: The new [`severity`](GstValidateReportLevel) of the issue
* `element-name` (*optional*): The name of the element the severity
change applies to
* `element-factory-name` (*optional*): The element factory name of the elements the
severity change applies to
* `element-classification` (*optional*): The classification of the elements the
severity change applies to

View file

@ -62,4 +62,5 @@ G_GNUC_INTERNAL void gst_validate_set_test_file_globals (GstStructure* meta, con
G_GNUC_INTERNAL gboolean gst_validate_get_test_file_scenario (GList** structs, const gchar** scenario_name, gchar** original_name);
G_GNUC_INTERNAL GstValidateScenario* gst_validate_scenario_from_structs (GstValidateRunner* runner, GstElement* pipeline, GList* structures,
gchar* origin_file);
G_GNUC_INTERNAL GList* gst_validate_get_config(const gchar *structname);
#endif

View file

@ -263,39 +263,42 @@ _add_override_from_struct (GstStructure * soverride)
gboolean registered = FALSE;
if (!gst_structure_has_name (soverride, "change-severity")) {
GST_ERROR ("Currently only 'change-severity' overrides are supported");
if (!gst_structure_has_name (soverride, "change-severity")
&& !gst_structure_has_name (soverride, "change-issue-severity")) {
g_error ("Currently only 'change-severity' overrides are supported");
return FALSE;
}
str_issue_id = gst_structure_get_string (soverride, "issue-id");
if (!str_issue_id) {
GST_ERROR ("No issue id provided in override: %" GST_PTR_FORMAT, soverride);
g_error ("No issue id provided in override: %" GST_PTR_FORMAT, soverride);
return FALSE;
}
issue_id = g_quark_from_string (str_issue_id);
if (gst_validate_issue_from_id (issue_id) == NULL) {
GST_ERROR ("No GstValidateIssue registered for %s", str_issue_id);
g_error ("No GstValidateIssue registered for %s", str_issue_id);
return FALSE;
}
str_new_severity = gst_structure_get_string (soverride, "new-severity");
if (str_new_severity == NULL) {
GST_ERROR ("No 'new-severity' field found in %" GST_PTR_FORMAT, soverride);
g_error ("No 'new-severity' field found in %" GST_PTR_FORMAT, soverride);
return FALSE;
}
level = gst_validate_report_level_from_name (str_new_severity);
if (level == GST_VALIDATE_REPORT_LEVEL_UNKNOWN) {
GST_ERROR ("Unknown level name %s", str_new_severity);
g_error ("Unknown level name %s", str_new_severity);
return FALSE;
}
gst_validate_printf (NULL, "**-> Changing issue '%s' severity to: '%s'\n",
str_issue_id, str_new_severity);
override = gst_validate_override_new ();
gst_validate_override_change_severity (override, issue_id, level);
@ -385,6 +388,11 @@ gst_validate_override_registry_preload (void)
GModule *module;
int ret, nloaded = 0;
gpointer ext_create_overrides;
GList *tmp, *overrides = gst_validate_get_config ("change-issue-severity");
for (tmp = overrides; tmp; tmp = tmp->next)
_add_override_from_struct (tmp->data);
g_list_free_full (overrides, (GDestroyNotify) gst_structure_free);
sos = g_getenv ("GST_VALIDATE_OVERRIDE");
if (!sos) {

View file

@ -287,11 +287,8 @@ gst_validate_get_testfile_configs (const gchar * suffix)
GList *
gst_validate_plugin_get_config (GstPlugin * plugin)
{
GList *plugin_conf = NULL;
const gchar *suffix;
const gchar *config;
GStrv tmp;
guint i;
GList *plugin_conf = NULL;
if (plugin) {
if ((plugin_conf =
@ -306,22 +303,7 @@ gst_validate_plugin_get_config (GstPlugin * plugin)
suffix = "core";
}
plugin_conf = gst_validate_get_testfile_configs (suffix);
config = g_getenv ("GST_VALIDATE_CONFIG");
if (!config) {
return plugin_conf;
}
tmp = g_strsplit (config, G_SEARCHPATH_SEPARATOR_S, -1);
for (i = 0; tmp[i] != NULL; i++) {
GList *l;
l = create_config (tmp[i], suffix);
if (l)
plugin_conf = g_list_concat (plugin_conf, l);
}
g_strfreev (tmp);
plugin_conf = gst_validate_get_config (suffix);
if (plugin)
g_object_set_data_full (G_OBJECT (plugin), GST_VALIDATE_PLUGIN_CONFIG,
plugin_conf, _free_plugin_config);
@ -331,6 +313,35 @@ gst_validate_plugin_get_config (GstPlugin * plugin)
return plugin_conf;
}
GList *
gst_validate_get_config (const gchar * structname)
{
const gchar *config;
GStrv tmp;
guint i;
GList *configs;
configs = gst_validate_get_testfile_configs (structname);
config = g_getenv ("GST_VALIDATE_CONFIG");
if (!config) {
return configs;
}
tmp = g_strsplit (config, G_SEARCHPATH_SEPARATOR_S, -1);
for (i = 0; tmp[i] != NULL; i++) {
GList *l;
l = create_config (tmp[i], structname);
if (l)
configs = g_list_concat (configs, l);
}
g_strfreev (tmp);
return configs;
}
static void
gst_validate_init_plugins (void)
{