summaryrefslogtreecommitdiff
path: root/tests/sniffing-test.c
diff options
context:
space:
mode:
authorDan Winship <danw@gnome.org>2012-07-25 09:20:32 -0400
committerDan Winship <danw@gnome.org>2012-12-10 17:14:57 +0100
commit53c270d0e2868fa5ad48ce864f10a9486b11a071 (patch)
tree87bd076bfe8fa4750c6eb69c99315cd355068400 /tests/sniffing-test.c
parent76883f68eaed736caa298a0177da9fbcef5f31e3 (diff)
downloadlibsoup-53c270d0e2868fa5ad48ce864f10a9486b11a071.tar.gz
SoupRequest: add soup_request_disable_feature()
Add soup_request_disable_feature(), which proxies to soup_message_disable_feature() for SoupRequestHTTP and is a no-op otherwise. Add SoupRequest tests to sniffing-test, which also tests soup_request_disable_feature() now.
Diffstat (limited to 'tests/sniffing-test.c')
-rw-r--r--tests/sniffing-test.c126
1 files changed, 75 insertions, 51 deletions
diff --git a/tests/sniffing-test.c b/tests/sniffing-test.c
index 0b5fe19f..e77154e1 100644
--- a/tests/sniffing-test.c
+++ b/tests/sniffing-test.c
@@ -233,13 +233,6 @@ got_chunk (SoupMessage *msg, SoupBuffer *chunk, gpointer data)
}
static void
-finished (SoupSession *session, SoupMessage *msg, gpointer data)
-{
- GMainLoop *loop = (GMainLoop*)data;
- g_main_loop_quit (loop);
-}
-
-static void
do_signals_test (gboolean should_content_sniff,
gboolean should_pause,
gboolean should_accumulate,
@@ -248,7 +241,6 @@ do_signals_test (gboolean should_content_sniff,
{
SoupURI *uri = soup_uri_new_with_base (base_uri, "/mbox");
SoupMessage *msg = soup_message_new_from_uri ("GET", uri);
- GMainLoop *loop = g_main_loop_new (NULL, TRUE);
char *contents;
gsize length;
GError *error = NULL;
@@ -283,10 +275,7 @@ do_signals_test (gboolean should_content_sniff,
"signal::content_sniffed", content_sniffed, GINT_TO_POINTER (should_pause),
NULL);
- g_object_ref (msg);
- soup_session_queue_message (session, msg, finished, loop);
-
- g_main_loop_run (loop);
+ soup_session_send_message (session, msg);
if (!should_content_sniff &&
g_object_get_data (G_OBJECT (msg), "content-sniffed")) {
@@ -338,7 +327,6 @@ do_signals_test (gboolean should_content_sniff,
soup_uri_free (uri);
g_object_unref (msg);
- g_main_loop_unref (loop);
}
static void
@@ -347,91 +335,124 @@ sniffing_content_sniffed (SoupMessage *msg, const char *content_type,
{
char **sniffed_type = (char **)data;
GString *full_header;
- GList *keys;
- GList *iter;
+ GHashTableIter iter;
+ gpointer key, value;
full_header = g_string_new (content_type);
- keys = g_hash_table_get_keys (params);
- for (iter = keys; iter != NULL; iter = iter->next) {
- const gchar *value = (const gchar*) g_hash_table_lookup (params, iter->data);
-
- g_string_append (full_header, "; ");
+ g_hash_table_iter_init (&iter, params);
+ while (g_hash_table_iter_next (&iter, &key, &value)) {
+ if (full_header->len)
+ g_string_append (full_header, "; ");
soup_header_g_string_append_param (full_header,
- (const gchar*) iter->data,
- value);
+ (const char *) key,
+ (const char *) value);
}
- *sniffed_type = full_header->str;
-
- g_string_free (full_header, FALSE);
- g_list_free (keys);
+ *sniffed_type = g_string_free (full_header, FALSE);
}
static void
test_sniffing (const char *path, const char *expected_type)
{
- SoupURI *uri = soup_uri_new_with_base (base_uri, path);
- SoupMessage *msg = soup_message_new_from_uri ("GET", uri);
- GMainLoop *loop = g_main_loop_new (NULL, TRUE);
+ SoupURI *uri;
+ SoupMessage *msg;
+ SoupRequest *req;
+ GInputStream *stream;
char *sniffed_type = NULL;
+ GError *error = NULL;
debug_printf (1, "test_sniffing(\"%s\", \"%s\")\n", path, expected_type);
+ uri = soup_uri_new_with_base (base_uri, path);
+ msg = soup_message_new_from_uri ("GET", uri);
+
g_signal_connect (msg, "content-sniffed",
G_CALLBACK (sniffing_content_sniffed), &sniffed_type);
- g_object_ref (msg);
-
- soup_session_queue_message (session, msg, finished, loop);
-
- g_main_loop_run (loop);
-
+ soup_session_send_message (session, msg);
if (!sniffed_type) {
debug_printf (1, " message was not sniffed!\n");
errors++;
} else if (strcmp (sniffed_type, expected_type) != 0) {
- debug_printf (1, " sniffing failed! expected %s, got %s\n",
+ debug_printf (1, " message sniffing failed! expected %s, got %s\n",
expected_type, sniffed_type);
errors++;
}
g_free (sniffed_type);
+ g_object_unref (msg);
+
+ req = soup_session_request_uri (session, uri, NULL);
+ stream = soup_test_request_send (req, NULL, &error);
+ if (stream)
+ soup_test_request_close_stream (req, stream, NULL, &error);
+ if (error) {
+ debug_printf (1, " request failed: %s\n", error->message);
+ g_clear_error (&error);
+ } else {
+ const char *req_sniffed_type;
+
+ req_sniffed_type = soup_request_get_content_type (req);
+ if (strcmp (req_sniffed_type, expected_type) != 0) {
+ debug_printf (1, " request sniffing failed! expected %s, got %s\n",
+ expected_type, req_sniffed_type);
+ errors++;
+ }
+ }
+ g_object_unref (req);
soup_uri_free (uri);
- g_object_unref (msg);
- g_main_loop_unref (loop);
}
static void
test_disabled (const char *path)
{
- SoupURI *uri = soup_uri_new_with_base (base_uri, path);
- SoupMessage *msg = soup_message_new_from_uri ("GET", uri);
- GMainLoop *loop = g_main_loop_new (NULL, TRUE);
+ SoupURI *uri;
+ SoupMessage *msg;
+ SoupRequest *req;
+ GInputStream *stream;
char *sniffed_type = NULL;
-
- soup_message_disable_feature (msg, SOUP_TYPE_CONTENT_SNIFFER);
+ GError *error = NULL;
debug_printf (1, "test_disabled(\"%s\")\n", path);
- g_signal_connect (msg, "content-sniffed",
- G_CALLBACK (sniffing_content_sniffed), &sniffed_type);
+ uri = soup_uri_new_with_base (base_uri, path);
- g_object_ref (msg);
+ msg = soup_message_new_from_uri ("GET", uri);
+ soup_message_disable_feature (msg, SOUP_TYPE_CONTENT_SNIFFER);
- soup_session_queue_message (session, msg, finished, loop);
+ g_signal_connect (msg, "content-sniffed",
+ G_CALLBACK (sniffing_content_sniffed), &sniffed_type);
- g_main_loop_run (loop);
+ soup_session_send_message (session, msg);
if (sniffed_type) {
debug_printf (1, " message was sniffed!\n");
errors++;
g_free (sniffed_type);
}
+ g_object_unref (msg);
+
+ req = soup_session_request_uri (session, uri, NULL);
+ soup_request_disable_feature (req, SOUP_TYPE_CONTENT_SNIFFER);
+ stream = soup_test_request_send (req, NULL, &error);
+ if (stream)
+ soup_test_request_close_stream (req, stream, NULL, &error);
+ if (error) {
+ debug_printf (1, " request failed: %s\n", error->message);
+ g_clear_error (&error);
+ } else {
+ const char *sniffed_content_type;
+
+ sniffed_content_type = soup_request_get_content_type (req);
+ if (sniffed_content_type != NULL) {
+ debug_printf (1, " request was sniffed!\n");
+ errors++;
+ }
+ }
+ g_object_unref (req);
soup_uri_free (uri);
- g_object_unref (msg);
- g_main_loop_unref (loop);
}
int
@@ -446,7 +467,9 @@ main (int argc, char **argv)
base_uri = soup_uri_new ("http://127.0.0.1/");
soup_uri_set_port (base_uri, soup_server_get_port (server));
- session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC, NULL);
+ session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
+ SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
+ NULL);
/* No sniffer, no content_sniffed should be emitted */
do_signals_test (FALSE, FALSE, FALSE, FALSE, FALSE);
@@ -552,6 +575,7 @@ main (int argc, char **argv)
soup_test_session_abort_unref (session);
soup_test_server_quit_unref (server);
+
test_cleanup ();
return errors != 0;
}