From de554ba417c9fef409b985ef7976d3c01b421b4a Mon Sep 17 00:00:00 2001 From: Mathieu Duponchelle Date: Fri, 10 Oct 2014 02:49:54 +0200 Subject: [PATCH] tests: Test reports refcounts. + Set the element monitor on the element as qdata. --- .../validate/gst-validate-element-monitor.c | 8 ++++++ validate/tests/check/validate/padmonitor.c | 25 +++++++++++++++++++ validate/tests/check/validate/test-utils.c | 9 +++++++ validate/tests/check/validate/test-utils.h | 1 + 4 files changed, 43 insertions(+) diff --git a/validate/gst/validate/gst-validate-element-monitor.c b/validate/gst/validate/gst-validate-element-monitor.c index 040524a6ae..34caedda90 100644 --- a/validate/gst/validate/gst-validate-element-monitor.c +++ b/validate/gst/validate/gst-validate-element-monitor.c @@ -161,6 +161,14 @@ gst_validate_element_monitor_do_setup (GstValidateMonitor * monitor) GST_VALIDATE_MONITOR_GET_OBJECT (monitor)); element = GST_VALIDATE_ELEMENT_MONITOR_GET_ELEMENT (monitor); + if (g_object_get_data ((GObject *) element, "validate-monitor")) { + GST_WARNING_OBJECT (elem_monitor, + "Pad already has a validate-monitor associated"); + return FALSE; + } + + g_object_set_data ((GObject *) element, "validate-monitor", elem_monitor); + gst_validate_element_monitor_inspect (elem_monitor); elem_monitor->pad_added_id = g_signal_connect (element, "pad-added", diff --git a/validate/tests/check/validate/padmonitor.c b/validate/tests/check/validate/padmonitor.c index 4a717d18ac..e84074a5d2 100644 --- a/validate/tests/check/validate/padmonitor.c +++ b/validate/tests/check/validate/padmonitor.c @@ -22,6 +22,22 @@ #include #include "test-utils.h" +static void +_check_reports_refcount (GstPad *pad, gint refcount) +{ + GList *tmp, *reports; + GstValidateReporter *reporter = (GstValidateReporter *) g_object_get_data (G_OBJECT (pad), "validate-monitor"); + + reports = gst_validate_reporter_get_reports (reporter); + /* We take a ref here */ + refcount += 1; + + for (tmp = reports; tmp; tmp = tmp->next) + fail_unless_equals_int (((GstValidateReport *) tmp->data)->refcount, refcount); + + g_list_free_full (reports, (GDestroyNotify )gst_validate_report_unref); +} + GST_START_TEST (buffer_before_segment) { GstPad *srcpad; @@ -81,6 +97,7 @@ GST_START_TEST (buffer_before_segment) fail_unless_equals_int (gst_element_set_state (sink, GST_STATE_NULL), GST_STATE_CHANGE_SUCCESS); + _check_reports_refcount (srcpad, 2); gst_object_unref (srcpad); check_destroyed (src, srcpad, NULL); check_destroyed (sink, NULL, NULL); @@ -504,6 +521,14 @@ GST_START_TEST (issue_concatenation) gst_pad_remove_probe (srcpad1, probe_id1); gst_pad_remove_probe (srcpad2, probe_id2); + /* The reporter, the runner */ + _check_reports_refcount (srcpad1, 2); + /* The reporter, the master report */ + _check_reports_refcount (funnel_sink1, 2); + free_element_monitor (src1); + free_element_monitor (src2); + free_element_monitor (funnel); + free_element_monitor (sink); gst_object_unref (srcpad1); gst_object_unref (srcpad2); gst_object_unref (sinkpad); diff --git a/validate/tests/check/validate/test-utils.c b/validate/tests/check/validate/test-utils.c index e07e118f5e..c67f555515 100644 --- a/validate/tests/check/validate/test-utils.c +++ b/validate/tests/check/validate/test-utils.c @@ -213,3 +213,12 @@ GstElement * create_and_monitor_element (const gchar *factoryname, const gchar * return element; } + +void +free_element_monitor (GstElement *element) +{ + GstValidateMonitor *monitor; + monitor = (GstValidateMonitor *) g_object_get_data (G_OBJECT (element), "validate-monitor"); + + g_object_unref (G_OBJECT(monitor)); +} diff --git a/validate/tests/check/validate/test-utils.h b/validate/tests/check/validate/test-utils.h index 3fe5156cfd..ac6a3a7db2 100644 --- a/validate/tests/check/validate/test-utils.h +++ b/validate/tests/check/validate/test-utils.h @@ -32,6 +32,7 @@ GstValidateRunner * setup_runner (GstObject * object); void clean_bus (GstElement *element); GstValidatePadMonitor * get_pad_monitor (GstPad *pad); GstElement * create_and_monitor_element (const gchar *factoryname, const gchar *name, GstValidateRunner *runner); +void free_element_monitor (GstElement *element); typedef struct { GstElement parent;