1 /* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
3 * Copyright (C) 2012 Igalia S.L.
6 #include "test-utils.h"
8 SoupBuffer *index_buffer;
17 if (!g_file_get_contents (SRCDIR "/index.txt", &contents, &length, &error)) {
18 g_printerr ("Could not read index.txt: %s\n",
23 index_buffer = soup_buffer_new (SOUP_MEMORY_TAKE, contents, length);
27 register_gresource (void)
32 resource = g_resource_load ("soup-tests.gresource", &error);
34 g_printerr ("Could not load resource soup-tests.gresource: %s\n",
38 g_resources_register (resource);
39 g_resource_unref (resource);
43 check_results (GString *body)
45 if (body->len != index_buffer->length) {
46 debug_printf (1, " body length mismatch: expected %d, got %d\n",
47 (int)index_buffer->length, (int)body->len);
49 } else if (memcmp (body->str, index_buffer->data, body->len) != 0) {
50 debug_printf (1, " body data mismatch\n");
62 stream_closed (GObject *source, GAsyncResult *result, gpointer user_data)
64 GInputStream *in = G_INPUT_STREAM (source);
65 AsyncRequestData *data = user_data;
68 if (!g_input_stream_close_finish (in, result, &error)) {
69 debug_printf (1, " close failed: %s\n", error->message);
73 g_main_loop_quit (data->loop);
78 test_read_ready (GObject *source, GAsyncResult *result, gpointer user_data)
80 GInputStream *in = G_INPUT_STREAM (source);
81 AsyncRequestData *data = user_data;
85 nread = g_input_stream_read_finish (in, result, &error);
87 debug_printf (1, " g_input_stream_read failed: %s\n",
89 g_clear_error (&error);
90 g_input_stream_close (in, NULL, NULL);
94 } else if (nread == 0) {
95 g_input_stream_close_async (in, G_PRIORITY_DEFAULT, NULL,
100 g_string_append_len (data->body, data->buffer, nread);
101 g_input_stream_read_async (in, data->buffer, sizeof (data->buffer),
102 G_PRIORITY_DEFAULT, NULL,
103 test_read_ready, data);
107 async_request_sent (GObject *source, GAsyncResult *result, gpointer user_data)
110 AsyncRequestData *data = user_data;
111 GError *error = NULL;
113 in = soup_request_send_finish (SOUP_REQUEST (source), result, &error);
115 debug_printf (1, " soup_request_send_async failed: %s\n",
117 g_clear_error (&error);
122 g_input_stream_read_async (in, data->buffer, sizeof (data->buffer),
123 G_PRIORITY_DEFAULT, NULL,
124 test_read_ready, data);
128 do_async_request (SoupRequest *request)
130 AsyncRequestData data;
132 data.body = g_string_new (NULL);
133 soup_request_send_async (request, NULL, async_request_sent, &data);
135 data.loop = g_main_loop_new (soup_session_get_async_context (soup_request_get_session (request)), TRUE);
136 g_main_loop_run (data.loop);
137 g_main_loop_unref (data.loop);
139 check_results (data.body);
140 g_string_free (data.body, TRUE);
144 do_sync_request (SoupRequest *request)
150 GError *error = NULL;
152 in = soup_request_send (request, NULL, &error);
154 debug_printf (1, " soup_request_send failed: %s\n",
156 g_clear_error (&error);
161 body = g_string_new (NULL);
163 nread = g_input_stream_read (in, buffer, sizeof (buffer),
166 debug_printf (1, " g_input_stream_read failed: %s\n",
168 g_clear_error (&error);
172 g_string_append_len (body, buffer, nread);
175 if (!g_input_stream_close (in, NULL, &error)) {
176 debug_printf (1, " g_input_stream_close failed: %s\n",
178 g_clear_error (&error);
183 check_results (body);
184 g_string_free (body, TRUE);
188 do_request_file_test (SoupRequester *requester,
191 SoupRequest *request;
196 index = g_file_new_for_path (SRCDIR "/index.txt");
197 uri_string = g_file_get_uri (index);
198 g_object_unref (index);
200 uri = soup_uri_new (uri_string);
203 request = soup_requester_request_uri (requester, uri, NULL);
205 do_async_request (request);
207 do_sync_request (request);
208 g_object_unref (request);
214 do_request_data_test (SoupRequester *requester,
217 SoupRequest *request;
222 base64 = g_base64_encode ((const guchar *)index_buffer->data, index_buffer->length);
223 uri_string = g_strdup_printf ("data:text/plain;charset=utf8;base64,%s", base64);
226 uri = soup_uri_new (uri_string);
229 request = soup_requester_request_uri (requester, uri, NULL);
231 do_async_request (request);
233 do_sync_request (request);
234 g_object_unref (request);
240 do_request_gresource_test (SoupRequester *requester,
243 SoupRequest *request;
246 uri = soup_uri_new ("resource:///org/gnome/libsoup/tests/index.txt");
247 request = soup_requester_request_uri (requester, uri, NULL);
249 do_async_request (request);
251 do_sync_request (request);
252 g_object_unref (request);
258 main (int argc, char **argv)
260 SoupSession *session;
261 SoupRequester *requester;
263 test_init (argc, argv, NULL);
266 register_gresource ();
269 session = soup_test_session_new (SOUP_TYPE_SESSION_SYNC, NULL);
270 requester = soup_requester_new ();
271 soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
272 g_object_unref (requester);
274 do_request_file_test (requester, FALSE);
275 do_request_data_test (requester, FALSE);
276 do_request_gresource_test (requester, FALSE);
278 soup_test_session_abort_unref (session);
281 session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
282 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
284 requester = soup_requester_new ();
285 soup_session_add_feature (session, SOUP_SESSION_FEATURE (requester));
286 g_object_unref (requester);
288 do_request_file_test (requester, TRUE);
289 do_request_data_test (requester, TRUE);
290 do_request_gresource_test (requester, TRUE);
292 soup_test_session_abort_unref (session);