[libsoup] Test case



commit 8399b09808522aa91aed488f3f969d9d8f5d08e5
Author: Sergio Villar Senin <svillar igalia com>
Date:   Fri May 11 11:55:14 2012 +0200

    Test case
    
    https://bugzilla.gnome.org/show_bug.cgi?id=675865

 tests/proxy-test.c |   96 +++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 95 insertions(+), 1 deletions(-)
---
diff --git a/tests/proxy-test.c b/tests/proxy-test.c
index 27d8d2e..be315fa 100644
--- a/tests/proxy-test.c
+++ b/tests/proxy-test.c
@@ -1,3 +1,5 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
@@ -7,7 +9,10 @@
 #include <string.h>
 #include <unistd.h>
 
-#include "libsoup/soup.h"
+#define LIBSOUP_USE_UNSTABLE_REQUEST_API
+#include <libsoup/soup.h>
+#include <libsoup/soup-requester.h>
+#include <libsoup/soup-request-http.h>
 #include "test-utils.h"
 
 typedef struct {
@@ -82,6 +87,93 @@ set_close_on_connect (SoupSession *session, SoupMessage *msg,
 	}
 }
 
+
+static gboolean
+loop_idle_quit (gpointer loop)
+{
+	g_main_loop_quit (loop);
+	return FALSE;
+}
+
+static void
+request_completed (GObject *source, GAsyncResult *result, gpointer loop)
+{
+	SoupRequest *one = SOUP_REQUEST (source);
+	GError *error = NULL;
+
+	debug_printf (2, "  Request completed\n");
+	if (!soup_request_send_finish (one, result, &error)) {
+		debug_printf (1, "  Unexpected error on Request: %s\n",
+			      error->message);
+		errors++;
+	}
+	g_clear_error (&error);
+
+	g_idle_add (loop_idle_quit, loop);
+}
+
+static void
+test_url_new_api (const char *url, int proxy, guint expected, gboolean close)
+{
+	SoupSession *session;
+	SoupURI *proxy_uri;
+	SoupMessage *msg;
+	SoupRequester *requester;
+	SoupRequest *request;
+	GMainLoop *loop;
+
+	if (!tls_available && g_str_has_prefix (url, "https:"))
+		return;
+
+	debug_printf (1, "  GET (requester API) %s via %s%s\n", url, proxy_names[proxy],
+		      close ? " (with Connection: close)" : "");
+	if (proxy == UNAUTH_PROXY && expected != SOUP_STATUS_FORBIDDEN)
+		expected = SOUP_STATUS_PROXY_UNAUTHORIZED;
+
+	/* We create a new session for each request to ensure that
+	 * connections/auth aren't cached between tests.
+	 */
+	proxy_uri = soup_uri_new (proxies[proxy]);
+	session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
+					 SOUP_SESSION_ADD_FEATURE_BY_TYPE, SOUP_TYPE_REQUESTER,
+					 SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
+					 SOUP_SESSION_PROXY_URI, proxy_uri,
+					 NULL);
+	soup_uri_free (proxy_uri);
+	g_object_add_weak_pointer (G_OBJECT (session), (gpointer *)&session);
+
+	g_signal_connect (session, "authenticate",
+			  G_CALLBACK (authenticate), NULL);
+	if (close) {
+		g_signal_connect (session, "request-started",
+				  G_CALLBACK (set_close_on_connect), NULL);
+	}
+
+	requester = (SoupRequester *)soup_session_get_feature (session, SOUP_TYPE_REQUESTER);
+	request = soup_requester_request (requester, url, NULL);
+	msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
+
+	loop = g_main_loop_new (NULL, TRUE);
+	soup_request_send_async (request, NULL, request_completed, loop);
+	g_object_unref (request);
+
+	g_main_loop_run (loop);
+	g_main_loop_unref (loop);
+
+	if (msg->status_code != expected) {
+		debug_printf (1, "    GET failed: %d %s (expected %d)\n",
+			      msg->status_code, msg->reason_phrase,
+			      expected);
+		g_object_unref (msg);
+		errors++;
+		return;
+	}
+	g_object_unref (msg);
+
+	soup_test_session_abort_unref (session);
+}
+
+
 static void
 test_url (const char *url, int proxy, guint expected,
 	  gboolean sync, gboolean close)
@@ -154,6 +246,8 @@ run_test (int i, gboolean sync)
 	test_url (http_url, UNAUTH_PROXY, tests[i].final_status, sync, FALSE);
 	test_url (https_url, UNAUTH_PROXY, tests[i].final_status, sync, FALSE);
 
+	test_url_new_api (https_url, SIMPLE_PROXY, tests[i].final_status, FALSE);
+
 	g_free (http_url);
 	g_free (https_url);
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]