tests: more rtpbin checks
authorWim Taymans <wim.taymans@collabora.co.uk>
Fri, 22 May 2009 13:37:29 +0000 (15:37 +0200)
committerTim-Philipp Müller <tim.muller@collabora.co.uk>
Tue, 11 Aug 2009 01:30:44 +0000 (02:30 +0100)
tests/check/elements/rtpbin.c

index d14d316..60ebd7a 100644 (file)
@@ -27,58 +27,73 @@ GST_START_TEST (test_cleanup_send)
   GstElement *rtpbin;
   GstPad *rtp_sink, *rtp_src, *rtcp_src;
   GObject *session;
+  gint count = 2;
 
   rtpbin = gst_element_factory_make ("gstrtpbin", "rtpbin");
 
-  /* request session 0 */
-  rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
-  fail_unless (rtp_sink != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 2);
-
-  /* this static pad should be created automatically now */
-  rtp_src = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
-  fail_unless (rtp_src != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 2);
-
-  /* we should be able to get an internal session 0 now */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session != NULL);
-  g_object_unref (session);
-
-  /* get the send RTCP pad too */
-  rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
-  fail_unless (rtcp_src != NULL);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 2);
-
-  gst_element_release_request_pad (rtpbin, rtp_sink);
-  /* we should only have our refs to the pads now */
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 2);
-
-  /* the other pad should be gone now */
-  fail_unless (gst_element_get_static_pad (rtpbin, "send_rtp_src_0") == NULL);
-
-  /* internal session should still be there */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session != NULL);
-  g_object_unref (session);
-
-  /* release the RTCP pad */
-  gst_element_release_request_pad (rtpbin, rtcp_src);
-  /* we should only have our refs to the pads now */
-  ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
-  ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
-  ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 1);
-
-  /* the session should be gone now */
-  g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
-  fail_unless (session == NULL);
-
-  /* unref the request pad and the static pad */
-  gst_object_unref (rtp_sink);
-  gst_object_unref (rtp_src);
-  gst_object_unref (rtcp_src);
+  while (count--) {
+    /* request session 0 */
+    rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
+    fail_unless (rtp_sink != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 2);
+
+    /* request again */
+    rtp_sink = gst_element_get_request_pad (rtpbin, "send_rtp_sink_0");
+    fail_unless (rtp_sink != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 3);
+    gst_object_unref (rtp_sink);
+
+    /* this static pad should be created automatically now */
+    rtp_src = gst_element_get_static_pad (rtpbin, "send_rtp_src_0");
+    fail_unless (rtp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 2);
+
+    /* we should be able to get an internal session 0 now */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session != NULL);
+    g_object_unref (session);
+
+    /* get the send RTCP pad too */
+    rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
+    fail_unless (rtcp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 2);
+
+    /* second time */
+    rtcp_src = gst_element_get_request_pad (rtpbin, "send_rtcp_src_0");
+    fail_unless (rtcp_src != NULL);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtcp_src", 3);
+    gst_object_unref (rtcp_src);
+
+    gst_element_release_request_pad (rtpbin, rtp_sink);
+    /* we should only have our refs to the pads now */
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 2);
+
+    /* the other pad should be gone now */
+    fail_unless (gst_element_get_static_pad (rtpbin, "send_rtp_src_0") == NULL);
+
+    /* internal session should still be there */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session != NULL);
+    g_object_unref (session);
+
+    /* release the RTCP pad */
+    gst_element_release_request_pad (rtpbin, rtcp_src);
+    /* we should only have our refs to the pads now */
+    ASSERT_OBJECT_REFCOUNT (rtp_sink, "rtp_sink", 1);
+    ASSERT_OBJECT_REFCOUNT (rtp_src, "rtp_src", 1);
+    ASSERT_OBJECT_REFCOUNT (rtcp_src, "rtp_src", 1);
+
+    /* the session should be gone now */
+    g_signal_emit_by_name (rtpbin, "get-internal-session", 0, &session);
+    fail_unless (session == NULL);
+
+    /* unref the request pad and the static pad */
+    gst_object_unref (rtp_sink);
+    gst_object_unref (rtp_src);
+    gst_object_unref (rtcp_src);
+  }
 
   gst_object_unref (rtpbin);
 }