---
 server/tests/test-listen.c | 46 +++++++++++++++++++++++++++++++++++++++++++---
 1 file changed, 43 insertions(+), 3 deletions(-)

diff --git a/server/tests/test-listen.c b/server/tests/test-listen.c
index 052dc0b8f..562f07487 100644
--- a/server/tests/test-listen.c
+++ b/server/tests/test-listen.c
@@ -98,7 +98,27 @@ static gpointer check_magic_thread(gpointer data)
     return NULL;
 }
 
-static GThread *fake_client_new(const char *hostname, int port)
+static gpointer check_no_connect_thread(gpointer data)
+{
+    GError *error = NULL;
+    GSocketConnectable *connectable = G_SOCKET_CONNECTABLE(data);
+    GIOStream *stream;
+    SpiceTimer *exit_mainloop_timer;
+
+    stream = fake_client_connect(connectable, &error);
+    g_assert(error != NULL);
+    g_assert(stream == NULL);
+    g_clear_error(&error);
+
+    g_object_unref(connectable);
+    exit_mainloop_timer = core->timer_add(exit_mainloop_cb, NULL);
+    core->timer_start(exit_mainloop_timer, 0);
+
+    return NULL;
+}
+
+
+static GThread *fake_client_new(GThreadFunc thread_func, const char *hostname, 
int port)
 {
     GSocketConnectable *connectable;
 
@@ -107,7 +127,7 @@ static GThread *fake_client_new(const char *hostname, int 
port)
     connectable = g_network_address_new(hostname, port);
 
     /* check_magic_thread will assume ownership of 'connectable' */
-    return g_thread_new("fake-client-thread", check_magic_thread, connectable);
+    return g_thread_new("fake-client-thread", thread_func, connectable);
 }
 
 static void test_connect_plain(void)
@@ -125,7 +145,7 @@ static void test_connect_plain(void)
     g_assert_cmpint(result, ==, 0);
 
     /* fake client */
-    thread = fake_client_new("localhost", 5701);
+    thread = fake_client_new(check_magic_thread, "localhost", 5701);
 
     basic_event_loop_mainloop();
 
@@ -137,10 +157,30 @@ static void test_connect_plain(void)
     spice_server_destroy(server);
 }
 
+static void test_connect_ko(void)
+{
+    GThread *thread;
+
+    core = basic_event_loop_init();
+
+    /* fake client */
+    thread = fake_client_new(check_no_connect_thread, "localhost", 5701);
+
+    basic_event_loop_mainloop();
+
+    g_assert_null(g_thread_join(thread));
+
+    g_thread_unref(thread);
+    basic_event_loop_destroy();
+    core = NULL;
+}
+
 int main(int argc, char **argv)
 {
     g_test_init(&argc, &argv, NULL);
+
     g_test_add_func("/server/listen/connect_plain", test_connect_plain);
+    g_test_add_func("/server/listen/connect_ko", test_connect_ko);
 
     return g_test_run();
 }
-- 
2.14.3

_______________________________________________
Spice-devel mailing list
Spice-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/spice-devel

Reply via email to