diff options
Diffstat (limited to 'tests/gtest/test-regression.c')
-rw-r--r-- | tests/gtest/test-regression.c | 122 |
1 files changed, 122 insertions, 0 deletions
diff --git a/tests/gtest/test-regression.c b/tests/gtest/test-regression.c index a68e44c..aabba51 100644 --- a/tests/gtest/test-regression.c +++ b/tests/gtest/test-regression.c @@ -248,6 +248,127 @@ void test_bgo682099 (void) * ============================================================================ */ +/* BEGIN Regression test + * https://bugzilla.gnome.org/show_bug.cgi?id=724030 + * ============================================================================ + * - Start a resource browser and send a two SSDP packets with different locations. + * - Check that there are 2 "resource-unavailable" signals. + * - Shut down the ResourceBrowser and assert that there is NO + * "resource-unavailable" signal. + */ +#define UUID_MISSED_BYE_BYE_1 "uuid:81909e94-ebf4-469e-ac68-81f2f18816ac" +#define USN_MISSED_BYE_BYE "urn:org-gupnp:device:RegressionTestMissedByeBye:2" +#define USN_MISSED_BYE_BYE_1 "urn:org-gupnp:device:RegressionTestMissedByeBye:1" +#define NT_MISSED_BYE_BYE_1 UUID_MISSED_BYE_BYE_1"::"USN_MISSED_BYE_BYE_1 +#define LOCATION_MISSED_BYE_BYE_1 "http://127.0.0.1:1234" +#define LOCATION_MISSED_BYE_BYE_2 "http://127.0.0.1:1235" + +char * +create_alive_message_bgo724030 (const char *location) +{ + char *msg; + + msg = g_strdup_printf (SSDP_ALIVE_MESSAGE, + 5, + location, + "", + "Linux/3.0 UPnP/1.0 GSSDPTesting/0.0.0", + NT_MISSED_BYE_BYE_1, + USN_MISSED_BYE_BYE_1); + + return msg; +} + +static gboolean +announce_ressource_bgo724030_1 (gpointer user_data) +{ + send_packet (create_alive_message_bgo724030 (LOCATION_MISSED_BYE_BYE_1)); + + return FALSE; +} + +static gboolean +announce_ressource_bgo724030_2 (gpointer user_data) +{ + send_packet (create_alive_message_bgo724030 (LOCATION_MISSED_BYE_BYE_2)); + + return FALSE; +} + +static void +resource_availabe_bgo724030_1 (GSSDPResourceBrowser *src, + const char *usn, + GList *locations, + gpointer user_data) +{ + g_assert_cmpstr (usn, ==, USN_MISSED_BYE_BYE_1); + g_assert_cmpstr ((const char *) locations->data, ==, LOCATION_MISSED_BYE_BYE_1); + g_main_loop_quit ((GMainLoop *) user_data); +} + +static void +resource_availabe_bgo724030_2 (GSSDPResourceBrowser *src, + const char *usn, + GList *locations, + gpointer user_data) +{ + g_assert_cmpstr (usn, ==, USN_MISSED_BYE_BYE_1); + g_assert_cmpstr ((const char *) locations->data, ==, LOCATION_MISSED_BYE_BYE_2); + g_main_loop_quit ((GMainLoop *) user_data); +} + +static void +resource_unavailabe_bgo724030 (GSSDPResourceBrowser *src, + const char *usn, + gpointer user_data) +{ + g_assert_cmpstr (usn, ==, USN_MISSED_BYE_BYE_1); + g_main_loop_quit ((GMainLoop *) user_data); +} + +void test_bgo724030 (void) +{ + GSSDPClient *dest; + GSSDPResourceBrowser *browser; + GError *error = NULL; + GMainLoop *loop; + gulong available_signal_id; + + loop = g_main_loop_new (NULL, FALSE); + + dest = gssdp_client_new (NULL, "lo", &error); + g_assert (dest != NULL); + g_assert (error == NULL); + + browser = gssdp_resource_browser_new (dest, USN_MISSED_BYE_BYE_1); + available_signal_id = g_signal_connect (browser, + "resource-available", + G_CALLBACK (resource_availabe_bgo724030_1), + loop); + g_signal_connect (browser, + "resource-unavailable", + G_CALLBACK (resource_unavailabe_bgo724030), + loop); + gssdp_resource_browser_set_active (browser, TRUE); + g_timeout_add_seconds (2, announce_ressource_bgo724030_1, NULL); + g_timeout_add_seconds (3, announce_ressource_bgo724030_2, NULL); + g_main_loop_run (loop); /* available */ + g_signal_handler_disconnect (browser, available_signal_id); + available_signal_id = g_signal_connect (browser, + "resource-available", + G_CALLBACK (resource_availabe_bgo724030_2), + loop); + g_main_loop_run (loop); /* unavailable + available */ + g_main_loop_run (loop); /* unavailable */ + unref_object(browser); +} + +/* END Regression test + * https://bugzilla.gnome.org/show_bug.cgi?id=724030 + * ============================================================================ + */ + + int main (int argc, char *argv[]) { #if !GLIB_CHECK_VERSION (2, 35, 0) @@ -258,6 +379,7 @@ int main (int argc, char *argv[]) if (g_test_slow ()) { g_test_add_func ("/bugs/gnome/673150", test_bgo673150); g_test_add_func ("/bugs/gnome/682099", test_bgo682099); + g_test_add_func ("/bugs/gnome/724030", test_bgo724030); } g_test_run (); |