gstreamer: tee: split the allocation query test

Stefan Sauer ensonic at hora-obscura.de
Tue Oct 3 09:32:29 UTC 2017


On 10/02/2017 07:16 PM, Nicolas Dufresne wrote:
> Le lundi 02 octobre 2017 à 14:41 +0000, Stefan Kost a écrit :
>> Module: gstreamer
>> Branch: master
>> Commit: e364d7944ecbab86dea73c0ee3e639e766938d36
>> URL:    http://cgit.freedesktop.org/gstreamer/gstreamer/commit/?id=e3
>> 64d7944ecbab86dea73c0ee3e639e766938d36
>>
>> Author: Stefan Sauer <ensonic at users.sf.net>
>> Date:   Mon Oct  2 16:25:00 2017 +0200
>>
>> tee: split the allocation query test
>>
>> Split the large allocation_query test into seperate tests. Add a
>> setup helper
>> to reduce code duplication. Fix the original test that used
>> fail_unless instead
>> of ck_assert_int_eq and had it accidentially working.
>>
>> ---
>>
>>  tests/check/elements/tee.c | 110 ++++++++++++++++++++++++++++++++++-
>> ----------
>>  1 file changed, 83 insertions(+), 27 deletions(-)
>>
>> diff --git a/tests/check/elements/tee.c b/tests/check/elements/tee.c
>> index de63c1fd1..3d4e7d6e7 100644
>> --- a/tests/check/elements/tee.c
>> +++ b/tests/check/elements/tee.c
>> @@ -762,44 +762,43 @@ allocation_query_fail (GstPad * pad, GstObject
>> * parent, GstQuery * query)
>>    return FALSE;
>>  }
>>  
>> -GST_START_TEST (test_allocation_query)
>> +static void
>> +add_sink_pad_and_setup_query_func (GstElement * tee,
>> +    GstPadQueryFunction query_func)
>> +{
>> +  GstPad *sink;
>> +  static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE
>> ("sink",
>> +      GST_PAD_SINK,
>> +      GST_PAD_ALWAYS,
>> +      GST_STATIC_CAPS_ANY);
>> +
>> +  sink = gst_check_setup_sink_pad_by_name (tee, &sinktemplate,
>> "src_%u");
>> +  fail_unless (sink != NULL);
>> +  gst_pad_set_query_function (sink, query_func);
>> +}
>> +
>> +GST_START_TEST (test_allocation_query_aggregation)
>>  {
>>    GstElement *tee;
>> -  GstPad *sink1, *sink2, *sink3;
>>    GstPad *sinkpad, *srcpad;
>>    GstCaps *caps;
>>    GstQuery *query;
>>    guint size, min, max;
>>    GstAllocationParams param;
>>  
>> -  static GstStaticPadTemplate sinktemplate = GST_STATIC_PAD_TEMPLATE
>> ("sink",
>> -      GST_PAD_SINK,
>> -      GST_PAD_ALWAYS,
>> -      GST_STATIC_CAPS_ANY);
>> -
>> -  caps = gst_caps_new_empty_simple ("test/test");
>> -
>>    tee = gst_check_setup_element ("tee");
>>    fail_unless (tee);
>>  
>>    sinkpad = gst_element_get_static_pad (tee, "sink");
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query1);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query2);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query3);
>>  
>> -  sink1 = gst_check_setup_sink_pad_by_name (tee, &sinktemplate,
>> "src_%u");
>> -  fail_unless (sink1 != NULL);
>> -  gst_pad_set_query_function (sink1, allocation_query1);
>> -
>> -  sink2 = gst_check_setup_sink_pad_by_name (tee, &sinktemplate,
>> "src_%u");
>> -  fail_unless (sink2 != NULL);
>> -  gst_pad_set_query_function (sink2, allocation_query2);
>> -
>> -  sink3 = gst_check_setup_sink_pad_by_name (tee, &sinktemplate,
>> "src_%u");
>> -  fail_unless (sink3 != NULL);
>> -  gst_pad_set_query_function (sink3, allocation_query3);
>> -
>> +  caps = gst_caps_new_empty_simple ("test/test");
>>    query = gst_query_new_allocation (caps, TRUE);
>>    fail_unless (gst_pad_query (sinkpad, query));
>>  
>> -  fail_unless (gst_query_get_n_allocation_pools (query), 1);
>> +  ck_assert_int_eq (gst_query_get_n_allocation_pools (query), 1);
>>    gst_query_parse_nth_allocation_pool (query, 0, NULL, &size, &min,
>> &max);
>>    fail_unless (size == 130);
>>    /* The tee will allocate one more buffer when multiplexing */
>> @@ -816,18 +815,75 @@ GST_START_TEST (test_allocation_query)
>>    fail_unless (gst_query_parse_nth_allocation_meta (query, 0, NULL)
>> ==
>>        GST_PARENT_BUFFER_META_API_TYPE);
>>  
>> +  /* TODO: what is this testing? move to a new test? */
> That is testing the case were you have unlinked pads in your tee and
> "allow-not-linked" is not set. In this case, query should fail. The
> next one is testing the same, but when "allow-not-linked" is set.

Thanks for explaining. I think this is a great example for why we should
split tests. If the tests only tests one thing it would be easy to give
it an appropriate name.

Stefan

>
>>    srcpad = gst_element_get_request_pad (tee, "src_%u");
>>    gst_query_unref (query);
>>    query = gst_query_new_allocation (caps, TRUE);
>>    fail_if (gst_pad_query (sinkpad, query));
>>  
>> -  g_object_set (tee, "allow-not-linked", TRUE, NULL);
>> +  gst_caps_unref (caps);
>>    gst_query_unref (query);
>> +  gst_check_teardown_pad_by_name (tee, "src_0");
>> +  gst_check_teardown_pad_by_name (tee, "src_1");
>> +  gst_check_teardown_pad_by_name (tee, "src_2");
>> +  gst_element_release_request_pad (tee, srcpad);
>> +  gst_object_unref (srcpad);
>> +  gst_object_unref (sinkpad);
>> +  gst_check_teardown_element (tee);
>> +}
>> +
>> +GST_END_TEST;
>> +
>> +
>> +GST_START_TEST (test_allocation_query_allow_not_linked)
>> +{
>> +  GstElement *tee;
>> +  GstPad *sinkpad;
>> +  GstCaps *caps;
>> +  GstQuery *query;
>> +
>> +  tee = gst_check_setup_element ("tee");
>> +  fail_unless (tee);
>> +  g_object_set (tee, "allow-not-linked", TRUE, NULL);
>> +
>> +  sinkpad = gst_element_get_static_pad (tee, "sink");
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query1);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query2);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query3);
>> +
>> +  caps = gst_caps_new_empty_simple ("test/test");
>>    query = gst_query_new_allocation (caps, TRUE);
>>    fail_unless (gst_pad_query (sinkpad, query));
>>  
>> -  gst_pad_set_query_function (sink3, allocation_query_fail);
>> +  gst_caps_unref (caps);
>>    gst_query_unref (query);
>> +  gst_check_teardown_pad_by_name (tee, "src_0");
>> +  gst_check_teardown_pad_by_name (tee, "src_1");
>> +  gst_check_teardown_pad_by_name (tee, "src_2");
>> +  gst_object_unref (sinkpad);
>> +  gst_check_teardown_element (tee);
>> +}
>> +
>> +GST_END_TEST;
>> +
>> +
>> +GST_START_TEST (test_allocation_query_failure)
>> +{
>> +  GstElement *tee;
>> +  GstPad *sinkpad;
>> +  GstCaps *caps;
>> +  GstQuery *query;
>> +
>> +  tee = gst_check_setup_element ("tee");
>> +  fail_unless (tee);
>> +  g_object_set (tee, "allow-not-linked", TRUE, NULL);
>> +
>> +  sinkpad = gst_element_get_static_pad (tee, "sink");
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query1);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query2);
>> +  add_sink_pad_and_setup_query_func (tee, allocation_query_fail);
>> +
>> +  caps = gst_caps_new_empty_simple ("test/test");
>>    query = gst_query_new_allocation (caps, TRUE);
>>    fail_if (gst_pad_query (sinkpad, query));
>>  
>> @@ -836,8 +892,6 @@ GST_START_TEST (test_allocation_query)
>>    gst_check_teardown_pad_by_name (tee, "src_0");
>>    gst_check_teardown_pad_by_name (tee, "src_1");
>>    gst_check_teardown_pad_by_name (tee, "src_2");
>> -  gst_element_release_request_pad (tee, srcpad);
>> -  gst_object_unref (srcpad);
>>    gst_object_unref (sinkpad);
>>    gst_check_teardown_element (tee);
>>  }
>> @@ -862,7 +916,9 @@ tee_suite (void)
>>    tcase_add_test (tc_chain, test_flow_aggregation);
>>    tcase_add_test (tc_chain, test_request_pads);
>>    tcase_add_test (tc_chain, test_allow_not_linked);
>> -  tcase_add_test (tc_chain, test_allocation_query);
>> +  tcase_add_test (tc_chain, test_allocation_query_aggregation);
>> +  tcase_add_test (tc_chain, test_allocation_query_allow_not_linked);
>> +  tcase_add_test (tc_chain, test_allocation_query_failure);
>>  
>>    return s;
>>  }
>>
>> _______________________________________________
>> gstreamer-commits mailing list
>> gstreamer-commits at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/gstreamer-commits
>>
>>
>> _______________________________________________
>> gstreamer-devel mailing list
>> gstreamer-devel at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/gstreamer-devel


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/gstreamer-devel/attachments/20171003/0c4b306e/attachment-0001.html>


More information about the gstreamer-devel mailing list