tests: Test reports refcounts.
authorMathieu Duponchelle <mathieu.duponchelle@collabora.com>
Fri, 10 Oct 2014 00:49:54 +0000 (02:49 +0200)
committerMathieu Duponchelle <mathieu.duponchelle@opencreed.com>
Tue, 21 Oct 2014 18:13:51 +0000 (20:13 +0200)
+ Set the element monitor on the element as qdata.

validate/gst/validate/gst-validate-element-monitor.c
validate/tests/check/validate/padmonitor.c
validate/tests/check/validate/test-utils.c
validate/tests/check/validate/test-utils.h

index 040524a6ae4df6efbfc25215afadc5cfcd8efddd..34caedda909fa2de49829ca014e9f62a79a06ccf 100644 (file)
@@ -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",
index 4a717d18acb2037a1384132bc88f2e740dbb0b09..e84074a5d2ab38c031e28402714ea1236a04a32d 100644 (file)
 #include <gst/check/gstcheck.h>
 #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);
index e07e118f5e4371485782777d40195d05b0daf9c2..c67f555515793f5f221f2e8a2deeaca55f9db4e7 100644 (file)
@@ -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));
+}
index 3fe5156cfd3455c21919ac77bb9c79c873db8062..ac6a3a7db20ddede5103db041ffcc73b46707e56 100644 (file)
@@ -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;