summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.com>2021-03-29 19:47:21 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2021-04-12 17:55:07 -0400
commit913d308e228582a6c8591a8887678d4217d784b7 (patch)
tree4fbf35cc89ed55475a93a89610f577f80df1cdc8
parent7f29486ba4b02c6e58550620796c4ec722efdb2d (diff)
webrtcbin test: Add test for various cases where get_request_pad is meant to fail
This should ensure that the recently added code works. Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2104>
-rw-r--r--tests/check/elements/webrtcbin.c93
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/check/elements/webrtcbin.c b/tests/check/elements/webrtcbin.c
index 376ad3a20..cde1252b9 100644
--- a/tests/check/elements/webrtcbin.c
+++ b/tests/check/elements/webrtcbin.c
@@ -3364,6 +3364,98 @@ GST_START_TEST (test_bundle_codec_preferences_rtx_no_duplicate_payloads)
GST_END_TEST;
+GST_START_TEST (test_reject_request_pad)
+{
+ struct test_webrtc *t = test_webrtc_new ();
+ GstWebRTCRTPTransceiverDirection direction;
+ GstWebRTCRTPTransceiver *trans, *trans2;
+ guint offer_media_format_count[] = { 1, };
+ guint answer_media_format_count[] = { 1, };
+ VAL_SDP_INIT (payloads, on_sdp_media_no_duplicate_payloads, NULL, NULL);
+ VAL_SDP_INIT (offer_media_formats, on_sdp_media_count_formats,
+ offer_media_format_count, &payloads);
+ VAL_SDP_INIT (answer_media_formats, on_sdp_media_count_formats,
+ answer_media_format_count, &payloads);
+ const gchar *expected_offer_setup[] = { "actpass", };
+ VAL_SDP_INIT (offer_setup, on_sdp_media_setup, expected_offer_setup,
+ &offer_media_formats);
+ const gchar *expected_answer_setup[] = { "active", };
+ VAL_SDP_INIT (answer_setup, on_sdp_media_setup, expected_answer_setup,
+ &answer_media_formats);
+ const gchar *expected_offer_direction[] = { "recvonly", };
+ VAL_SDP_INIT (offer, on_sdp_media_direction, expected_offer_direction,
+ &offer_setup);
+ const gchar *expected_answer_direction[] = { "sendonly", };
+ VAL_SDP_INIT (answer, on_sdp_media_direction, expected_answer_direction,
+ &answer_setup);
+ GstCaps *caps;
+ GstHarness *h;
+ GstPad *pad;
+ GstPadTemplate *templ;
+
+ t->on_negotiation_needed = NULL;
+ t->on_ice_candidate = NULL;
+ t->on_pad_added = _pad_added_fakesink;
+
+ gst_util_set_object_arg (G_OBJECT (t->webrtc1), "bundle-policy",
+ "max-bundle");
+ gst_util_set_object_arg (G_OBJECT (t->webrtc2), "bundle-policy",
+ "max-bundle");
+
+ /* setup recvonly transceiver */
+ caps = gst_caps_from_string (VP8_RTP_CAPS (96));
+ direction = GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_RECVONLY;
+ g_signal_emit_by_name (t->webrtc1, "add-transceiver", direction, caps,
+ &trans);
+ gst_caps_unref (caps);
+ fail_unless (trans != NULL);
+
+ h = gst_harness_new_with_element (t->webrtc2, "sink_0", NULL);
+ add_fake_video_src_harness (h, 96);
+ t->harnesses = g_list_prepend (t->harnesses, h);
+
+ test_validate_sdp (t, &offer, &answer);
+
+ /* This should fail because the direction is wrong */
+ pad = gst_element_get_request_pad (t->webrtc1, "sink_0");
+ fail_unless (pad == NULL);
+
+ g_object_set (trans, "direction",
+ GST_WEBRTC_RTP_TRANSCEIVER_DIRECTION_SENDRECV, NULL);
+
+ templ = gst_element_get_pad_template (t->webrtc1, "sink_%u");
+ fail_unless (templ != NULL);
+
+ /* This should fail because the caps are wrong */
+ caps = gst_caps_from_string (OPUS_RTP_CAPS (96));
+ pad = gst_element_request_pad (t->webrtc1, templ, "sink_0", caps);
+ fail_unless (pad == NULL);
+
+ gst_caps_unref (trans->codec_preferences);
+ trans->codec_preferences = NULL;
+
+ /* This should fail because the kind doesn't match */
+ pad = gst_element_request_pad (t->webrtc1, templ, "sink_0", caps);
+ fail_unless (pad == NULL);
+ gst_caps_unref (caps);
+
+ /* This should succeed and give us sink_0 */
+ pad = gst_element_get_request_pad (t->webrtc1, "sink_0");
+ fail_unless (pad != NULL);
+
+ g_object_get (pad, "transceiver", &trans2, NULL);
+
+ fail_unless (trans == trans2);
+
+ gst_object_unref (pad);
+ gst_object_unref (trans);
+ gst_object_unref (trans2);
+
+ test_webrtc_free (t);
+}
+
+GST_END_TEST;
+
static Suite *
webrtcbin_suite (void)
{
@@ -3407,6 +3499,7 @@ webrtcbin_suite (void)
tcase_add_test (tc, test_renego_lose_media_fails);
tcase_add_test (tc,
test_bundle_codec_preferences_rtx_no_duplicate_payloads);
+ tcase_add_test (tc, test_reject_request_pad);
if (sctpenc && sctpdec) {
tcase_add_test (tc, test_data_channel_create);
tcase_add_test (tc, test_data_channel_remote_notify);