validate: Add support for setting a report level for an issue type

Until now we could set report levels to the monitor, this adds support
for setting report level for the issue types too.
This commit is contained in:
Thibault Saunier 2016-09-21 12:26:17 -03:00
parent 80cc6f29ef
commit 64560aea32
2 changed files with 29 additions and 8 deletions

View file

@ -503,13 +503,19 @@ gst_validate_runner_get_reporting_level_for_name (GstValidateRunner * runner,
const gchar * name)
{
GList *tmp;
gchar *fixed_name = g_strdup (name);
_replace_double_colons (fixed_name);
for (tmp = runner->priv->report_pattern_levels; tmp; tmp = tmp->next) {
PatternLevel *pattern_level = (PatternLevel *) tmp->data;
if (g_pattern_match_string (pattern_level->pattern, name))
if (g_pattern_match_string (pattern_level->pattern, fixed_name)) {
g_free (fixed_name);
return pattern_level->level;
}
}
g_free (fixed_name);
return GST_VALIDATE_SHOW_UNKNOWN;
}
@ -535,14 +541,22 @@ void
gst_validate_runner_add_report (GstValidateRunner * runner,
GstValidateReport * report)
{
GstValidateReportingDetails reporter_level =
gst_validate_reporter_get_reporting_level (report->reporter);
GstValidateReportingDetails details, reporter_details, issue_type_details;
gst_validate_send (json_boxed_serialize (GST_MINI_OBJECT_TYPE (report),
report));
details = reporter_details =
gst_validate_reporter_get_reporting_level (report->reporter);
issue_type_details =
gst_validate_runner_get_reporting_level_for_name (runner,
g_quark_to_string (report->issue->issue_id));
if (reporter_details == GST_VALIDATE_SHOW_UNKNOWN)
details = issue_type_details;
/* Let's use our own reporting strategy */
if (reporter_level == GST_VALIDATE_SHOW_UNKNOWN) {
if (details == GST_VALIDATE_SHOW_UNKNOWN) {
gst_validate_report_set_reporting_level (report,
runner->priv->default_level);
switch (runner->priv->default_level) {
@ -560,6 +574,9 @@ gst_validate_runner_add_report (GstValidateRunner * runner,
default:
break;
}
} else if (details == GST_VALIDATE_SHOW_NONE) {
GST_DEBUG ("Not reporting.");
return;
}
GST_VALIDATE_RUNNER_LOCK (runner);

View file

@ -206,10 +206,11 @@ _create_issues (GstValidateRunner * runner)
gst_object_unref (sinkpad);
gst_object_unref (funnel_sink1);
gst_object_unref (funnel_sink2);
check_destroyed (fakemixer, funnel_sink1, funnel_sink2, NULL);
check_destroyed (src1, srcpad1, NULL);
check_destroyed (src2, srcpad2, NULL);
check_destroyed (sink, sinkpad, NULL);
gst_check_objects_destroyed_on_unref (fakemixer, funnel_sink1, funnel_sink2,
NULL);
gst_check_objects_destroyed_on_unref (src1, srcpad1, NULL);
gst_check_objects_destroyed_on_unref (src2, srcpad2, NULL);
gst_check_objects_destroyed_on_unref (sink, sinkpad, NULL);
}
#define TEST_LEVELS(name, details, num_issues) \
@ -245,6 +246,8 @@ TEST_LEVELS
/* 2 issues repeated on the fakesink's sink */
TEST_LEVELS (none_fakesink_all, "none,fakesink*:all", 2);
TEST_LEVELS (issue_type, "event::flush-stop-unexpected:none", 0);
#undef TEST_LEVELS
static Suite *
@ -271,6 +274,7 @@ gst_validate_suite (void)
tcase_add_test (tc_chain,
test_global_level_synthetic_fakesrc1_subchain_fakesrc2_subchain_fakemixer_src_monitor);
tcase_add_test (tc_chain, test_global_level_none_fakesink_all);
tcase_add_test (tc_chain, test_global_level_issue_type);
return s;
}