From 9eaf084d7a551511e33f15c49575c0fd26a7e64b Mon Sep 17 00:00:00 2001 From: Havard Graff Date: Fri, 18 Oct 2019 17:43:36 +0200 Subject: [PATCH] test/check: split out rtptimerqueue-tests in a separate file --- tests/check/elements/rtpjitterbuffer.c | 303 ---------------------- tests/check/elements/rtptimerqueue.c | 332 +++++++++++++++++++++++++ tests/check/meson.build | 10 +- 3 files changed, 337 insertions(+), 308 deletions(-) create mode 100644 tests/check/elements/rtptimerqueue.c diff --git a/tests/check/elements/rtpjitterbuffer.c b/tests/check/elements/rtpjitterbuffer.c index 3741eaca09..68871ac1f8 100644 --- a/tests/check/elements/rtpjitterbuffer.c +++ b/tests/check/elements/rtpjitterbuffer.c @@ -28,12 +28,8 @@ #include #include #include - #include -#include "gst/rtpmanager/gstrtpjitterbuffer.h" -#include "gst/rtpmanager/rtptimerqueue.h" - /* For ease of programming we use globals to keep refs for our floating * src and sink pads we create; otherwise we always have to do get_pad, * get_peer, and then remove references in every test function */ @@ -2773,295 +2769,6 @@ GST_START_TEST (test_dont_drop_packet_based_on_skew) GST_END_TEST; -GST_START_TEST (test_timer_queue_set_timer) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer10, *timer0; - - rtp_timer_queue_set_timer (queue, RTP_TIMER_EXPECTED, 10, 0, - 1 * GST_SECOND, 2 * GST_SECOND, 5 * GST_SECOND, 0); - timer10 = rtp_timer_queue_find (queue, 10); - fail_unless (timer10); - fail_unless_equals_int (10, timer10->seqnum); - fail_unless_equals_int (0, timer10->num); - fail_unless_equals_int (RTP_TIMER_EXPECTED, timer10->type); - /* timer10->timeout = timerout + delay */ - fail_unless_equals_uint64 (3 * GST_SECOND, timer10->timeout); - fail_unless_equals_uint64 (5 * GST_SECOND, timer10->duration); - fail_unless_equals_uint64 (1 * GST_SECOND, timer10->rtx_base); - fail_unless_equals_uint64 (2 * GST_SECOND, timer10->rtx_delay); - fail_unless_equals_uint64 (0, timer10->rtx_retry); - fail_unless_equals_uint64 (GST_CLOCK_TIME_NONE, timer10->rtx_last); - fail_unless_equals_int (0, timer10->num_rtx_retry); - fail_unless_equals_int (0, timer10->num_rtx_received); - - rtp_timer_queue_set_timer (queue, RTP_TIMER_LOST, 0, 10, - 0 * GST_SECOND, 2 * GST_SECOND, 0, 0); - timer0 = rtp_timer_queue_find (queue, 0); - fail_unless (timer0); - fail_unless_equals_int (0, timer0->seqnum); - fail_unless_equals_int (10, timer0->num); - fail_unless_equals_int (RTP_TIMER_LOST, timer0->type); - fail_unless_equals_uint64 (2 * GST_SECOND, timer0->timeout); - fail_unless_equals_uint64 (0, timer0->duration); - fail_unless_equals_uint64 (0, timer0->rtx_base); - fail_unless_equals_uint64 (0, timer0->rtx_delay); - fail_unless_equals_uint64 (0, timer0->rtx_retry); - fail_unless_equals_uint64 (GST_CLOCK_TIME_NONE, timer0->rtx_last); - fail_unless_equals_int (0, timer0->num_rtx_retry); - fail_unless_equals_int (0, timer0->num_rtx_received); - - /* also check order while at it */ - fail_unless (timer10->list.next == NULL); - fail_unless (timer10->list.prev == (GList *) timer0); - fail_unless (timer0->list.next == (GList *) timer10); - fail_unless (timer0->list.prev == NULL); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_insert_head) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer, *next, *prev; - - rtp_timer_queue_set_deadline (queue, 1, -1, 0); - rtp_timer_queue_set_deadline (queue, 3, -1, 0); - rtp_timer_queue_set_deadline (queue, 2, -1, 0); - rtp_timer_queue_set_deadline (queue, 0, -1, 0); - - timer = rtp_timer_queue_find (queue, 0); - fail_if (timer == NULL); - fail_unless_equals_int (0, timer->seqnum); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_unless (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, next->seqnum); - - timer = rtp_timer_queue_find (queue, 3); - fail_if (timer == NULL); - fail_unless_equals_int (3, timer->seqnum); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_unless_equals_int (2, prev->seqnum); - fail_unless (next == NULL); - - timer = rtp_timer_queue_find (queue, 2); - fail_if (timer == NULL); - fail_unless_equals_int (2, timer->seqnum); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, prev->seqnum); - fail_unless_equals_int (3, next->seqnum); - - timer = rtp_timer_queue_find (queue, 1); - fail_if (timer == NULL); - fail_unless_equals_int (1, timer->seqnum); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (0, prev->seqnum); - fail_unless_equals_int (2, next->seqnum); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_reschedule) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer, *next, *prev; - - rtp_timer_queue_set_deadline (queue, 3, 1 * GST_SECOND, 0); - rtp_timer_queue_set_deadline (queue, 1, 2 * GST_SECOND, 0); - rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); - rtp_timer_queue_set_deadline (queue, 0, 4 * GST_SECOND, 0); - - timer = rtp_timer_queue_find (queue, 1); - fail_if (timer == NULL); - - /* move to head, making sure seqnum order is respected */ - rtp_timer_queue_set_deadline (queue, 1, 1 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_unless (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (3, next->seqnum); - - /* move head back */ - rtp_timer_queue_set_deadline (queue, 1, 2 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (3, prev->seqnum); - fail_unless_equals_int (2, next->seqnum); - - /* move to tail */ - timer = rtp_timer_queue_find (queue, 2); - fail_if (timer == NULL); - rtp_timer_queue_set_deadline (queue, 2, 4 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_unless (next == NULL); - fail_unless_equals_int (0, prev->seqnum); - - /* move tail back */ - rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, prev->seqnum); - fail_unless_equals_int (0, next->seqnum); - - /* not moving toward head */ - rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, prev->seqnum); - fail_unless_equals_int (0, next->seqnum); - - /* not moving toward tail */ - rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, prev->seqnum); - fail_unless_equals_int (0, next->seqnum); - - /* inner move toward head */ - rtp_timer_queue_set_deadline (queue, 2, GST_SECOND + GST_SECOND / 2, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (3, prev->seqnum); - fail_unless_equals_int (1, next->seqnum); - - /* inner move toward tail */ - rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); - next = (RtpTimer *) timer->list.next; - prev = (RtpTimer *) timer->list.prev; - fail_if (prev == NULL); - fail_if (next == NULL); - fail_unless_equals_int (1, prev->seqnum); - fail_unless_equals_int (0, next->seqnum); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_pop_until) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer; - - rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); - rtp_timer_queue_set_deadline (queue, 1, 1 * GST_SECOND, 0); - rtp_timer_queue_set_deadline (queue, 0, -1, 0); - - timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); - fail_if (timer == NULL); - fail_unless_equals_int (0, timer->seqnum); - rtp_timer_free (timer); - - timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); - fail_if (timer == NULL); - fail_unless_equals_int (1, timer->seqnum); - rtp_timer_free (timer); - - timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); - fail_unless (timer == NULL); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_update_timer_seqnum) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer; - - rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); - - timer = rtp_timer_queue_find (queue, 2); - fail_if (timer == NULL); - - rtp_timer_queue_update_timer (queue, timer, 3, 3 * GST_SECOND, 0, 0, FALSE); - - timer = rtp_timer_queue_find (queue, 2); - fail_unless (timer == NULL); - timer = rtp_timer_queue_find (queue, 3); - fail_if (timer == NULL); - - fail_unless_equals_int (1, rtp_timer_queue_length (queue)); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_dup_timer) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer; - - rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); - - timer = rtp_timer_queue_find (queue, 2); - fail_if (timer == NULL); - - timer = rtp_timer_dup (timer); - timer->seqnum = 3; - rtp_timer_queue_insert (queue, timer); - - fail_unless_equals_int (2, rtp_timer_queue_length (queue)); - - g_object_unref (queue); -} - -GST_END_TEST; - -GST_START_TEST (test_timer_queue_timer_offset) -{ - RtpTimerQueue *queue = rtp_timer_queue_new (); - RtpTimer *timer; - - rtp_timer_queue_set_timer (queue, RTP_TIMER_EXPECTED, 2, 0, 2 * GST_SECOND, - GST_MSECOND, 0, GST_USECOND); - - timer = rtp_timer_queue_find (queue, 2); - fail_if (timer == NULL); - fail_unless_equals_uint64 (2 * GST_SECOND + GST_MSECOND + GST_USECOND, - timer->timeout); - fail_unless_equals_int64 (GST_USECOND, timer->offset); - - rtp_timer_queue_update_timer (queue, timer, 2, 3 * GST_SECOND, - 2 * GST_MSECOND, 2 * GST_USECOND, FALSE); - fail_unless_equals_uint64 (3 * GST_SECOND + 2 * GST_MSECOND + - 2 * GST_USECOND, timer->timeout); - fail_unless_equals_int64 (2 * GST_USECOND, timer->offset); - - g_object_unref (queue); -} - -GST_END_TEST; - static gboolean check_drop_message (GstMessage * drop_msg, const char *reason_check, guint seqnum_check, guint num_msg) @@ -3406,17 +3113,7 @@ rtpjitterbuffer_suite (void) Suite *s = suite_create ("rtpjitterbuffer"); TCase *tc_chain = tcase_create ("general"); - gst_element_register (NULL, "rtpjitterbuffer", GST_RANK_NONE, - GST_TYPE_RTP_JITTER_BUFFER); - suite_add_tcase (s, tc_chain); - tcase_add_test (tc_chain, test_timer_queue_set_timer); - tcase_add_test (tc_chain, test_timer_queue_insert_head); - tcase_add_test (tc_chain, test_timer_queue_reschedule); - tcase_add_test (tc_chain, test_timer_queue_pop_until); - tcase_add_test (tc_chain, test_timer_queue_update_timer_seqnum); - tcase_add_test (tc_chain, test_timer_queue_dup_timer); - tcase_add_test (tc_chain, test_timer_queue_timer_offset); tcase_add_test (tc_chain, test_push_forward_seq); tcase_add_test (tc_chain, test_push_backward_seq); diff --git a/tests/check/elements/rtptimerqueue.c b/tests/check/elements/rtptimerqueue.c new file mode 100644 index 0000000000..e7ba45f34e --- /dev/null +++ b/tests/check/elements/rtptimerqueue.c @@ -0,0 +1,332 @@ +/* GStreamer + * + * Copyright (C) 2019 Net Insight AB + * Author: Nicolas Dufresne + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + * Boston, MA 02110-1301, USA. + */ + +#include +#include "gst/rtpmanager/rtptimerqueue.h" + +GST_START_TEST (test_timer_queue_set_timer) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer10, *timer0; + + rtp_timer_queue_set_timer (queue, RTP_TIMER_EXPECTED, 10, 0, + 1 * GST_SECOND, 2 * GST_SECOND, 5 * GST_SECOND, 0); + timer10 = rtp_timer_queue_find (queue, 10); + fail_unless (timer10); + fail_unless_equals_int (10, timer10->seqnum); + fail_unless_equals_int (0, timer10->num); + fail_unless_equals_int (RTP_TIMER_EXPECTED, timer10->type); + /* timer10->timeout = timerout + delay */ + fail_unless_equals_uint64 (3 * GST_SECOND, timer10->timeout); + fail_unless_equals_uint64 (5 * GST_SECOND, timer10->duration); + fail_unless_equals_uint64 (1 * GST_SECOND, timer10->rtx_base); + fail_unless_equals_uint64 (2 * GST_SECOND, timer10->rtx_delay); + fail_unless_equals_uint64 (0, timer10->rtx_retry); + fail_unless_equals_uint64 (GST_CLOCK_TIME_NONE, timer10->rtx_last); + fail_unless_equals_int (0, timer10->num_rtx_retry); + fail_unless_equals_int (0, timer10->num_rtx_received); + + rtp_timer_queue_set_timer (queue, RTP_TIMER_LOST, 0, 10, + 0 * GST_SECOND, 2 * GST_SECOND, 0, 0); + timer0 = rtp_timer_queue_find (queue, 0); + fail_unless (timer0); + fail_unless_equals_int (0, timer0->seqnum); + fail_unless_equals_int (10, timer0->num); + fail_unless_equals_int (RTP_TIMER_LOST, timer0->type); + fail_unless_equals_uint64 (2 * GST_SECOND, timer0->timeout); + fail_unless_equals_uint64 (0, timer0->duration); + fail_unless_equals_uint64 (0, timer0->rtx_base); + fail_unless_equals_uint64 (0, timer0->rtx_delay); + fail_unless_equals_uint64 (0, timer0->rtx_retry); + fail_unless_equals_uint64 (GST_CLOCK_TIME_NONE, timer0->rtx_last); + fail_unless_equals_int (0, timer0->num_rtx_retry); + fail_unless_equals_int (0, timer0->num_rtx_received); + + /* also check order while at it */ + fail_unless (timer10->list.next == NULL); + fail_unless (timer10->list.prev == (GList *) timer0); + fail_unless (timer0->list.next == (GList *) timer10); + fail_unless (timer0->list.prev == NULL); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_insert_head) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer, *next, *prev; + + rtp_timer_queue_set_deadline (queue, 1, -1, 0); + rtp_timer_queue_set_deadline (queue, 3, -1, 0); + rtp_timer_queue_set_deadline (queue, 2, -1, 0); + rtp_timer_queue_set_deadline (queue, 0, -1, 0); + + timer = rtp_timer_queue_find (queue, 0); + fail_if (timer == NULL); + fail_unless_equals_int (0, timer->seqnum); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_unless (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, next->seqnum); + + timer = rtp_timer_queue_find (queue, 3); + fail_if (timer == NULL); + fail_unless_equals_int (3, timer->seqnum); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_unless_equals_int (2, prev->seqnum); + fail_unless (next == NULL); + + timer = rtp_timer_queue_find (queue, 2); + fail_if (timer == NULL); + fail_unless_equals_int (2, timer->seqnum); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, prev->seqnum); + fail_unless_equals_int (3, next->seqnum); + + timer = rtp_timer_queue_find (queue, 1); + fail_if (timer == NULL); + fail_unless_equals_int (1, timer->seqnum); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (0, prev->seqnum); + fail_unless_equals_int (2, next->seqnum); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_reschedule) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer, *next, *prev; + + rtp_timer_queue_set_deadline (queue, 3, 1 * GST_SECOND, 0); + rtp_timer_queue_set_deadline (queue, 1, 2 * GST_SECOND, 0); + rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); + rtp_timer_queue_set_deadline (queue, 0, 4 * GST_SECOND, 0); + + timer = rtp_timer_queue_find (queue, 1); + fail_if (timer == NULL); + + /* move to head, making sure seqnum order is respected */ + rtp_timer_queue_set_deadline (queue, 1, 1 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_unless (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (3, next->seqnum); + + /* move head back */ + rtp_timer_queue_set_deadline (queue, 1, 2 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (3, prev->seqnum); + fail_unless_equals_int (2, next->seqnum); + + /* move to tail */ + timer = rtp_timer_queue_find (queue, 2); + fail_if (timer == NULL); + rtp_timer_queue_set_deadline (queue, 2, 4 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_unless (next == NULL); + fail_unless_equals_int (0, prev->seqnum); + + /* move tail back */ + rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, prev->seqnum); + fail_unless_equals_int (0, next->seqnum); + + /* not moving toward head */ + rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, prev->seqnum); + fail_unless_equals_int (0, next->seqnum); + + /* not moving toward tail */ + rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, prev->seqnum); + fail_unless_equals_int (0, next->seqnum); + + /* inner move toward head */ + rtp_timer_queue_set_deadline (queue, 2, GST_SECOND + GST_SECOND / 2, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (3, prev->seqnum); + fail_unless_equals_int (1, next->seqnum); + + /* inner move toward tail */ + rtp_timer_queue_set_deadline (queue, 2, 3 * GST_SECOND, 0); + next = (RtpTimer *) timer->list.next; + prev = (RtpTimer *) timer->list.prev; + fail_if (prev == NULL); + fail_if (next == NULL); + fail_unless_equals_int (1, prev->seqnum); + fail_unless_equals_int (0, next->seqnum); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_pop_until) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer; + + rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); + rtp_timer_queue_set_deadline (queue, 1, 1 * GST_SECOND, 0); + rtp_timer_queue_set_deadline (queue, 0, -1, 0); + + timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); + fail_if (timer == NULL); + fail_unless_equals_int (0, timer->seqnum); + rtp_timer_free (timer); + + timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); + fail_if (timer == NULL); + fail_unless_equals_int (1, timer->seqnum); + rtp_timer_free (timer); + + timer = rtp_timer_queue_pop_until (queue, 1 * GST_SECOND); + fail_unless (timer == NULL); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_update_timer_seqnum) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer; + + rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); + + timer = rtp_timer_queue_find (queue, 2); + fail_if (timer == NULL); + + rtp_timer_queue_update_timer (queue, timer, 3, 3 * GST_SECOND, 0, 0, FALSE); + + timer = rtp_timer_queue_find (queue, 2); + fail_unless (timer == NULL); + timer = rtp_timer_queue_find (queue, 3); + fail_if (timer == NULL); + + fail_unless_equals_int (1, rtp_timer_queue_length (queue)); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_dup_timer) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer; + + rtp_timer_queue_set_deadline (queue, 2, 2 * GST_SECOND, 0); + + timer = rtp_timer_queue_find (queue, 2); + fail_if (timer == NULL); + + timer = rtp_timer_dup (timer); + timer->seqnum = 3; + rtp_timer_queue_insert (queue, timer); + + fail_unless_equals_int (2, rtp_timer_queue_length (queue)); + + g_object_unref (queue); +} + +GST_END_TEST; + +GST_START_TEST (test_timer_queue_timer_offset) +{ + RtpTimerQueue *queue = rtp_timer_queue_new (); + RtpTimer *timer; + + rtp_timer_queue_set_timer (queue, RTP_TIMER_EXPECTED, 2, 0, 2 * GST_SECOND, + GST_MSECOND, 0, GST_USECOND); + + timer = rtp_timer_queue_find (queue, 2); + fail_if (timer == NULL); + fail_unless_equals_uint64 (2 * GST_SECOND + GST_MSECOND + GST_USECOND, + timer->timeout); + fail_unless_equals_int64 (GST_USECOND, timer->offset); + + rtp_timer_queue_update_timer (queue, timer, 2, 3 * GST_SECOND, + 2 * GST_MSECOND, 2 * GST_USECOND, FALSE); + fail_unless_equals_uint64 (3 * GST_SECOND + 2 * GST_MSECOND + + 2 * GST_USECOND, timer->timeout); + fail_unless_equals_int64 (2 * GST_USECOND, timer->offset); + + g_object_unref (queue); +} + +GST_END_TEST; + +static Suite * +rtptimerqueue_suite (void) +{ + Suite *s = suite_create ("rtptimerqueue"); + TCase *tc_chain = tcase_create ("general"); + + suite_add_tcase (s, tc_chain); + tcase_add_test (tc_chain, test_timer_queue_set_timer); + tcase_add_test (tc_chain, test_timer_queue_insert_head); + tcase_add_test (tc_chain, test_timer_queue_reschedule); + tcase_add_test (tc_chain, test_timer_queue_pop_until); + tcase_add_test (tc_chain, test_timer_queue_update_timer_seqnum); + tcase_add_test (tc_chain, test_timer_queue_dup_timer); + tcase_add_test (tc_chain, test_timer_queue_timer_offset); + + return s; +} + +GST_CHECK_MAIN (rtptimerqueue); diff --git a/tests/check/meson.build b/tests/check/meson.build index e51d98a578..318bb05806 100644 --- a/tests/check/meson.build +++ b/tests/check/meson.build @@ -68,11 +68,11 @@ good_tests = [ [ 'elements/rtpbin_buffer_list' ], [ 'elements/rtpcollision' ], [ 'elements/rtpfunnel' ], - [ 'elements/rtpjitterbuffer', false, [gstrtp_dep], - ['../../gst/rtpmanager/gstrtpjitterbuffer.c', - '../../gst/rtpmanager/rtpjitterbuffer.c', - '../../gst/rtpmanager/rtpstats.c', - '../../gst/rtpmanager/rtptimerqueue.c']], + [ 'elements/rtpjitterbuffer' ], + + [ 'elements/rtptimerqueue', false, [gstrtp_dep], + ['../../gst/rtpmanager/rtptimerqueue.c']], + [ 'elements/rtpmux' ], [ 'elements/rtpptdemux' ], [ 'elements/rtprtx' ],