1 /* GStreamer unit tests for the RTSP support library
2  * Copyright (C) 2010 Andy Wingo <wingo@oblong.com>
3  * Copyright (C) 2015 Tim-Philipp Müller <tim@centricular.com>
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Library General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * Library General Public License for more details.
14  *
15  * You should have received a copy of the GNU Library General Public
16  * License along with this library; if not, write to the
17  * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
18  * Boston, MA 02110-1301, USA.
19  */
20 
21 #ifdef HAVE_CONFIG_H
22 #include "config.h"
23 #endif
24 
25 #include <gst/check/gstcheck.h>
26 
27 #include <gst/rtsp/rtsp.h>
28 #include <string.h>
29 
GST_START_TEST(test_rtsp_url_basic)30 GST_START_TEST (test_rtsp_url_basic)
31 {
32   GstRTSPUrl *url = NULL;
33   GstRTSPResult res;
34 
35   res = gst_rtsp_url_parse ("rtsp://localhost/foo/bar", &url);
36   fail_unless (res == GST_RTSP_OK);
37   fail_unless (url != NULL);
38   fail_unless (url->transports & GST_RTSP_LOWER_TRANS_TCP);
39   fail_unless (url->transports & GST_RTSP_LOWER_TRANS_UDP);
40   fail_unless (url->transports & GST_RTSP_LOWER_TRANS_UDP_MCAST);
41   fail_unless (url->family == GST_RTSP_FAM_INET);
42   fail_unless (!url->user);
43   fail_unless (!url->passwd);
44   fail_unless (!strcmp (url->host, "localhost"));
45   /* fail_unless (url->port == GST_RTSP_DEFAULT_PORT); */
46   fail_unless (!strcmp (url->abspath, "/foo/bar"));
47   fail_unless (!url->query);
48 
49   gst_rtsp_url_free (url);
50 }
51 
52 GST_END_TEST;
53 
GST_START_TEST(test_rtsp_url_components_1)54 GST_START_TEST (test_rtsp_url_components_1)
55 {
56   GstRTSPUrl *url = NULL;
57   GstRTSPResult res;
58   gchar **comps = NULL;
59 
60   res = gst_rtsp_url_parse ("rtsp://localhost/foo/bar", &url);
61   fail_unless (res == GST_RTSP_OK);
62   fail_unless (url != NULL);
63 
64   comps = gst_rtsp_url_decode_path_components (url);
65   fail_unless (comps != NULL);
66   fail_unless (g_strv_length (comps) == 3);
67   fail_unless (!strcmp (comps[0], ""));
68   fail_unless (!strcmp (comps[1], "foo"));
69   fail_unless (!strcmp (comps[2], "bar"));
70 
71   g_strfreev (comps);
72   gst_rtsp_url_free (url);
73 }
74 
75 GST_END_TEST;
76 
GST_START_TEST(test_rtsp_url_components_2)77 GST_START_TEST (test_rtsp_url_components_2)
78 {
79   GstRTSPUrl *url = NULL;
80   GstRTSPResult res;
81   gchar **comps = NULL;
82 
83   res = gst_rtsp_url_parse ("rtsp://localhost/foo%2Fbar/qux%20baz", &url);
84   fail_unless (res == GST_RTSP_OK);
85   fail_unless (url != NULL);
86 
87   comps = gst_rtsp_url_decode_path_components (url);
88   fail_unless (comps != NULL);
89   fail_unless (g_strv_length (comps) == 3);
90   fail_unless (!strcmp (comps[0], ""));
91   fail_unless (!strcmp (comps[1], "foo/bar"));
92   fail_unless (!strcmp (comps[2], "qux baz"));
93 
94   g_strfreev (comps);
95   gst_rtsp_url_free (url);
96 }
97 
98 GST_END_TEST;
99 
GST_START_TEST(test_rtsp_url_components_3)100 GST_START_TEST (test_rtsp_url_components_3)
101 {
102   GstRTSPUrl *url = NULL;
103   GstRTSPResult res;
104   gchar **comps = NULL;
105 
106   res = gst_rtsp_url_parse ("rtsp://localhost/foo%00bar/qux%20baz", &url);
107   fail_unless (res == GST_RTSP_OK);
108   fail_unless (url != NULL);
109 
110   comps = gst_rtsp_url_decode_path_components (url);
111   fail_unless (comps != NULL);
112   fail_unless (g_strv_length (comps) == 3);
113   fail_unless (!strcmp (comps[0], ""));
114   fail_unless (!strcmp (comps[1], "foo%00bar"));
115   fail_unless (!strcmp (comps[2], "qux baz"));
116 
117   g_strfreev (comps);
118   gst_rtsp_url_free (url);
119 }
120 
121 GST_END_TEST;
122 
GST_START_TEST(test_rtsp_range_npt)123 GST_START_TEST (test_rtsp_range_npt)
124 {
125   GstRTSPTimeRange *range;
126   GstClockTime min, max;
127   gchar *str;
128 
129   fail_unless (gst_rtsp_range_parse ("npt=", &range) == GST_RTSP_EINVAL);
130   fail_unless (gst_rtsp_range_parse ("npt=0", &range) == GST_RTSP_EINVAL);
131   fail_unless (gst_rtsp_range_parse ("npt=-", &range) == GST_RTSP_EINVAL);
132   fail_unless (gst_rtsp_range_parse ("npt=now", &range) == GST_RTSP_EINVAL);
133 
134   fail_unless (gst_rtsp_range_parse ("npt=-now", &range) == GST_RTSP_OK);
135   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
136   fail_unless (range->min.type == GST_RTSP_TIME_END);
137   fail_unless (range->max.type == GST_RTSP_TIME_NOW);
138   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
139   fail_unless (min == GST_CLOCK_TIME_NONE);
140   fail_unless (max == GST_CLOCK_TIME_NONE);
141   str = gst_rtsp_range_to_string (range);
142   fail_unless_equals_string ("npt=-now", str);
143   GST_DEBUG ("%s", str);
144   g_free (str);
145   gst_rtsp_range_free (range);
146 
147   fail_unless (gst_rtsp_range_parse ("npt=now-now", &range) == GST_RTSP_OK);
148   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
149   fail_unless (range->min.type == GST_RTSP_TIME_NOW);
150   fail_unless (range->max.type == GST_RTSP_TIME_NOW);
151   str = gst_rtsp_range_to_string (range);
152   fail_unless_equals_string ("npt=now-now", str);
153   GST_DEBUG ("%s", str);
154   g_free (str);
155   gst_rtsp_range_free (range);
156 
157   fail_unless (gst_rtsp_range_parse ("npt=now-", &range) == GST_RTSP_OK);
158   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
159   fail_unless (range->min.type == GST_RTSP_TIME_NOW);
160   fail_unless (range->max.type == GST_RTSP_TIME_END);
161   str = gst_rtsp_range_to_string (range);
162   fail_unless_equals_string ("npt=now-", str);
163   GST_DEBUG ("%s", str);
164   g_free (str);
165   gst_rtsp_range_free (range);
166 
167   fail_unless (gst_rtsp_range_parse ("npt=now-34.12", &range) == GST_RTSP_OK);
168   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
169   fail_unless (range->min.type == GST_RTSP_TIME_NOW);
170   fail_unless (range->max.type == GST_RTSP_TIME_SECONDS);
171   fail_unless (range->max.seconds == 34.12);
172   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
173   fail_unless (min == GST_CLOCK_TIME_NONE);
174   fail_unless (max == 34120000000);
175   str = gst_rtsp_range_to_string (range);
176   fail_unless_equals_string ("npt=now-34.12", str);
177   GST_DEBUG ("%s", str);
178   g_free (str);
179   gst_rtsp_range_free (range);
180 
181   fail_unless (gst_rtsp_range_parse ("npt=23,89-now", &range) == GST_RTSP_OK);
182   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
183   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
184   fail_unless (range->min.seconds == 23.89);
185   fail_unless (range->max.type == GST_RTSP_TIME_NOW);
186   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
187   fail_unless (min == 23890000000);
188   fail_unless (max == GST_CLOCK_TIME_NONE);
189   str = gst_rtsp_range_to_string (range);
190   fail_unless_equals_string ("npt=23.89-now", str);
191   GST_DEBUG ("%s", str);
192   g_free (str);
193   gst_rtsp_range_free (range);
194 
195   fail_unless (gst_rtsp_range_parse ("npt=-12.09", &range) == GST_RTSP_OK);
196   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
197   fail_unless (range->min.type == GST_RTSP_TIME_END);
198   fail_unless (range->max.type == GST_RTSP_TIME_SECONDS);
199   fail_unless (range->max.seconds == 12.09);
200   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
201   fail_unless (min == GST_CLOCK_TIME_NONE);
202   fail_unless (max == 12090000000);
203   str = gst_rtsp_range_to_string (range);
204   fail_unless_equals_string ("npt=-12.09", str);
205   GST_DEBUG ("%s", str);
206   g_free (str);
207   gst_rtsp_range_free (range);
208 
209   fail_unless (gst_rtsp_range_parse ("npt=0-", &range) == GST_RTSP_OK);
210   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
211   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
212   fail_unless (range->min.seconds == 0.0);
213   fail_unless (range->max.type == GST_RTSP_TIME_END);
214   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
215   fail_unless (min == 0);
216   fail_unless (max == GST_CLOCK_TIME_NONE);
217   str = gst_rtsp_range_to_string (range);
218   fail_unless_equals_string ("npt=0-", str);
219   GST_DEBUG ("%s", str);
220   g_free (str);
221   gst_rtsp_range_free (range);
222 
223 
224   fail_unless (gst_rtsp_range_parse ("npt=1.123-", &range) == GST_RTSP_OK);
225   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
226   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
227   fail_unless (range->min.seconds == 1.123);
228   fail_unless (range->max.type == GST_RTSP_TIME_END);
229   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
230   fail_unless (min == 1123000000);
231   fail_unless (max == GST_CLOCK_TIME_NONE);
232   str = gst_rtsp_range_to_string (range);
233   fail_unless_equals_string ("npt=1.123-", str);
234   GST_DEBUG ("%s", str);
235   g_free (str);
236   gst_rtsp_range_free (range);
237 
238   fail_unless (gst_rtsp_range_parse ("npt=10,20-20.10", &range) == GST_RTSP_OK);
239   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
240   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
241   fail_unless (range->min.seconds == 10.20);
242   fail_unless (range->max.type == GST_RTSP_TIME_SECONDS);
243   fail_unless (range->max.seconds == 20.10);
244   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
245   fail_unless (min == 10200000000);
246   fail_unless (max == 20100000000);
247   str = gst_rtsp_range_to_string (range);
248   fail_unless_equals_string ("npt=10.2-20.1", str);
249   GST_DEBUG ("%s", str);
250   g_free (str);
251   gst_rtsp_range_free (range);
252 
253   fail_unless (gst_rtsp_range_parse ("npt=500-15.001", &range) == GST_RTSP_OK);
254   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
255   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
256   fail_unless (range->min.seconds == 500);
257   fail_unless (range->max.type == GST_RTSP_TIME_SECONDS);
258   fail_unless (range->max.seconds == 15.001);
259   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
260   fail_unless (min == 500000000000);
261   fail_unless (max == 15001000000);
262   str = gst_rtsp_range_to_string (range);
263   fail_unless_equals_string ("npt=500-15.001", str);
264   GST_DEBUG ("%s", str);
265   g_free (str);
266   gst_rtsp_range_free (range);
267 
268   fail_unless (gst_rtsp_range_parse ("npt=20:34.23-",
269           &range) == GST_RTSP_EINVAL);
270   fail_unless (gst_rtsp_range_parse ("npt=10:20;34.23-",
271           &range) == GST_RTSP_EINVAL);
272   fail_unless (gst_rtsp_range_parse ("npt=0:4.23-", &range) == GST_RTSP_EINVAL);
273 
274   fail_unless (gst_rtsp_range_parse ("npt=20:12:34.23-21:45:00.01",
275           &range) == GST_RTSP_OK);
276   fail_unless (range->unit == GST_RTSP_RANGE_NPT);
277   fail_unless (range->min.type == GST_RTSP_TIME_SECONDS);
278   fail_unless (range->min.seconds == 72754.23);
279   fail_unless (range->max.type == GST_RTSP_TIME_SECONDS);
280   fail_unless (range->max.seconds == 78300.01);
281   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
282   fail_unless (min == 72754230000000);
283   fail_unless (max == 78300010000000);
284   str = gst_rtsp_range_to_string (range);
285   fail_unless_equals_string ("npt=72754.23-78300.01", str);
286   GST_DEBUG ("%s", str);
287   g_free (str);
288   gst_rtsp_range_free (range);
289 }
290 
291 GST_END_TEST;
292 
GST_START_TEST(test_rtsp_range_smpte)293 GST_START_TEST (test_rtsp_range_smpte)
294 {
295   GstClockTime min, max;
296   GstRTSPTimeRange *range;
297   gchar *str;
298 
299   fail_unless (gst_rtsp_range_parse ("smpte=", &range) == GST_RTSP_EINVAL);
300   fail_unless (gst_rtsp_range_parse ("smpte=10:34:23",
301           &range) == GST_RTSP_EINVAL);
302   fail_unless (gst_rtsp_range_parse ("smpte=-", &range) == GST_RTSP_EINVAL);
303   fail_unless (gst_rtsp_range_parse ("smpte=-12:09:34",
304           &range) == GST_RTSP_EINVAL);
305   fail_unless (gst_rtsp_range_parse ("smpte=12:09:34",
306           &range) == GST_RTSP_EINVAL);
307 
308   fail_unless (gst_rtsp_range_parse ("smpte=00:00:00-", &range) == GST_RTSP_OK);
309   fail_unless (range->unit == GST_RTSP_RANGE_SMPTE);
310   fail_unless (range->min.type == GST_RTSP_TIME_FRAMES);
311   fail_unless (range->min.seconds == 0.0);
312   fail_unless (range->min2.frames == 0.0);
313   fail_unless (range->max.type == GST_RTSP_TIME_END);
314   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
315   fail_unless (min == 0);
316   fail_unless (max == GST_CLOCK_TIME_NONE);
317   str = gst_rtsp_range_to_string (range);
318   fail_unless_equals_string ("smpte=0:00:00-", str);
319   GST_DEBUG ("%s", str);
320   g_free (str);
321   gst_rtsp_range_free (range);
322 
323   fail_unless (gst_rtsp_range_parse ("smpte=10:34:23-20:12:09:20.89",
324           &range) == GST_RTSP_OK);
325   fail_unless (range->unit == GST_RTSP_RANGE_SMPTE);
326   fail_unless (range->min.type == GST_RTSP_TIME_FRAMES);
327   fail_unless (range->min.seconds == 38063.0);
328   fail_unless (range->min2.frames == 0.0);
329   fail_unless (range->max.type == GST_RTSP_TIME_FRAMES);
330   fail_unless (range->max.seconds == 72729.0);
331   fail_unless (range->max2.frames == 20.89);
332   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
333   fail_unless (min == 38063000000000);
334   /* 20.89 * GST_SECOND * 1001 / 30003 */
335   fail_unless (max == 72729000000000 + 696959970);
336   str = gst_rtsp_range_to_string (range);
337   fail_unless_equals_string ("smpte=10:34:23-20:12:09:20.89", str);
338   GST_DEBUG ("%s", str);
339   g_free (str);
340   gst_rtsp_range_free (range);
341 
342   fail_unless (gst_rtsp_range_parse ("smpte-25=10:34:23-20:12:09:20.89",
343           &range) == GST_RTSP_OK);
344   fail_unless (range->unit == GST_RTSP_RANGE_SMPTE_25);
345   fail_unless (range->min.type == GST_RTSP_TIME_FRAMES);
346   fail_unless (range->min.seconds == 38063.0);
347   fail_unless (range->min2.frames == 0.0);
348   fail_unless (range->max.type == GST_RTSP_TIME_FRAMES);
349   fail_unless (range->max.seconds == 72729.0);
350   fail_unless (range->max2.frames == 20.89);
351   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
352   fail_unless (min == 38063000000000);
353   GST_DEBUG ("%" GST_TIME_FORMAT, GST_TIME_ARGS (max));
354   /* 20.89 * GST_SECOND * 1 / 25 */
355   fail_unless (max == 72729000000000 + 835600000);
356   str = gst_rtsp_range_to_string (range);
357   GST_DEBUG ("%s", str);
358   fail_unless_equals_string ("smpte-25=10:34:23-20:12:09:20.89", str);
359   g_free (str);
360   gst_rtsp_range_free (range);
361 
362   fail_unless (gst_rtsp_range_parse ("smpte-25=0:00:00:00.01-9:59:59:24.99",
363           &range) == GST_RTSP_OK);
364   fail_unless (range->unit == GST_RTSP_RANGE_SMPTE_25);
365   fail_unless (range->min.type == GST_RTSP_TIME_FRAMES);
366   fail_unless (range->min.seconds == 0);
367   fail_unless (range->min2.frames == 0.01);
368   fail_unless (range->max.type == GST_RTSP_TIME_FRAMES);
369   fail_unless (range->max.seconds == 35999);
370   fail_unless (range->max2.frames == 24.99);
371   fail_unless (gst_rtsp_range_get_times (range, &min, &max));
372   fail_unless (min == 400000);
373   GST_DEBUG ("%" GST_TIME_FORMAT, GST_TIME_ARGS (max));
374   /* 35999 + (24.99/25) */
375   fail_unless (max == 35999999600000);
376   str = gst_rtsp_range_to_string (range);
377   GST_DEBUG ("%s", str);
378   fail_unless_equals_string ("smpte-25=0:00:00:00.01-9:59:59:24.99", str);
379   g_free (str);
380   gst_rtsp_range_free (range);
381 }
382 
383 GST_END_TEST;
384 
GST_START_TEST(test_rtsp_range_clock)385 GST_START_TEST (test_rtsp_range_clock)
386 {
387   GstRTSPTimeRange *range;
388   gchar *str;
389 
390   fail_unless (gst_rtsp_range_parse ("clock=", &range) == GST_RTSP_EINVAL);
391   fail_unless (gst_rtsp_range_parse ("clock=20001010T120023Z",
392           &range) == GST_RTSP_EINVAL);
393   fail_unless (gst_rtsp_range_parse ("clock=-", &range) == GST_RTSP_EINVAL);
394   fail_unless (gst_rtsp_range_parse ("clock=-20001010T120934Z",
395           &range) == GST_RTSP_EINVAL);
396 
397   fail_unless (gst_rtsp_range_parse ("clock=20001010T122345Z-",
398           &range) == GST_RTSP_OK);
399   fail_unless (range->unit == GST_RTSP_RANGE_CLOCK);
400   fail_unless (range->min.type == GST_RTSP_TIME_UTC);
401   fail_unless (range->min2.year == 2000);
402   fail_unless (range->min2.month == 10);
403   fail_unless (range->min2.day == 10);
404   fail_unless (range->min.seconds == 44625.0);
405   fail_unless (range->max.type == GST_RTSP_TIME_END);
406   str = gst_rtsp_range_to_string (range);
407   fail_unless_equals_string ("clock=20001010T122345Z-", str);
408   GST_DEBUG ("%s", str);
409   g_free (str);
410   gst_rtsp_range_free (range);
411 
412   fail_unless (gst_rtsp_range_parse
413       ("clock=19700101T103423Z-30001230T201209.89Z", &range) == GST_RTSP_OK);
414   fail_unless (range->unit == GST_RTSP_RANGE_CLOCK);
415   fail_unless (range->min.type == GST_RTSP_TIME_UTC);
416   fail_unless (range->min2.year == 1970);
417   fail_unless (range->min2.month == 1);
418   fail_unless (range->min2.day == 1);
419   fail_unless (range->min.seconds == 38063.0);
420   fail_unless (range->max.type == GST_RTSP_TIME_UTC);
421   fail_unless (range->max2.year == 3000);
422   fail_unless (range->max2.month == 12);
423   fail_unless (range->max2.day == 30);
424   fail_unless (range->max.seconds == 72729.89);
425   str = gst_rtsp_range_to_string (range);
426   fail_unless_equals_string ("clock=19700101T103423Z-30001230T201209.89Z", str);
427   GST_DEBUG ("%s", str);
428   g_free (str);
429   gst_rtsp_range_free (range);
430 }
431 
432 GST_END_TEST;
433 
434 
GST_START_TEST(test_rtsp_range_convert)435 GST_START_TEST (test_rtsp_range_convert)
436 {
437   GstRTSPTimeRange *range;
438   gchar *str;
439 
440   fail_unless (gst_rtsp_range_parse ("npt=now-100", &range) == GST_RTSP_OK);
441   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
442   fail_unless (!gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
443   fail_unless (!gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
444   str = gst_rtsp_range_to_string (range);
445   fail_unless_equals_string (str, "npt=now-100");
446   g_free (str);
447   gst_rtsp_range_free (range);
448 
449   fail_unless (gst_rtsp_range_parse ("npt=0-100", &range) == GST_RTSP_OK);
450   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
451   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
452   str = gst_rtsp_range_to_string (range);
453   fail_unless_equals_string (str, "npt=0-100");
454   g_free (str);
455   gst_rtsp_range_free (range);
456 
457   fail_unless (gst_rtsp_range_parse ("npt=0-100", &range) == GST_RTSP_OK);
458   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE_25));
459   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
460   str = gst_rtsp_range_to_string (range);
461   fail_unless_equals_string (str, "npt=0-100");
462   g_free (str);
463   gst_rtsp_range_free (range);
464 
465   fail_unless (gst_rtsp_range_parse ("npt=0-100", &range) == GST_RTSP_OK);
466   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
467   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
468   str = gst_rtsp_range_to_string (range);
469   fail_unless_equals_string (str, "npt=0-100");
470   g_free (str);
471   gst_rtsp_range_free (range);
472 
473   fail_unless (gst_rtsp_range_parse ("smpte-25=10:07:00-10:07:33:05.01", &range)
474       == GST_RTSP_OK);
475   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
476   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE_25));
477   str = gst_rtsp_range_to_string (range);
478   fail_unless_equals_string (str, "smpte-25=10:07:00-10:07:33:05.01");
479   g_free (str);
480   gst_rtsp_range_free (range);
481 
482   fail_unless (gst_rtsp_range_parse ("smpte=77:07:59-", &range)
483       == GST_RTSP_OK);
484   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
485   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
486   str = gst_rtsp_range_to_string (range);
487   fail_unless_equals_string (str, "smpte=77:07:59-");
488   g_free (str);
489   gst_rtsp_range_free (range);
490 
491   fail_unless (gst_rtsp_range_parse ("smpte=10:07:00-10:07:33:05.01", &range)
492       == GST_RTSP_OK);
493   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
494   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
495   str = gst_rtsp_range_to_string (range);
496   fail_unless_equals_string (str, "smpte=10:07:00-10:07:33:05.01");
497   g_free (str);
498   gst_rtsp_range_free (range);
499 
500   fail_unless (gst_rtsp_range_parse ("smpte-25=10:07:00-10:07:33:05.01", &range)
501       == GST_RTSP_OK);
502   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
503   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE_25));
504   str = gst_rtsp_range_to_string (range);
505   fail_unless_equals_string (str, "smpte-25=10:07:00-10:07:33:05.01");
506   g_free (str);
507   gst_rtsp_range_free (range);
508 
509   fail_unless (gst_rtsp_range_parse ("smpte=10:07:00-10:07:33:05.01", &range)
510       == GST_RTSP_OK);
511   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
512   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
513   str = gst_rtsp_range_to_string (range);
514   fail_unless_equals_string (str, "smpte=10:07:00-10:07:33:05.01");
515   g_free (str);
516   gst_rtsp_range_free (range);
517 
518   fail_unless (gst_rtsp_range_parse
519       ("clock=20001010T120023Z-20320518T152245.12Z", &range)
520       == GST_RTSP_OK);
521   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_NPT));
522   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
523   str = gst_rtsp_range_to_string (range);
524   fail_unless_equals_string (str, "clock=20001010T120023Z-20320518T152245.12Z");
525   g_free (str);
526   gst_rtsp_range_free (range);
527 
528   fail_unless (gst_rtsp_range_parse
529       ("clock=20001010T120023Z-20320518T152245.12Z", &range)
530       == GST_RTSP_OK);
531   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_SMPTE));
532   fail_unless (gst_rtsp_range_convert_units (range, GST_RTSP_RANGE_CLOCK));
533   str = gst_rtsp_range_to_string (range);
534   fail_unless_equals_string (str, "clock=20001010T120023Z-20320518T152245.12Z");
535   g_free (str);
536   gst_rtsp_range_free (range);
537 }
538 
539 GST_END_TEST;
540 
GST_START_TEST(test_rtsp_message)541 GST_START_TEST (test_rtsp_message)
542 {
543   GstRTSPMessage *msg;
544   GstRTSPResult res;
545   gchar *val = NULL;
546 
547   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
548       "rtsp://foo.bar:8554/test");
549   fail_unless_equals_int (res, GST_RTSP_OK);
550 
551   res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_CSEQ, "3");
552   fail_unless_equals_int (res, GST_RTSP_OK);
553   res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SERVER, "GStreamer");
554   fail_unless_equals_int (res, GST_RTSP_OK);
555   res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_TRANSPORT,
556       "RTP/AVP/TCP;unicast;interleaved=0-1");
557   fail_unless_equals_int (res, GST_RTSP_OK);
558   res = gst_rtsp_message_add_header (msg, GST_RTSP_HDR_SESSION, "xnb_NpaKEc");
559   fail_unless_equals_int (res, GST_RTSP_OK);
560 
561   res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.0");
562   fail_unless_equals_int (res, GST_RTSP_OK);
563   res = gst_rtsp_message_add_header_by_name (msg, "Custom", "value");
564   fail_unless_equals_int (res, GST_RTSP_OK);
565   res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.1");
566   fail_unless_equals_int (res, GST_RTSP_OK);
567   res = gst_rtsp_message_add_header_by_name (msg, "FOO99-Version", "bar.2");
568   fail_unless_equals_int (res, GST_RTSP_OK);
569 
570   /* make sure fields added via enum work as well */
571   res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 0);
572   fail_unless_equals_int (res, GST_RTSP_OK);
573   fail_unless_equals_string (val, "3");
574   res = gst_rtsp_message_get_header_by_name (msg, "CSeq", &val, 1);
575   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
576 
577   res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0);
578   fail_unless_equals_int (res, GST_RTSP_OK);
579   fail_unless_equals_string (val, "3");
580   res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 1);
581   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
582 
583   res = gst_rtsp_message_get_header_by_name (msg, "DoesNotExist", &val, 0);
584   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
585 
586   res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 1);
587   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
588   res = gst_rtsp_message_get_header_by_name (msg, "Custom", &val, 0);
589   fail_unless_equals_int (res, GST_RTSP_OK);
590   fail_unless_equals_string (val, "value");
591 
592   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 3);
593   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
594   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1);
595   fail_unless_equals_int (res, GST_RTSP_OK);
596   fail_unless_equals_string (val, "bar.1");
597   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2);
598   fail_unless_equals_int (res, GST_RTSP_OK);
599   fail_unless_equals_string (val, "bar.2");
600   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
601   fail_unless_equals_int (res, GST_RTSP_OK);
602   fail_unless_equals_string (val, "bar.0");
603 
604   res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 3);
605   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
606   res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", 1);
607   fail_unless_equals_int (res, GST_RTSP_OK);
608 
609   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 2);
610   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
611 
612   /* 2 shifted to position 1 */
613   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 1);
614   fail_unless_equals_int (res, GST_RTSP_OK);
615   fail_unless_equals_string (val, "bar.2");
616   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
617   fail_unless_equals_int (res, GST_RTSP_OK);
618   fail_unless_equals_string (val, "bar.0");
619 
620   /* remove all headers for a name */
621   res = gst_rtsp_message_remove_header_by_name (msg, "FOO99-Version", -1);
622   fail_unless_equals_int (res, GST_RTSP_OK);
623   res = gst_rtsp_message_get_header_by_name (msg, "FOO99-Version", &val, 0);
624   fail_unless_equals_int (res, GST_RTSP_ENOTIMPL);
625 
626   /* gst_rtsp_message_dump (msg); */
627 
628   res = gst_rtsp_message_free (msg);
629   fail_unless_equals_int (res, GST_RTSP_OK);
630 
631   /* === */
632 
633   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
634       "rtsp://foo.bar:8554/test");
635   fail_unless_equals_int (res, GST_RTSP_OK);
636 
637   res = gst_rtsp_message_add_header_by_name (msg, "CSeq", "3");
638   fail_unless_equals_int (res, GST_RTSP_OK);
639 
640   res = gst_rtsp_message_get_header (msg, GST_RTSP_HDR_CSEQ, &val, 0);
641   fail_unless_equals_int (res, GST_RTSP_OK);
642   fail_unless_equals_string (val, "3");
643 
644   val = NULL;
645   res = gst_rtsp_message_get_header_by_name (msg, "cseq", &val, 0);
646   fail_unless_equals_int (res, GST_RTSP_OK);
647   fail_unless_equals_string (val, "3");
648 
649   res = gst_rtsp_message_free (msg);
650   fail_unless_equals_int (res, GST_RTSP_OK);
651 }
652 
653 GST_END_TEST;
654 
GST_START_TEST(test_rtsp_message_auth_credentials)655 GST_START_TEST (test_rtsp_message_auth_credentials)
656 {
657   GstRTSPMessage *msg;
658   GstRTSPResult res;
659   GstRTSPAuthCredential **credentials;
660   GstRTSPAuthCredential **credential;
661   GstRTSPAuthParam **param;
662 
663   /* Simple basic auth, no params */
664   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
665       "rtsp://foo.bar:8554/test");
666   fail_unless_equals_int (res, GST_RTSP_OK);
667   res =
668       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE, "Basic");
669   credentials =
670       gst_rtsp_message_parse_auth_credentials (msg,
671       GST_RTSP_HDR_WWW_AUTHENTICATE);
672   fail_unless (credentials != NULL);
673 
674   credential = credentials;
675   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
676   param = (*credential)->params;
677   fail_unless (param == NULL);
678   credential++;
679   fail_unless (*credential == NULL);
680 
681   gst_rtsp_auth_credentials_free (credentials);
682   res = gst_rtsp_message_free (msg);
683   fail_unless_equals_int (res, GST_RTSP_OK);
684 
685   /* Simple basic auth, digest auth, no params */
686   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
687       "rtsp://foo.bar:8554/test");
688   fail_unless_equals_int (res, GST_RTSP_OK);
689   res =
690       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
691       "Basic Digest");
692   credentials =
693       gst_rtsp_message_parse_auth_credentials (msg,
694       GST_RTSP_HDR_WWW_AUTHENTICATE);
695   fail_unless (credentials != NULL);
696 
697   credential = credentials;
698   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
699   param = (*credential)->params;
700   fail_unless (param == NULL);
701   credential++;
702   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_DIGEST);
703   param = (*credential)->params;
704   fail_unless (param == NULL);
705   credential++;
706   fail_unless (*credential == NULL);
707 
708   gst_rtsp_auth_credentials_free (credentials);
709   res = gst_rtsp_message_free (msg);
710   fail_unless_equals_int (res, GST_RTSP_OK);
711 
712   /* Simple basic auth */
713   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
714       "rtsp://foo.bar:8554/test");
715   fail_unless_equals_int (res, GST_RTSP_OK);
716   res =
717       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
718       "Basic foo=\"bar\", baz=foo");
719   credentials =
720       gst_rtsp_message_parse_auth_credentials (msg,
721       GST_RTSP_HDR_WWW_AUTHENTICATE);
722   fail_unless (credentials != NULL);
723 
724   credential = credentials;
725   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
726   param = (*credential)->params;
727   fail_unless (param != NULL);
728   fail_unless (*param != NULL);
729   fail_unless_equals_string ((*param)->name, "foo");
730   fail_unless_equals_string ((*param)->value, "bar");
731   param++;
732   fail_unless (*param != NULL);
733   fail_unless_equals_string ((*param)->name, "baz");
734   fail_unless_equals_string ((*param)->value, "foo");
735   param++;
736   fail_unless (*param == NULL);
737   credential++;
738   fail_unless (*credential == NULL);
739 
740   gst_rtsp_auth_credentials_free (credentials);
741   res = gst_rtsp_message_free (msg);
742   fail_unless_equals_int (res, GST_RTSP_OK);
743 
744   /* Two simple basic auth headers */
745   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
746       "rtsp://foo.bar:8554/test");
747   fail_unless_equals_int (res, GST_RTSP_OK);
748   res =
749       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
750       "Basic foo=\"bar\", baz=foo");
751   res =
752       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
753       "Basic foo1=\"bar\", baz1=foo");
754   credentials =
755       gst_rtsp_message_parse_auth_credentials (msg,
756       GST_RTSP_HDR_WWW_AUTHENTICATE);
757   fail_unless (credentials != NULL);
758 
759   credential = credentials;
760   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
761   param = (*credential)->params;
762   fail_unless (param != NULL);
763   fail_unless (*param != NULL);
764   fail_unless_equals_string ((*param)->name, "foo");
765   fail_unless_equals_string ((*param)->value, "bar");
766   param++;
767   fail_unless (*param != NULL);
768   fail_unless_equals_string ((*param)->name, "baz");
769   fail_unless_equals_string ((*param)->value, "foo");
770   param++;
771   fail_unless (*param == NULL);
772   credential++;
773   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
774   param = (*credential)->params;
775   fail_unless (param != NULL);
776   fail_unless (*param != NULL);
777   fail_unless_equals_string ((*param)->name, "foo1");
778   fail_unless_equals_string ((*param)->value, "bar");
779   param++;
780   fail_unless (*param != NULL);
781   fail_unless_equals_string ((*param)->name, "baz1");
782   fail_unless_equals_string ((*param)->value, "foo");
783   param++;
784   fail_unless (*param == NULL);
785   credential++;
786   fail_unless (*credential == NULL);
787 
788   gst_rtsp_auth_credentials_free (credentials);
789   res = gst_rtsp_message_free (msg);
790   fail_unless_equals_int (res, GST_RTSP_OK);
791 
792   /* Simple basic auth, digest auth in one header */
793   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
794       "rtsp://foo.bar:8554/test");
795   fail_unless_equals_int (res, GST_RTSP_OK);
796   res =
797       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
798       "Basic foo=\"bar\", baz=foo Digest foo1=\"bar\", baz1=foo");
799   credentials =
800       gst_rtsp_message_parse_auth_credentials (msg,
801       GST_RTSP_HDR_WWW_AUTHENTICATE);
802   fail_unless (credentials != NULL);
803 
804   credential = credentials;
805   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
806   param = (*credential)->params;
807   fail_unless (param != NULL);
808   fail_unless (*param != NULL);
809   fail_unless_equals_string ((*param)->name, "foo");
810   fail_unless_equals_string ((*param)->value, "bar");
811   param++;
812   fail_unless (*param != NULL);
813   fail_unless_equals_string ((*param)->name, "baz");
814   fail_unless_equals_string ((*param)->value, "foo");
815   param++;
816   fail_unless (*param == NULL);
817   credential++;
818   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_DIGEST);
819   param = (*credential)->params;
820   fail_unless (param != NULL);
821   fail_unless (*param != NULL);
822   fail_unless_equals_string ((*param)->name, "foo1");
823   fail_unless_equals_string ((*param)->value, "bar");
824   param++;
825   fail_unless (*param != NULL);
826   fail_unless_equals_string ((*param)->name, "baz1");
827   fail_unless_equals_string ((*param)->value, "foo");
828   param++;
829   fail_unless (*param == NULL);
830   credential++;
831   fail_unless (*credential == NULL);
832 
833   gst_rtsp_auth_credentials_free (credentials);
834   res = gst_rtsp_message_free (msg);
835   fail_unless_equals_int (res, GST_RTSP_OK);
836 
837   /* Simple basic auth, digest auth in one header, with random commas and spaces */
838   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
839       "rtsp://foo.bar:8554/test");
840   fail_unless_equals_int (res, GST_RTSP_OK);
841   res =
842       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
843       "Basic     foo=\"bar\",, , baz=foo, Digest , foo1=\"bar\",, baz1=foo");
844   credentials =
845       gst_rtsp_message_parse_auth_credentials (msg,
846       GST_RTSP_HDR_WWW_AUTHENTICATE);
847   fail_unless (credentials != NULL);
848 
849   credential = credentials;
850   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
851   param = (*credential)->params;
852   fail_unless (param != NULL);
853   fail_unless (*param != NULL);
854   fail_unless_equals_string ((*param)->name, "foo");
855   fail_unless_equals_string ((*param)->value, "bar");
856   param++;
857   fail_unless (*param != NULL);
858   fail_unless_equals_string ((*param)->name, "baz");
859   fail_unless_equals_string ((*param)->value, "foo");
860   param++;
861   fail_unless (*param == NULL);
862   credential++;
863   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_DIGEST);
864   param = (*credential)->params;
865   fail_unless (param != NULL);
866   fail_unless (*param != NULL);
867   fail_unless_equals_string ((*param)->name, "foo1");
868   fail_unless_equals_string ((*param)->value, "bar");
869   param++;
870   fail_unless (*param != NULL);
871   fail_unless_equals_string ((*param)->name, "baz1");
872   fail_unless_equals_string ((*param)->value, "foo");
873   param++;
874   fail_unless (*param == NULL);
875   credential++;
876   fail_unless (*credential == NULL);
877 
878   gst_rtsp_auth_credentials_free (credentials);
879   res = gst_rtsp_message_free (msg);
880   fail_unless_equals_int (res, GST_RTSP_OK);
881 
882   /* Simple basic auth */
883   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
884       "rtsp://foo.bar:8554/test");
885   fail_unless_equals_int (res, GST_RTSP_OK);
886   res =
887       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_AUTHORIZATION,
888       "Basic foobarbaz");
889   credentials =
890       gst_rtsp_message_parse_auth_credentials (msg, GST_RTSP_HDR_AUTHORIZATION);
891   fail_unless (credentials != NULL);
892 
893   credential = credentials;
894   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_BASIC);
895   param = (*credential)->params;
896   fail_unless (param == NULL);
897   fail_unless_equals_string ((*credential)->authorization, "foobarbaz");
898   credential++;
899   fail_unless (*credential == NULL);
900 
901   gst_rtsp_auth_credentials_free (credentials);
902   res = gst_rtsp_message_free (msg);
903   fail_unless_equals_int (res, GST_RTSP_OK);
904 
905   /* Simple digest auth */
906   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
907       "rtsp://foo.bar:8554/test");
908   fail_unless_equals_int (res, GST_RTSP_OK);
909   res =
910       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_AUTHORIZATION,
911       "Digest foo=\"bar\" baz=foo");
912   credentials =
913       gst_rtsp_message_parse_auth_credentials (msg, GST_RTSP_HDR_AUTHORIZATION);
914   fail_unless (credentials != NULL);
915 
916   credential = credentials;
917   fail_unless_equals_int ((*credential)->scheme, GST_RTSP_AUTH_DIGEST);
918   param = (*credential)->params;
919   fail_unless (param != NULL);
920   fail_unless (*param != NULL);
921   fail_unless_equals_string ((*param)->name, "foo");
922   fail_unless_equals_string ((*param)->value, "bar");
923   param++;
924   fail_unless (*param != NULL);
925   fail_unless_equals_string ((*param)->name, "baz");
926   fail_unless_equals_string ((*param)->value, "foo");
927   param++;
928   fail_unless (*param == NULL);
929   credential++;
930   fail_unless (*credential == NULL);
931 
932   gst_rtsp_auth_credentials_free (credentials);
933   res = gst_rtsp_message_free (msg);
934   fail_unless_equals_int (res, GST_RTSP_OK);
935 }
936 
937 GST_END_TEST;
938 
GST_START_TEST(test_rtsp_message_auth_credentials_boxed)939 GST_START_TEST (test_rtsp_message_auth_credentials_boxed)
940 {
941   GstRTSPAuthCredential **credentials, *credentials2;
942   GstRTSPAuthParam *param2;
943   GstRTSPMessage *msg;
944   GstRTSPResult res;
945 
946   res = gst_rtsp_message_new_request (&msg, GST_RTSP_PLAY,
947       "rtsp://foo.bar:8554/test");
948   fail_unless_equals_int (res, GST_RTSP_OK);
949   res =
950       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
951       "Basic foo=\"bar\", baz=foo");
952   res =
953       gst_rtsp_message_add_header (msg, GST_RTSP_HDR_WWW_AUTHENTICATE,
954       "Basic foo1=\"bar\", baz1=foo");
955   credentials =
956       gst_rtsp_message_parse_auth_credentials (msg,
957       GST_RTSP_HDR_WWW_AUTHENTICATE);
958 
959   credentials2 = g_boxed_copy (GST_TYPE_RTSP_AUTH_CREDENTIAL, credentials[0]);
960   gst_rtsp_auth_credentials_free (credentials);
961   gst_rtsp_message_free (msg);
962 
963   param2 = g_boxed_copy (GST_TYPE_RTSP_AUTH_PARAM, credentials2->params[0]);
964   g_boxed_free (GST_TYPE_RTSP_AUTH_CREDENTIAL, credentials2);
965   g_boxed_free (GST_TYPE_RTSP_AUTH_PARAM, param2);
966 }
967 
968 GST_END_TEST;
969 
970 static Suite *
rtsp_suite(void)971 rtsp_suite (void)
972 {
973   Suite *s = suite_create ("rtsp support library");
974   TCase *tc_chain = tcase_create ("general");
975 
976   suite_add_tcase (s, tc_chain);
977   tcase_add_test (tc_chain, test_rtsp_url_basic);
978   tcase_add_test (tc_chain, test_rtsp_url_components_1);
979   tcase_add_test (tc_chain, test_rtsp_url_components_2);
980   tcase_add_test (tc_chain, test_rtsp_url_components_3);
981   tcase_add_test (tc_chain, test_rtsp_range_npt);
982   tcase_add_test (tc_chain, test_rtsp_range_smpte);
983   tcase_add_test (tc_chain, test_rtsp_range_clock);
984   tcase_add_test (tc_chain, test_rtsp_range_convert);
985   tcase_add_test (tc_chain, test_rtsp_message);
986   tcase_add_test (tc_chain, test_rtsp_message_auth_credentials);
987   tcase_add_test (tc_chain, test_rtsp_message_auth_credentials_boxed);
988 
989   return s;
990 }
991 
992 GST_CHECK_MAIN (rtsp);
993