Add new API for setting/getting maximum multicast ttl value
[platform/upstream/gstreamer.git] / tests / check / gst / mediafactory.c
index 75667cf..ba1719e 100644 (file)
@@ -29,7 +29,8 @@ GST_START_TEST (test_parse_error)
   factory = gst_rtsp_media_factory_new ();
 
   gst_rtsp_media_factory_set_launch (factory, "foo");
-  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
   ASSERT_CRITICAL (gst_rtsp_media_factory_create_element (factory, url));
   ASSERT_CRITICAL (gst_rtsp_media_factory_construct (factory, url));
 
@@ -47,7 +48,8 @@ GST_START_TEST (test_launch)
 
   factory = gst_rtsp_media_factory_new ();
   fail_if (gst_rtsp_media_factory_is_shared (factory));
-  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
 
   gst_rtsp_media_factory_set_launch (factory,
       "( videotestsrc ! rtpvrawpay pt=96 name=pay0 )");
@@ -71,7 +73,8 @@ GST_START_TEST (test_launch_construct)
 
   factory = gst_rtsp_media_factory_new ();
   fail_if (gst_rtsp_media_factory_is_shared (factory));
-  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
 
   gst_rtsp_media_factory_set_launch (factory,
       "( videotestsrc ! rtpvrawpay pt=96 name=pay0 )");
@@ -103,7 +106,8 @@ GST_START_TEST (test_shared)
   gst_rtsp_media_factory_set_shared (factory, TRUE);
   fail_unless (gst_rtsp_media_factory_is_shared (factory));
 
-  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
 
   gst_rtsp_media_factory_set_launch (factory,
       "( videotestsrc ! rtpvrawpay pt=96 name=pay0 )");
@@ -141,7 +145,8 @@ GST_START_TEST (test_addresspool)
 
   factory = gst_rtsp_media_factory_new ();
   gst_rtsp_media_factory_set_shared (factory, TRUE);
-  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
 
   gst_rtsp_media_factory_set_launch (factory,
       "( videotestsrc ! rtpvrawpay pt=96 name=pay0 "
@@ -178,7 +183,7 @@ GST_START_TEST (test_addresspool)
   fail_unless (pool == tmppool);
   g_object_unref (tmppool);
 
-  addr = gst_rtsp_stream_get_address (stream);
+  addr = gst_rtsp_stream_get_multicast_address (stream, G_SOCKET_FAMILY_IPV4);
   fail_unless (addr != NULL);
   fail_unless (addr->port == 5000);
   fail_unless (addr->n_ports == 2);
@@ -192,7 +197,7 @@ GST_START_TEST (test_addresspool)
   fail_unless (pool == tmppool);
   g_object_unref (tmppool);
 
-  addr = gst_rtsp_stream_get_address (stream);
+  addr = gst_rtsp_stream_get_multicast_address (stream, G_SOCKET_FAMILY_IPV4);
   fail_unless (addr == NULL);
 
 
@@ -205,6 +210,167 @@ GST_START_TEST (test_addresspool)
 
 GST_END_TEST;
 
+GST_START_TEST (test_permissions)
+{
+  GstRTSPMediaFactory *factory;
+  GstRTSPPermissions *perms;
+  GstRTSPMedia *media;
+  GstRTSPUrl *url;
+
+  factory = gst_rtsp_media_factory_new ();
+  fail_if (gst_rtsp_media_factory_is_shared (factory));
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
+
+  gst_rtsp_media_factory_set_launch (factory,
+      "( videotestsrc ! rtpvrawpay pt=96 name=pay0 )");
+
+  gst_rtsp_media_factory_add_role (factory, "admin",
+      "media.factory.access", G_TYPE_BOOLEAN, TRUE,
+      "media.factory.construct", G_TYPE_BOOLEAN, TRUE, NULL);
+
+  perms = gst_rtsp_media_factory_get_permissions (factory);
+  fail_unless (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.access"));
+  fail_unless (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.construct"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "missing",
+          "media.factory.access"));
+  gst_rtsp_permissions_unref (perms);
+
+  perms = gst_rtsp_permissions_new ();
+  gst_rtsp_permissions_add_role (perms, "user",
+      "media.factory.access", G_TYPE_BOOLEAN, TRUE,
+      "media.factory.construct", G_TYPE_BOOLEAN, FALSE, NULL);
+  gst_rtsp_media_factory_set_permissions (factory, perms);
+  gst_rtsp_permissions_unref (perms);
+
+  perms = gst_rtsp_media_factory_get_permissions (factory);
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.access"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.construct"));
+  fail_unless (gst_rtsp_permissions_is_allowed (perms, "user",
+          "media.factory.access"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "user",
+          "media.factory.construct"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "missing",
+          "media.factory.access"));
+  gst_rtsp_permissions_unref (perms);
+
+  media = gst_rtsp_media_factory_construct (factory, url);
+  fail_unless (GST_IS_RTSP_MEDIA (media));
+  perms = gst_rtsp_media_get_permissions (media);
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.access"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "admin",
+          "media.factory.construct"));
+  fail_unless (gst_rtsp_permissions_is_allowed (perms, "user",
+          "media.factory.access"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "user",
+          "media.factory.construct"));
+  fail_if (gst_rtsp_permissions_is_allowed (perms, "missing",
+          "media.factory.access"));
+  gst_rtsp_permissions_unref (perms);
+  g_object_unref (media);
+
+  gst_rtsp_url_free (url);
+  g_object_unref (factory);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_reset)
+{
+  GstRTSPMediaFactory *factory;
+  GstRTSPMedia *media;
+  GstRTSPUrl *url;
+
+  factory = gst_rtsp_media_factory_new ();
+  fail_if (gst_rtsp_media_factory_is_shared (factory));
+  gst_rtsp_url_parse ("rtsp://localhost:8554/test", &url);
+
+  gst_rtsp_media_factory_set_launch (factory,
+      "( videotestsrc ! rtpvrawpay pt=96 name=pay0 )");
+
+  media = gst_rtsp_media_factory_construct (factory, url);
+  fail_unless (GST_IS_RTSP_MEDIA (media));
+  fail_if (gst_rtsp_media_get_suspend_mode (media) !=
+      GST_RTSP_SUSPEND_MODE_NONE);
+  g_object_unref (media);
+
+  gst_rtsp_media_factory_set_suspend_mode (factory,
+      GST_RTSP_SUSPEND_MODE_RESET);
+
+  media = gst_rtsp_media_factory_construct (factory, url);
+  fail_unless (GST_IS_RTSP_MEDIA (media));
+  fail_if (gst_rtsp_media_get_suspend_mode (media) !=
+      GST_RTSP_SUSPEND_MODE_RESET);
+  g_object_unref (media);
+
+  gst_rtsp_url_free (url);
+  g_object_unref (factory);
+}
+
+GST_END_TEST;
+
+GST_START_TEST (test_mcast_ttl)
+{
+  GstRTSPMediaFactory *factory;
+  GstElement *element;
+  GstRTSPMedia *media;
+  GstRTSPUrl *url;
+  GstRTSPStream *stream;
+
+  factory = gst_rtsp_media_factory_new ();
+  gst_rtsp_media_factory_set_shared (factory, TRUE);
+  fail_unless (gst_rtsp_url_parse ("rtsp://localhost:8554/test",
+          &url) == GST_RTSP_OK);
+
+  gst_rtsp_media_factory_set_launch (factory,
+      "( videotestsrc ! rtpvrawpay pt=96 name=pay0 "
+      " audiotestsrc ! audioconvert ! rtpL16pay name=pay1 )");
+
+  /* try to set an invalid ttl and make sure that the default ttl value (255) is
+   * set */
+  gst_rtsp_media_factory_set_max_mcast_ttl (factory, 0);
+  fail_unless (gst_rtsp_media_factory_get_max_mcast_ttl (factory) == 255);
+  gst_rtsp_media_factory_set_max_mcast_ttl (factory, 300);
+  fail_unless (gst_rtsp_media_factory_get_max_mcast_ttl (factory) == 255);
+
+  /* set a valid ttl value */
+  gst_rtsp_media_factory_set_max_mcast_ttl (factory, 3);
+  fail_unless (gst_rtsp_media_factory_get_max_mcast_ttl (factory) == 3);
+
+  element = gst_rtsp_media_factory_create_element (factory, url);
+  fail_unless (GST_IS_BIN (element));
+  fail_if (GST_IS_PIPELINE (element));
+  gst_object_unref (element);
+
+  media = gst_rtsp_media_factory_construct (factory, url);
+  fail_unless (GST_IS_RTSP_MEDIA (media));
+
+  fail_unless (gst_rtsp_media_n_streams (media) == 2);
+  fail_unless (gst_rtsp_media_get_max_mcast_ttl (media) == 3);
+
+  /* verify that the correct ttl value has been propageted to the media
+   * streams */
+  stream = gst_rtsp_media_get_stream (media, 0);
+  fail_unless (stream != NULL);
+  fail_unless (gst_rtsp_stream_get_max_mcast_ttl (stream) == 3);
+
+  stream = gst_rtsp_media_get_stream (media, 1);
+  fail_unless (stream != NULL);
+  fail_unless (gst_rtsp_stream_get_max_mcast_ttl (stream) == 3);
+
+  g_object_unref (media);
+
+  gst_rtsp_url_free (url);
+  g_object_unref (factory);
+}
+
+GST_END_TEST;
+
 static Suite *
 rtspmediafactory_suite (void)
 {
@@ -218,6 +384,9 @@ rtspmediafactory_suite (void)
   tcase_add_test (tc, test_launch_construct);
   tcase_add_test (tc, test_shared);
   tcase_add_test (tc, test_addresspool);
+  tcase_add_test (tc, test_permissions);
+  tcase_add_test (tc, test_reset);
+  tcase_add_test (tc, test_mcast_ttl);
 
   return s;
 }