diff --git a/tests/check/gst/client.c b/tests/check/gst/client.c index b12e0adbfb..59d5972725 100644 --- a/tests/check/gst/client.c +++ b/tests/check/gst/client.c @@ -23,6 +23,109 @@ static gint cseq; +static gboolean +test_response_400 (GstRTSPClient * client, GstRTSPMessage * response, + gboolean close, gpointer user_data) +{ + GstRTSPStatusCode code; + const gchar *reason; + GstRTSPVersion version; + + fail_unless (gst_rtsp_message_get_type (response) == + GST_RTSP_MESSAGE_RESPONSE); + + fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, + &version) + == GST_RTSP_OK); + fail_unless (code == GST_RTSP_STS_BAD_REQUEST); + fail_unless (g_str_equal (reason, "Bad Request")); + fail_unless (version == GST_RTSP_VERSION_1_0); + + return TRUE; +} + +static gboolean +test_response_404 (GstRTSPClient * client, GstRTSPMessage * response, + gboolean close, gpointer user_data) +{ + GstRTSPStatusCode code; + const gchar *reason; + GstRTSPVersion version; + + fail_unless (gst_rtsp_message_get_type (response) == + GST_RTSP_MESSAGE_RESPONSE); + + fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, + &version) + == GST_RTSP_OK); + fail_unless (code == GST_RTSP_STS_NOT_FOUND); + fail_unless (g_str_equal (reason, "Not Found")); + fail_unless (version == GST_RTSP_VERSION_1_0); + + return TRUE; +} + +static gboolean +test_response_454 (GstRTSPClient * client, GstRTSPMessage * response, + gboolean close, gpointer user_data) +{ + GstRTSPStatusCode code; + const gchar *reason; + GstRTSPVersion version; + + fail_unless (gst_rtsp_message_get_type (response) == + GST_RTSP_MESSAGE_RESPONSE); + + fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, + &version) + == GST_RTSP_OK); + fail_unless (code == GST_RTSP_STS_SESSION_NOT_FOUND); + fail_unless (g_str_equal (reason, "Session Not Found")); + fail_unless (version == GST_RTSP_VERSION_1_0); + + return TRUE; +} + +GST_START_TEST (test_request) +{ + GstRTSPClient *client; + GstRTSPMessage request = { 0, }; + gchar *str; + + client = gst_rtsp_client_new (); + + /* OPTIONS with invalid url */ + fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_OPTIONS, + "foopy://padoop/") == GST_RTSP_OK); + str = g_strdup_printf ("%d", cseq); + gst_rtsp_message_add_header (&request, GST_RTSP_HDR_CSEQ, str); + g_free (str); + + gst_rtsp_client_set_send_func (client, test_response_400, NULL, NULL); + fail_unless (gst_rtsp_client_handle_message (client, + &request) == GST_RTSP_OK); + + gst_rtsp_message_unset (&request); + + /* OPTIONS with unknown session id */ + fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_OPTIONS, + "rtsp://localhost/test") == GST_RTSP_OK); + str = g_strdup_printf ("%d", cseq); + gst_rtsp_message_add_header (&request, GST_RTSP_HDR_CSEQ, str); + g_free (str); + gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SESSION, "foobar"); + + gst_rtsp_client_set_send_func (client, test_response_454, NULL, NULL); + fail_unless (gst_rtsp_client_handle_message (client, + &request) == GST_RTSP_OK); + + gst_rtsp_message_unset (&request); + + g_object_unref (client); +} + +GST_END_TEST; + static gboolean test_option_response_200 (GstRTSPClient * client, GstRTSPMessage * response, gboolean close, gpointer user_data) @@ -36,7 +139,6 @@ test_option_response_200 (GstRTSPClient * client, GstRTSPMessage * response, fail_unless (gst_rtsp_message_get_type (response) == GST_RTSP_MESSAGE_RESPONSE); - gst_rtsp_message_dump (response); fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, &version) == GST_RTSP_OK); @@ -63,28 +165,6 @@ test_option_response_200 (GstRTSPClient * client, GstRTSPMessage * response, return TRUE; } -static gboolean -test_option_response_454 (GstRTSPClient * client, GstRTSPMessage * response, - gboolean close, gpointer user_data) -{ - GstRTSPStatusCode code; - const gchar *reason; - GstRTSPVersion version; - - fail_unless (gst_rtsp_message_get_type (response) == - GST_RTSP_MESSAGE_RESPONSE); - gst_rtsp_message_dump (response); - - fail_unless (gst_rtsp_message_parse_response (response, &code, &reason, - &version) - == GST_RTSP_OK); - fail_unless (code == GST_RTSP_STS_SESSION_NOT_FOUND); - fail_unless (g_str_equal (reason, "Session Not Found")); - fail_unless (version == GST_RTSP_VERSION_1_0); - - return TRUE; -} - GST_START_TEST (test_options) { GstRTSPClient *client; @@ -101,24 +181,33 @@ GST_START_TEST (test_options) g_free (str); gst_rtsp_client_set_send_func (client, test_option_response_200, NULL, NULL); - gst_rtsp_message_dump (&request); fail_unless (gst_rtsp_client_handle_message (client, &request) == GST_RTSP_OK); gst_rtsp_message_unset (&request); - /* OPTIONS with unknown session id */ - fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_OPTIONS, + g_object_unref (client); +} + +GST_END_TEST; + +GST_START_TEST (test_describe) +{ + GstRTSPClient *client; + GstRTSPMessage request = { 0, }; + gchar *str; + + client = gst_rtsp_client_new (); + + /* simple DESCRIBE for non-existing url */ + fail_unless (gst_rtsp_message_init_request (&request, GST_RTSP_DESCRIBE, "rtsp://localhost/test") == GST_RTSP_OK); str = g_strdup_printf ("%d", cseq); gst_rtsp_message_add_header (&request, GST_RTSP_HDR_CSEQ, str); g_free (str); - gst_rtsp_message_add_header (&request, GST_RTSP_HDR_SESSION, "foobar"); - gst_rtsp_client_set_send_func (client, test_option_response_454, NULL, NULL); - gst_rtsp_message_dump (&request); + gst_rtsp_client_set_send_func (client, test_response_404, NULL, NULL); fail_unless (gst_rtsp_client_handle_message (client, &request) == GST_RTSP_OK); - gst_rtsp_message_unset (&request); g_object_unref (client); @@ -134,7 +223,9 @@ rtspclient_suite (void) suite_add_tcase (s, tc); tcase_set_timeout (tc, 20); + tcase_add_test (tc, test_request); tcase_add_test (tc, test_options); + tcase_add_test (tc, test_describe); return s; }