summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2016-07-26 15:01:05 +0200
committerTimm Bäder <mail@baedert.org>2017-02-21 17:21:19 +0100
commit5947a73f67d69196d1765a196fb884f96938d185 (patch)
treec3cf2a140c53f95559b027329dff862c22bbc213
parentb4c2f7aa0df63b00bc626724e87ca69a46a6210f (diff)
downloadlibrest-5947a73f67d69196d1765a196fb884f96938d185.tar.gz
tests/proxy-continuous: Use new rest_proxy_call_continuous
... and use TestServer.
-rw-r--r--tests/proxy-continuous.c63
1 files changed, 29 insertions, 34 deletions
diff --git a/tests/proxy-continuous.c b/tests/proxy-continuous.c
index d4c2e3f..4207e46 100644
--- a/tests/proxy-continuous.c
+++ b/tests/proxy-continuous.c
@@ -29,13 +29,11 @@
#include <rest/rest-proxy.h>
#include "test-server.h"
-static GMainLoop *loop = NULL;
-
#define NUM_CHUNKS 20
#define SIZE_CHUNK 4
static guint8 server_count = 0;
static guint8 client_count = 0;
-static TestServer *server;
+static TestServer *test_server;
static gboolean
send_chunks (gpointer user_data)
@@ -51,14 +49,13 @@ send_chunks (gpointer user_data)
}
soup_message_body_append (msg->response_body, SOUP_MEMORY_COPY, data, SIZE_CHUNK);
- soup_server_unpause_message (server->server, msg);
+ soup_server_unpause_message (test_server->server, msg);
- if (server_count == NUM_CHUNKS * SIZE_CHUNK)
- {
+ if (server_count == NUM_CHUNKS * SIZE_CHUNK) {
soup_message_body_complete (msg->response_body);
- return FALSE;
+ return G_SOURCE_REMOVE;
} else {
- return TRUE;
+ return G_SOURCE_CONTINUE;
}
}
@@ -67,13 +64,20 @@ server_callback (SoupServer *server, SoupMessage *msg,
const char *path, GHashTable *query,
SoupClientContext *client, gpointer user_data)
{
+ GSource *source;
+
g_assert_cmpstr (path, ==, "/stream");
soup_message_set_status (msg, SOUP_STATUS_OK);
soup_message_headers_set_encoding (msg->response_headers,
SOUP_ENCODING_CHUNKED);
soup_server_pause_message (server, msg);
- g_idle_add (send_chunks, msg);
+ /* The server is running in its own thread with its own GMainContext,
+ * so schedule the sending there */
+ source = g_idle_source_new ();
+ g_source_set_callback (source, send_chunks, msg, NULL);
+ g_source_attach (source, g_main_loop_get_context (test_server->main_loop));
+ g_source_unref (source);
}
static void
@@ -81,13 +85,11 @@ _call_continuous_cb (RestProxyCall *call,
const gchar *buf,
gsize len,
const GError *error,
- GObject *weak_object,
gpointer userdata)
{
guint i;
g_assert_no_error (error);
- g_assert (REST_IS_PROXY (weak_object));
if (buf == NULL && len == 0)
g_assert (client_count == NUM_CHUNKS * SIZE_CHUNK);
@@ -97,56 +99,49 @@ _call_continuous_cb (RestProxyCall *call,
g_assert_cmpint (buf[i], ==, client_count);
client_count++;
}
-
-
- if (client_count == NUM_CHUNKS * SIZE_CHUNK)
- g_main_loop_quit (loop);
}
static void
-stream_test (RestProxy *proxy)
+call_done_cb (GObject *source_object,
+ GAsyncResult *result,
+ gpointer user_data)
{
- RestProxyCall *call;
+ RestProxyCall *call = REST_PROXY_CALL (source_object);
+ GMainLoop *loop = user_data;
GError *error = NULL;
- gboolean result;
-
- call = rest_proxy_new_call (proxy);
- rest_proxy_call_set_function (call, "stream");
-
- result = rest_proxy_call_continuous (call,
- _call_continuous_cb,
- (GObject *)proxy,
- NULL,
- &error);
+ rest_proxy_call_continuous_finish (call, result, &error);
g_assert_no_error (error);
- g_assert (result);
- g_object_unref (call);
+ g_main_loop_quit (loop);
}
static void
continuous ()
{
- server = test_server_create (server_callback);
+ test_server = test_server_create (server_callback);
RestProxy *proxy;
RestProxyCall *call;
+ GMainLoop *loop;
- test_server_run (server);
+ test_server_run (test_server);
loop = g_main_loop_new (NULL, FALSE);
- proxy = rest_proxy_new (server->url, FALSE);
+ proxy = rest_proxy_new (test_server->url, FALSE);
call = rest_proxy_new_call (proxy);
rest_proxy_call_set_function (call, "stream");
rest_proxy_call_continuous (call,
_call_continuous_cb,
NULL,
call_done_cb,
- NULL);
+ loop);
g_main_loop_run (loop);
- g_free (url);
+
+ test_server_stop (test_server);
g_main_loop_unref (loop);
+ g_object_unref (call);
+ g_object_unref (proxy);
}
int