1 /* GStreamer unit tests for the SDP support library
2 *
3 * Copyright (C) 2013 Jose Antonio Santos Cadenas <santoscadenas@gmail.com>
4 * Copyright (C) 2013 Kurento
5 * Contact: Miguel París Díaz <mparisdiaz@gmail.com>
6 * Contact: José Antonio Santos Cadenas <santoscadenas@kurento.com>
7 *
8 * This library is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Library General Public
10 * License as published by the Free Software Foundation; either
11 * version 2 of the License, or (at your option) any later version.
12 *
13 * This library is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Library General Public License for more details.
17 *
18 * You should have received a copy of the GNU Library General Public
19 * License along with this library; if not, write to the
20 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21 * Boston, MA 02111-1307, USA.
22 */
23
24 #ifdef HAVE_CONFIG_H
25 #include "config.h"
26 #endif
27
28 #include <gst/check/gstcheck.h>
29 #include <gst/sdp/gstsdpmessage.h>
30
31 /* *INDENT-OFF* */
32 static const gchar *sdp = "v=0\r\n"
33 "o=- 123456 0 IN IP4 127.0.0.1\r\n"
34 "s=TestSessionToCopy\r\n"
35 "c=IN IP4 127.0.0.1\r\n"
36 "t=0 0\r\n"
37 "a=sendrecv\r\n"
38 "m=video 3434 RTP/AVP 96 97 99\r\n"
39 "a=rtpmap:96 MP4V-ES/90000\r\n"
40 "a=rtpmap:97 H263-1998/90000\r\n"
41 "a=rtpmap:99 H263/90000\r\n"
42 "a=sendrecv\r\n"
43 "m=video 6565 RTP/AVP 98\r\n"
44 "a=rtpmap:98 VP8/90000\r\n"
45 "a=sendrecv\r\n"
46 "m=audio 4545 RTP/AVP 14\r\n"
47 "a=sendrecv\r\n"
48 "m=audio 1010 TCP 14\r\n";
49
50 static const gchar caps_video_string1[] =
51 "application/x-unknown, media=(string)video, payload=(int)96, "
52 "clock-rate=(int)90000, encoding-name=(string)MP4V-ES";
53
54 static const gchar caps_video_string2[] =
55 "application/x-unknown, media=(string)video, payload=(int)97, "
56 "clock-rate=(int)90000, encoding-name=(string)H263-1998";
57
58 static const gchar caps_audio_string[] =
59 "application/x-unknown, media=(string)audio, payload=(int)14, "
60 "clock-rate=(int)90000";
61
62 static const gchar * sdp_rtcp_fb = "v=0\r\n"
63 "o=- 123456 2 IN IP4 127.0.0.1 \r\n"
64 "s=-\r\n"
65 "t=0 0\r\n"
66 "a=maxptime:60\r\n"
67 "a=sendrecv\r\n"
68 "m=video 1 UDP/TLS/RTP/SAVPF 100 101 102\r\n"
69 "c=IN IP4 1.1.1.1\r\n"
70 "a=rtpmap:100 VP8/90000\r\n"
71 "a=rtcp-fb:100 nack\r\n"
72 "a=rtcp-fb:100 nack pli\r\n"
73 "a=rtcp-fb:100 ccm fir\r\n"
74 "a=rtpmap:101 VP9/90000\r\n"
75 "a=rtcp-fb:101 nack pli\r\n"
76 "a=rtpmap:102 H264/90000\r\n"
77 "a=rtcp-fb:102 ccm fir\r\n"; /* incorrect spacing */
78
79 static const gchar caps_video_rtcp_fb_pt_100[] =
80 "application/x-unknown, media=(string)video, payload=(int)100, "
81 "clock-rate=(int)90000, encoding-name=(string)VP8, "
82 "rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, "
83 "rtcp-fb-nack-pli=(boolean)true";
84
85 static const gchar caps_video_rtcp_fb_pt_101[] =
86 "application/x-unknown, media=(string)video, payload=(int)101, "
87 "clock-rate=(int)90000, encoding-name=(string)VP9, "
88 "rtcp-fb-nack-pli=(boolean)true";
89
90 static const gchar caps_video_rtcp_fb_pt_102[] =
91 "application/x-unknown, media=(string)video, payload=(int)102, "
92 "clock-rate=(int)90000, encoding-name=(string)H264, "
93 "rtcp-fb-ccm-fir=(boolean)true";
94
95 static const gchar *sdp_rtcp_fb_all = "v=0\r\n"
96 "o=- 123456 2 IN IP4 127.0.0.1 \r\n"
97 "s=-\r\n"
98 "t=0 0\r\n"
99 "a=maxptime:60\r\n"
100 "a=sendrecv\r\n"
101 "m=video 1 UDP/TLS/RTP/SAVPF 100 101 102\r\n"
102 "c=IN IP4 1.1.1.1\r\n"
103 "a=rtpmap:100 VP8/90000\r\n"
104 "a=rtcp-fb:* nack\r\n"
105 "a=rtcp-fb:* nack pli\r\n"
106 "a=rtcp-fb:100 ccm fir\r\n"
107 "a=rtpmap:101 VP9/90000\r\n"
108 "a=rtcp-fb:101 ccm fir\r\n"
109 "a=rtpmap:102 H264/90000\r\n";
110
111 static const gchar caps_video_rtcp_fb_all_pt_100[] =
112 "application/x-unknown, media=(string)video, payload=(int)100, "
113 "clock-rate=(int)90000, encoding-name=(string)VP8, "
114 "rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, "
115 "rtcp-fb-nack-pli=(boolean)true";
116
117 static const gchar caps_video_rtcp_fb_all_pt_101[] =
118 "application/x-unknown, media=(string)video, payload=(int)101, "
119 "clock-rate=(int)90000, encoding-name=(string)VP9, "
120 "rtcp-fb-ccm-fir=(boolean)true, rtcp-fb-nack=(boolean)true, "
121 "rtcp-fb-nack-pli=(boolean)true";
122
123 static const gchar caps_video_rtcp_fb_all_pt_102[] =
124 "application/x-unknown, media=(string)video, payload=(int)102, "
125 "clock-rate=(int)90000, encoding-name=(string)H264, "
126 "rtcp-fb-nack=(boolean)true, rtcp-fb-nack-pli=(boolean)true";
127
128 /* *INDENT-ON* */
129
GST_START_TEST(boxed)130 GST_START_TEST (boxed)
131 {
132 GValue value = G_VALUE_INIT;
133 GValue value_copy = G_VALUE_INIT;
134 GstSDPMessage *message, *copy;
135 gchar *message1_str, *message2_str, *copy_str;
136 const gchar *repeat1[] = { "789", "012", NULL };
137
138 gst_sdp_message_new (&message);
139 gst_sdp_message_parse_buffer ((guint8 *) sdp, -1, message);
140
141 gst_sdp_message_add_time (message, "123", "456", repeat1);
142
143 g_value_init (&value, GST_TYPE_SDP_MESSAGE);
144 g_value_init (&value_copy, GST_TYPE_SDP_MESSAGE);
145
146 g_value_set_boxed (&value, message);
147 message1_str = gst_sdp_message_as_text (message);
148 GST_DEBUG ("message1:\n%s", message1_str);
149 gst_sdp_message_free (message);
150
151 message = g_value_get_boxed (&value);
152 message2_str = gst_sdp_message_as_text (message);
153 GST_DEBUG ("message2:\n%s", message2_str);
154
155 fail_if (g_strcmp0 (message1_str, message2_str) != 0);
156
157 g_value_copy (&value, &value_copy);
158 g_value_reset (&value);
159
160 copy = g_value_dup_boxed (&value_copy);
161 g_value_reset (&value_copy);
162
163 copy_str = gst_sdp_message_as_text (copy);
164 gst_sdp_message_free (copy);
165 GST_DEBUG ("copy:\n%s", copy_str);
166
167 fail_if (g_strcmp0 (message1_str, copy_str));
168
169 g_free (message1_str);
170 g_free (message2_str);
171 g_free (copy_str);
172 }
173
174 GST_END_TEST
GST_START_TEST(copy)175 GST_START_TEST (copy)
176 {
177 GstSDPMessage *message, *copy;
178 glong length = -1;
179 gchar *message_str, *copy_str;
180 const gchar *repeat1[] = { "789", "012", NULL };
181 const gchar *repeat2[] = { "987", "210", NULL };
182
183 gst_sdp_message_new (&message);
184 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
185
186 gst_sdp_message_add_time (message, "123", "456", repeat1);
187 gst_sdp_message_add_time (message, "321", "654", repeat2);
188
189 gst_sdp_message_copy (message, ©);
190
191 message_str = gst_sdp_message_as_text (message);
192 GST_DEBUG ("Original:\n%s", message_str);
193 gst_sdp_message_free (message);
194 copy_str = gst_sdp_message_as_text (copy);
195 gst_sdp_message_free (copy);
196 GST_DEBUG ("Copy:\n%s", copy_str);
197
198 fail_if (g_strcmp0 (copy_str, message_str) != 0);
199 g_free (copy_str);
200 g_free (message_str);
201 }
202
203 GST_END_TEST
GST_START_TEST(modify)204 GST_START_TEST (modify)
205 {
206 GstSDPMessage *message;
207 glong length = -1;
208 const GstSDPMedia *media;
209 const gchar *old_val;
210 const gchar *result;
211 GstSDPAttribute attr;
212
213 gst_sdp_message_new (&message);
214 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
215
216 /* modify session attribute */
217 fail_unless (gst_sdp_message_add_attribute (message,
218 "test_attr_session", "param1=val1") == GST_SDP_OK);
219
220 old_val = gst_sdp_message_get_attribute_val (message, "test_attr_session");
221
222 fail_unless (old_val != NULL);
223 attr.key = g_strdup ("test_attr_session");
224 attr.value = g_strdup_printf ("%s;param2=val2", old_val);
225
226 fail_unless (gst_sdp_message_replace_attribute (message, 0,
227 &attr) == GST_SDP_OK);
228
229 result = gst_sdp_message_get_attribute_val (message, "test_attr_session");
230 fail_unless (result != NULL);
231 fail_unless (g_strcmp0 (result, "param1=val1;param2=val2") == 0);
232
233
234 /* modify media attribute */
235 media = gst_sdp_message_get_media (message, 0);
236 fail_unless (media != NULL);
237
238 fail_unless (gst_sdp_media_add_attribute ((GstSDPMedia *) media,
239 "test_attr_media", "param3=val3") == GST_SDP_OK);
240
241 old_val =
242 gst_sdp_media_get_attribute_val ((GstSDPMedia *) media,
243 "test_attr_media");
244
245 fail_unless (old_val != NULL);
246 attr.key = g_strdup ("test_attr_media");
247 attr.value = g_strdup ("myparam=myval");
248
249 fail_unless (gst_sdp_media_replace_attribute ((GstSDPMedia *) media,
250 0, &attr) == GST_SDP_OK);
251
252 result =
253 gst_sdp_media_get_attribute_val ((GstSDPMedia *) media,
254 "test_attr_media");
255 fail_unless (result != NULL);
256 fail_unless (g_strcmp0 (result, "myparam=myval") == 0);
257
258 gst_sdp_message_free (message);
259 }
260
261 GST_END_TEST
GST_START_TEST(null)262 GST_START_TEST (null)
263 {
264 GstSDPMessage *message;
265 const GstSDPMedia *media;
266 glong length = -1;
267 const gchar *val;
268
269 gst_sdp_message_new (&message);
270 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
271
272 fail_unless (gst_sdp_message_add_attribute (message,
273 "test_attr_session", NULL) == GST_SDP_OK);
274
275 val = gst_sdp_message_get_attribute_val (message, "test_attr_session");
276 fail_unless (val == NULL);
277
278 media = gst_sdp_message_get_media (message, 0);
279
280 fail_unless (gst_sdp_media_add_attribute ((GstSDPMedia *) media,
281 "test_attr_media", NULL) == GST_SDP_OK);
282
283 val = gst_sdp_media_get_attribute_val (media, "test_attr_media");
284 fail_unless (val == NULL);
285
286 gst_sdp_message_free (message);
287 }
288
289 GST_END_TEST
GST_START_TEST(caps_from_media)290 GST_START_TEST (caps_from_media)
291 {
292 GstSDPMessage *message;
293 glong length = -1;
294 const GstSDPMedia *media1, *media2, *media3;
295 GstCaps *caps_video1, *caps_video2, *caps_audio;
296 GstCaps *result_video1, *result_video2, *result_audio;
297
298 gst_sdp_message_new (&message);
299 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
300
301 media1 = gst_sdp_message_get_media (message, 0);
302 fail_unless (media1 != NULL);
303
304 media2 = gst_sdp_message_get_media (message, 1);
305 fail_unless (media2 != NULL);
306
307 media3 = gst_sdp_message_get_media (message, 2);
308 fail_unless (media2 != NULL);
309
310 caps_video1 = gst_sdp_media_get_caps_from_media (media1, 96);
311 caps_video2 = gst_sdp_media_get_caps_from_media (media1, 97);
312 caps_audio = gst_sdp_media_get_caps_from_media (media3, 14);
313
314 result_video1 = gst_caps_from_string (caps_video_string1);
315 fail_unless (gst_caps_is_strictly_equal (caps_video1, result_video1));
316 gst_caps_unref (result_video1);
317 gst_caps_unref (caps_video1);
318
319 result_video2 = gst_caps_from_string (caps_video_string2);
320 fail_unless (gst_caps_is_strictly_equal (caps_video2, result_video2));
321 gst_caps_unref (result_video2);
322 gst_caps_unref (caps_video2);
323
324 result_audio = gst_caps_from_string (caps_audio_string);
325 fail_unless (gst_caps_is_strictly_equal (caps_audio, result_audio));
326 gst_caps_unref (result_audio);
327 gst_caps_unref (caps_audio);
328
329 gst_sdp_message_free (message);
330 }
331
332 GST_END_TEST
GST_START_TEST(media_from_caps)333 GST_START_TEST (media_from_caps)
334 {
335 GstSDPResult ret = GST_SDP_OK;
336 GstSDPMessage *message;
337 glong length = -1;
338 GstSDPMedia *media_video, *media_audio;
339 const GstSDPMedia *result_video, *result_audio;
340 GstCaps *caps_video, *caps_audio;
341 const gchar *media1_text, *media2_text, *media3_text, *media4_text;
342
343 caps_video = gst_caps_from_string (caps_video_string1);
344 caps_audio = gst_caps_from_string (caps_audio_string);
345
346 gst_sdp_media_new (&media_video);
347 fail_unless (media_video != NULL);
348 gst_sdp_media_new (&media_audio);
349 fail_unless (media_audio != NULL);
350
351 ret = gst_sdp_media_set_media_from_caps (caps_video, media_video);
352 fail_unless (ret == GST_SDP_OK);
353 gst_caps_unref (caps_video);
354 ret = gst_sdp_media_set_media_from_caps (caps_audio, media_audio);
355 fail_unless (ret == GST_SDP_OK);
356 gst_caps_unref (caps_audio);
357
358 gst_sdp_message_new (&message);
359 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
360
361 result_video = gst_sdp_message_get_media (message, 0);
362 fail_unless (result_video != NULL);
363
364 result_audio = gst_sdp_message_get_media (message, 2);
365 fail_unless (result_audio != NULL);
366
367 media1_text = gst_sdp_media_get_attribute_val (media_video, "rtpmap");
368 media2_text = gst_sdp_media_get_attribute_val (result_video, "rtpmap");
369 media3_text = gst_sdp_media_get_format (media_audio, 0);
370 media4_text = gst_sdp_media_get_format (result_audio, 0);
371
372 fail_if (g_strcmp0 (media1_text, media2_text) != 0);
373 fail_if (g_strcmp0 (media3_text, media4_text) != 0);
374
375 gst_sdp_media_free (media_video);
376 gst_sdp_media_free (media_audio);
377 gst_sdp_message_free (message);
378 }
379
380 GST_END_TEST
GST_START_TEST(caps_from_media_rtcp_fb)381 GST_START_TEST (caps_from_media_rtcp_fb)
382 {
383 GstSDPMessage *message;
384 glong length = -1;
385 const GstSDPMedia *media1;
386 GstCaps *caps1, *caps2, *caps3;
387 GstCaps *result1, *result2, *result3;
388
389 gst_sdp_message_new (&message);
390 gst_sdp_message_parse_buffer ((guint8 *) sdp_rtcp_fb, length, message);
391
392 media1 = gst_sdp_message_get_media (message, 0);
393 fail_unless (media1 != NULL);
394
395 caps1 = gst_sdp_media_get_caps_from_media (media1, 100);
396 result1 = gst_caps_from_string (caps_video_rtcp_fb_pt_100);
397 fail_unless (gst_caps_is_strictly_equal (caps1, result1));
398
399 gst_caps_unref (result1);
400 gst_caps_unref (caps1);
401
402 caps2 = gst_sdp_media_get_caps_from_media (media1, 101);
403 result2 = gst_caps_from_string (caps_video_rtcp_fb_pt_101);
404 fail_unless (gst_caps_is_strictly_equal (caps2, result2));
405
406 gst_caps_unref (result2);
407 gst_caps_unref (caps2);
408
409 caps3 = gst_sdp_media_get_caps_from_media (media1, 102);
410 result3 = gst_caps_from_string (caps_video_rtcp_fb_pt_102);
411
412 fail_unless (gst_caps_is_strictly_equal (caps3, result3));
413
414 gst_caps_unref (result3);
415 gst_caps_unref (caps3);
416
417 gst_sdp_message_free (message);
418 }
419
420 GST_END_TEST
GST_START_TEST(caps_from_media_rtcp_fb_all)421 GST_START_TEST (caps_from_media_rtcp_fb_all)
422 {
423 GstSDPMessage *message;
424 glong length = -1;
425 const GstSDPMedia *media1;
426 GstCaps *caps1, *caps2, *caps3;
427 GstCaps *result1, *result2, *result3;
428
429 gst_sdp_message_new (&message);
430 gst_sdp_message_parse_buffer ((guint8 *) sdp_rtcp_fb_all, length, message);
431
432 media1 = gst_sdp_message_get_media (message, 0);
433 fail_unless (media1 != NULL);
434
435 caps1 = gst_sdp_media_get_caps_from_media (media1, 100);
436 result1 = gst_caps_from_string (caps_video_rtcp_fb_all_pt_100);
437 fail_unless (gst_caps_is_strictly_equal (caps1, result1));
438
439 gst_caps_unref (result1);
440 gst_caps_unref (caps1);
441
442 caps2 = gst_sdp_media_get_caps_from_media (media1, 101);
443 result2 = gst_caps_from_string (caps_video_rtcp_fb_all_pt_101);
444 fail_unless (gst_caps_is_strictly_equal (caps2, result2));
445
446 gst_caps_unref (result2);
447 gst_caps_unref (caps2);
448
449 caps3 = gst_sdp_media_get_caps_from_media (media1, 102);
450 result3 = gst_caps_from_string (caps_video_rtcp_fb_all_pt_102);
451
452 fail_unless (gst_caps_is_strictly_equal (caps3, result3));
453
454 gst_caps_unref (result3);
455 gst_caps_unref (caps3);
456
457 gst_sdp_message_free (message);
458 }
459
460 GST_END_TEST
GST_START_TEST(media_from_caps_rtcp_fb_pt_100)461 GST_START_TEST (media_from_caps_rtcp_fb_pt_100)
462 {
463 GstSDPResult ret = GST_SDP_OK;
464 GstSDPMessage *message;
465 glong length = -1;
466 GstSDPMedia *media_caps;
467 const GstSDPMedia *media_sdp;
468 GstCaps *caps;
469 const gchar *attr_val_caps1, *attr_val_caps2, *attr_val_caps3;
470 const gchar *attr_val_sdp1, *attr_val_sdp2, *attr_val_sdp3;
471
472 caps = gst_caps_from_string (caps_video_rtcp_fb_pt_100);
473
474 gst_sdp_media_new (&media_caps);
475 fail_unless (media_caps != NULL);
476
477 ret = gst_sdp_media_set_media_from_caps (caps, media_caps);
478 fail_unless (ret == GST_SDP_OK);
479 gst_caps_unref (caps);
480
481 gst_sdp_message_new (&message);
482 gst_sdp_message_parse_buffer ((guint8 *) sdp_rtcp_fb, length, message);
483
484 media_sdp = gst_sdp_message_get_media (message, 0);
485 fail_unless (media_sdp != NULL);
486
487 attr_val_caps1 = gst_sdp_media_get_attribute_val_n (media_caps, "rtcp-fb", 0);
488 attr_val_caps2 = gst_sdp_media_get_attribute_val_n (media_caps, "rtcp-fb", 1);
489 attr_val_caps3 = gst_sdp_media_get_attribute_val_n (media_caps, "rtcp-fb", 2);
490
491 attr_val_sdp1 = gst_sdp_media_get_attribute_val_n (media_sdp, "rtcp-fb", 0);
492 attr_val_sdp2 = gst_sdp_media_get_attribute_val_n (media_sdp, "rtcp-fb", 1);
493 attr_val_sdp3 = gst_sdp_media_get_attribute_val_n (media_sdp, "rtcp-fb", 2);
494
495 fail_if (g_strcmp0 (attr_val_caps1, attr_val_sdp1) != 0);
496 fail_if (g_strcmp0 (attr_val_caps2, attr_val_sdp2) != 0);
497 fail_if (g_strcmp0 (attr_val_caps3, attr_val_sdp3) != 0);
498
499 gst_sdp_media_free (media_caps);
500 gst_sdp_message_free (message);
501 }
502
503 GST_END_TEST
GST_START_TEST(media_from_caps_rtcp_fb_pt_101)504 GST_START_TEST (media_from_caps_rtcp_fb_pt_101)
505 {
506 GstSDPResult ret = GST_SDP_OK;
507 GstSDPMessage *message;
508 glong length = -1;
509 GstSDPMedia *media_caps;
510 const GstSDPMedia *media_sdp;
511 GstCaps *caps;
512 const gchar *attr_val_caps1, *attr_val_sdp1;
513
514 caps = gst_caps_from_string (caps_video_rtcp_fb_pt_101);
515
516 gst_sdp_media_new (&media_caps);
517 fail_unless (media_caps != NULL);
518
519 ret = gst_sdp_media_set_media_from_caps (caps, media_caps);
520 fail_unless (ret == GST_SDP_OK);
521 gst_caps_unref (caps);
522
523 gst_sdp_message_new (&message);
524 gst_sdp_message_parse_buffer ((guint8 *) sdp_rtcp_fb, length, message);
525
526 media_sdp = gst_sdp_message_get_media (message, 0);
527 fail_unless (media_sdp != NULL);
528
529 attr_val_caps1 = gst_sdp_media_get_attribute_val (media_caps, "rtcp-fb");
530 attr_val_sdp1 = gst_sdp_media_get_attribute_val_n (media_sdp, "rtcp-fb", 3);
531
532 fail_if (g_strcmp0 (attr_val_caps1, attr_val_sdp1) != 0);
533
534 gst_sdp_media_free (media_caps);
535 gst_sdp_message_free (message);
536 }
537
538 GST_END_TEST
GST_START_TEST(caps_from_media_really_const)539 GST_START_TEST (caps_from_media_really_const)
540 {
541 GstSDPMessage *message;
542 glong length = -1;
543 const GstSDPMedia *media1;
544 gchar *serialized;
545 GstCaps *caps;
546
547 /* BUG: gst_sdp_media_get_caps_from_media() used to modify the media passed
548 * thus violating the const tag */
549
550 gst_sdp_message_new (&message);
551 gst_sdp_message_parse_buffer ((guint8 *) sdp, length, message);
552
553 serialized = gst_sdp_message_as_text (message);
554 fail_unless (g_strcmp0 (serialized, sdp) == 0);
555 g_free (serialized);
556
557 media1 = gst_sdp_message_get_media (message, 0);
558 fail_unless (media1 != NULL);
559
560 caps = gst_sdp_media_get_caps_from_media (media1, 96);
561
562 serialized = gst_sdp_message_as_text (message);
563 fail_unless (g_strcmp0 (serialized, sdp) == 0);
564 g_free (serialized);
565
566 gst_caps_unref (caps);
567
568 gst_sdp_message_free (message);
569 }
570
571 GST_END_TEST
572 /*
573 * End of test cases
574 */
575 static Suite *
sdp_suite(void)576 sdp_suite (void)
577 {
578 Suite *s = suite_create ("sdp");
579 TCase *tc_chain = tcase_create ("sdp");
580
581 suite_add_tcase (s, tc_chain);
582 tcase_add_test (tc_chain, copy);
583 tcase_add_test (tc_chain, boxed);
584 tcase_add_test (tc_chain, modify);
585 tcase_add_test (tc_chain, null);
586 tcase_add_test (tc_chain, caps_from_media);
587 tcase_add_test (tc_chain, caps_from_media_really_const);
588 tcase_add_test (tc_chain, media_from_caps);
589 tcase_add_test (tc_chain, caps_from_media_rtcp_fb);
590 tcase_add_test (tc_chain, caps_from_media_rtcp_fb_all);
591 tcase_add_test (tc_chain, media_from_caps_rtcp_fb_pt_100);
592 tcase_add_test (tc_chain, media_from_caps_rtcp_fb_pt_101);
593
594 return s;
595 }
596
597 GST_CHECK_MAIN (sdp);
598