|
Packit Service |
ca3877 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include "test-utils.h"
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
typedef struct {
|
|
Packit Service |
ca3877 |
const char *explanation;
|
|
Packit Service |
ca3877 |
const char *url;
|
|
Packit Service |
ca3877 |
const guint final_status;
|
|
Packit Service |
ca3877 |
const char *bugref;
|
|
Packit Service |
ca3877 |
} SoupProxyTest;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static SoupProxyTest tests[] = {
|
|
Packit Service |
ca3877 |
{ "GET -> 200", "", SOUP_STATUS_OK, NULL },
|
|
Packit Service |
ca3877 |
{ "GET -> 404", "/not-found", SOUP_STATUS_NOT_FOUND, NULL },
|
|
Packit Service |
ca3877 |
{ "GET -> 401 -> 200", "/Basic/realm1/", SOUP_STATUS_OK, NULL },
|
|
Packit Service |
ca3877 |
{ "GET -> 401 -> 401", "/Basic/realm2/", SOUP_STATUS_UNAUTHORIZED, NULL },
|
|
Packit Service |
ca3877 |
{ "GET -> 403", "http://no-such-hostname.xx/", SOUP_STATUS_FORBIDDEN, "577532" },
|
|
Packit Service |
ca3877 |
{ "GET -> 200 (unproxied)", "http://localhost:47524/", SOUP_STATUS_OK, "700472" },
|
|
Packit Service |
ca3877 |
};
|
|
Packit Service |
ca3877 |
static const int ntests = sizeof (tests) / sizeof (tests[0]);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#define HTTP_SERVER "http://127.0.0.1:47524"
|
|
Packit Service |
ca3877 |
#define HTTPS_SERVER "https://127.0.0.1:47525"
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
enum {
|
|
Packit Service |
ca3877 |
SIMPLE_PROXY,
|
|
Packit Service |
ca3877 |
AUTH_PROXY,
|
|
Packit Service |
ca3877 |
UNAUTH_PROXY
|
|
Packit Service |
ca3877 |
};
|
|
Packit Service |
ca3877 |
static const char *proxies[] = {
|
|
Packit Service |
ca3877 |
"http://127.0.0.1:47526",
|
|
Packit Service |
ca3877 |
"http://127.0.0.1:47527",
|
|
Packit Service |
ca3877 |
"http://127.0.0.1:47528"
|
|
Packit Service |
ca3877 |
};
|
|
Packit Service |
ca3877 |
static const char *proxy_names[] = {
|
|
Packit Service |
ca3877 |
"simple proxy",
|
|
Packit Service |
ca3877 |
"authenticated proxy",
|
|
Packit Service |
ca3877 |
"unauthenticatable-to proxy"
|
|
Packit Service |
ca3877 |
};
|
|
Packit Service |
ca3877 |
static GProxyResolver *proxy_resolvers[3];
|
|
Packit Service |
ca3877 |
static const char *ignore_hosts[] = { "localhost", NULL };
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
authenticate (SoupSession *session, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
SoupAuth *auth, gboolean retrying, gpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
if (msg->status_code == SOUP_STATUS_UNAUTHORIZED) {
|
|
Packit Service |
ca3877 |
soup_test_assert (!soup_auth_is_for_proxy (auth),
|
|
Packit Service |
ca3877 |
"got proxy auth object for 401");
|
|
Packit Service |
ca3877 |
} else if (msg->status_code == SOUP_STATUS_PROXY_UNAUTHORIZED) {
|
|
Packit Service |
ca3877 |
soup_test_assert (soup_auth_is_for_proxy (auth),
|
|
Packit Service |
ca3877 |
"got regular auth object for 407");
|
|
Packit Service |
ca3877 |
} else {
|
|
Packit Service |
ca3877 |
soup_test_assert (FALSE,
|
|
Packit Service |
ca3877 |
"got authenticate signal with status %d\n",
|
|
Packit Service |
ca3877 |
msg->status_code);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (!retrying)
|
|
Packit Service |
ca3877 |
soup_auth_authenticate (auth, "user1", "realm1");
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
set_close_on_connect (SoupSession *session, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
SoupSocket *sock, gpointer user_data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
/* This is used to test that we can handle the server closing
|
|
Packit Service |
ca3877 |
* the connection when returning a 407 in response to a
|
|
Packit Service |
ca3877 |
* CONNECT. (Rude!)
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
if (msg->method == SOUP_METHOD_CONNECT) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Connection", "close");
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
test_url (const char *url, int proxy, guint expected,
|
|
Packit Service |
ca3877 |
gboolean sync, gboolean close)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
gboolean noproxy = !!strstr (url, "localhost");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (!tls_available && g_str_has_prefix (url, "https:"))
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " GET %s via %s%s\n", url, proxy_names[proxy],
|
|
Packit Service |
ca3877 |
close ? " (with Connection: close)" : "");
|
|
Packit Service |
ca3877 |
if (proxy == UNAUTH_PROXY && expected != SOUP_STATUS_FORBIDDEN && !noproxy)
|
|
Packit Service |
ca3877 |
expected = SOUP_STATUS_PROXY_UNAUTHORIZED;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* We create a new session for each request to ensure that
|
|
Packit Service |
ca3877 |
* connections/auth aren't cached between tests.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (sync ? SOUP_TYPE_SESSION_SYNC : SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_PROXY_RESOLVER, proxy_resolvers[proxy],
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_SSL_STRICT, FALSE,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "authenticate",
|
|
Packit Service |
ca3877 |
G_CALLBACK (authenticate), NULL);
|
|
Packit Service |
ca3877 |
if (close) {
|
|
Packit Service |
ca3877 |
/* FIXME g_test_bug ("611663") */
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "request-started",
|
|
Packit Service |
ca3877 |
G_CALLBACK (set_close_on_connect), NULL);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
msg = soup_message_new (SOUP_METHOD_GET, url);
|
|
Packit Service |
ca3877 |
if (!msg) {
|
|
Packit Service |
ca3877 |
g_printerr ("proxy-test: Could not parse URI\n");
|
|
Packit Service |
ca3877 |
exit (1);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_session_send_message (session, msg);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " %d %s\n", msg->status_code, msg->reason_phrase);
|
|
Packit Service |
ca3877 |
soup_test_assert_message_status (msg, expected);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
test_url_new_api (const char *url, int proxy, guint expected,
|
|
Packit Service |
ca3877 |
gboolean sync, gboolean close)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
SoupRequest *request;
|
|
Packit Service |
ca3877 |
GInputStream *stream;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
gboolean noproxy = !!strstr (url, "localhost");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* FIXME g_test_skip() FIXME g_test_bug ("675865") */
|
|
Packit Service |
ca3877 |
if (!tls_available && g_str_has_prefix (url, "https:"))
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " GET (request API) %s via %s%s\n", url, proxy_names[proxy],
|
|
Packit Service |
ca3877 |
close ? " (with Connection: close)" : "");
|
|
Packit Service |
ca3877 |
if (proxy == UNAUTH_PROXY && expected != SOUP_STATUS_FORBIDDEN && !noproxy)
|
|
Packit Service |
ca3877 |
expected = SOUP_STATUS_PROXY_UNAUTHORIZED;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* We create a new session for each request to ensure that
|
|
Packit Service |
ca3877 |
* connections/auth aren't cached between tests.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (sync ? SOUP_TYPE_SESSION_SYNC : SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_PROXY_RESOLVER, proxy_resolvers[proxy],
|
|
Packit Service |
ca3877 |
SOUP_SESSION_SSL_STRICT, FALSE,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "authenticate",
|
|
Packit Service |
ca3877 |
G_CALLBACK (authenticate), NULL);
|
|
Packit Service |
ca3877 |
if (close) {
|
|
Packit Service |
ca3877 |
/* FIXME g_test_bug ("611663") */
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "request-started",
|
|
Packit Service |
ca3877 |
G_CALLBACK (set_close_on_connect), NULL);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
request = soup_session_request (session, url, NULL);
|
|
Packit Service |
ca3877 |
msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
stream = soup_test_request_send (request, NULL, 0, &error);
|
|
Packit Service |
ca3877 |
g_assert_no_error (error);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (stream) {
|
|
Packit Service |
ca3877 |
soup_test_request_close_stream (request, stream, NULL, &error);
|
|
Packit Service |
ca3877 |
g_assert_no_error (error);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
g_object_unref (stream);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " %d %s\n", msg->status_code, msg->reason_phrase);
|
|
Packit Service |
ca3877 |
soup_test_assert_message_status (msg, expected);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
g_object_unref (request);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_proxy_test (SoupProxyTest *test, gboolean sync)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
char *http_url, *https_url;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (test->bugref)
|
|
Packit Service |
ca3877 |
g_test_bug (test->bugref);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (!strncmp (test->url, "http", 4)) {
|
|
Packit Service |
ca3877 |
SoupURI *uri;
|
|
Packit Service |
ca3877 |
guint port;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
http_url = g_strdup (test->url);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
uri = soup_uri_new (test->url);
|
|
Packit Service |
ca3877 |
port = uri->port;
|
|
Packit Service |
ca3877 |
soup_uri_set_scheme (uri, "https");
|
|
Packit Service |
ca3877 |
if (port)
|
|
Packit Service |
ca3877 |
soup_uri_set_port (uri, port + 1);
|
|
Packit Service |
ca3877 |
https_url = soup_uri_to_string (uri, FALSE);
|
|
Packit Service |
ca3877 |
soup_uri_free (uri);
|
|
Packit Service |
ca3877 |
} else {
|
|
Packit Service |
ca3877 |
http_url = g_strconcat (HTTP_SERVER, test->url, NULL);
|
|
Packit Service |
ca3877 |
https_url = g_strconcat (HTTPS_SERVER, test->url, NULL);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_url (http_url, SIMPLE_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (http_url, SIMPLE_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url (https_url, SIMPLE_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (https_url, SIMPLE_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_url (http_url, AUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (http_url, AUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url (https_url, AUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (https_url, AUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url (https_url, AUTH_PROXY, test->final_status, sync, TRUE);
|
|
Packit Service |
ca3877 |
test_url_new_api (https_url, AUTH_PROXY, test->final_status, sync, TRUE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_url (http_url, UNAUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (http_url, UNAUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url (https_url, UNAUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
test_url_new_api (https_url, UNAUTH_PROXY, test->final_status, sync, FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_free (http_url);
|
|
Packit Service |
ca3877 |
g_free (https_url);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_async_proxy_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyTest *test = (SoupProxyTest *)data;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_APACHE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
do_proxy_test (test, FALSE);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_sync_proxy_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupProxyTest *test = (SoupProxyTest *)data;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_APACHE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
do_proxy_test (test, TRUE);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
server_callback (SoupServer *server, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
const char *path, GHashTable *query,
|
|
Packit Service |
ca3877 |
SoupClientContext *context, gpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *uri = soup_message_get_uri (msg);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_message_set_status (msg, uri->fragment ? SOUP_STATUS_BAD_REQUEST : SOUP_STATUS_OK);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_proxy_fragment_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupURI *proxy_uri, *req_uri;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_APACHE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
proxy_uri = soup_uri_new (proxies[SIMPLE_PROXY]);
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_PROXY_URI, proxy_uri,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_uri_free (proxy_uri);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
req_uri = soup_uri_new_with_base (base_uri, "/#foo");
|
|
Packit Service |
ca3877 |
msg = soup_message_new_from_uri (SOUP_METHOD_GET, req_uri);
|
|
Packit Service |
ca3877 |
soup_uri_free (req_uri);
|
|
Packit Service |
ca3877 |
soup_session_send_message (session, msg);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_assert_message_status (msg, SOUP_STATUS_OK);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_proxy_redirect_test (void)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupURI *proxy_uri, *req_uri, *new_uri;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_test_bug ("631368");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_APACHE;
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_TLS;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
proxy_uri = soup_uri_new (proxies[SIMPLE_PROXY]);
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_PROXY_URI, proxy_uri,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_uri_free (proxy_uri);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
req_uri = soup_uri_new (HTTPS_SERVER);
|
|
Packit Service |
ca3877 |
soup_uri_set_path (req_uri, "/redirected");
|
|
Packit Service |
ca3877 |
msg = soup_message_new_from_uri (SOUP_METHOD_GET, req_uri);
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Connection", "close");
|
|
Packit Service |
ca3877 |
soup_session_send_message (session, msg);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
new_uri = soup_message_get_uri (msg);
|
|
Packit Service |
ca3877 |
soup_test_assert (strcmp (req_uri->path, new_uri->path) != 0,
|
|
Packit Service |
ca3877 |
"message was not redirected");
|
|
Packit Service |
ca3877 |
soup_uri_free (req_uri);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_assert_message_status (msg, SOUP_STATUS_OK);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_proxy_auth_request (const char *url, SoupSession *session, gboolean do_read)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupRequest *request;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
GInputStream *stream;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
request = soup_session_request (session, url, NULL);
|
|
Packit Service |
ca3877 |
msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (request));
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
stream = soup_test_request_send (request, NULL, 0, &error);
|
|
Packit Service |
ca3877 |
g_assert_no_error (error);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (do_read) {
|
|
Packit Service |
ca3877 |
char buffer[256];
|
|
Packit Service |
ca3877 |
gsize nread;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
do {
|
|
Packit Service |
ca3877 |
g_input_stream_read_all (stream, buffer, sizeof (buffer), &nread,
|
|
Packit Service |
ca3877 |
NULL, &error);
|
|
Packit Service |
ca3877 |
g_assert_no_error (error);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
} while (nread > 0);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_request_close_stream (request, stream, NULL, &error);
|
|
Packit Service |
ca3877 |
g_assert_no_error (error);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
g_object_unref (stream);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " %d %s\n", msg->status_code, msg->reason_phrase);
|
|
Packit Service |
ca3877 |
soup_test_assert_message_status (msg, SOUP_STATUS_OK);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
g_object_unref (request);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_proxy_auth_cache_test (void)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *url;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_test_bug ("756076");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
SOUP_TEST_SKIP_IF_NO_APACHE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
cache_dir = g_dir_make_tmp ("cache-test-XXXXXX", NULL);
|
|
Packit Service |
ca3877 |
debug_printf (2, " Caching to %s\n", cache_dir);
|
|
Packit Service |
ca3877 |
cache = soup_cache_new (cache_dir, SOUP_CACHE_SINGLE_USER);
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_PROXY_RESOLVER, proxy_resolvers[AUTH_PROXY],
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_ADD_FEATURE, cache,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "authenticate",
|
|
Packit Service |
ca3877 |
G_CALLBACK (authenticate), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
url = g_strconcat (HTTP_SERVER, "/Basic/realm1/", NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " GET %s via %s (from network)\n", url, proxy_names[AUTH_PROXY]);
|
|
Packit Service |
ca3877 |
do_proxy_auth_request (url, session, TRUE);
|
|
Packit Service |
ca3877 |
soup_cache_flush (cache);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " GET %s via %s (from cache)\n", url, proxy_names[AUTH_PROXY]);
|
|
Packit Service |
ca3877 |
do_proxy_auth_request (url, session, FALSE);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_free (url);
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
int
|
|
Packit Service |
ca3877 |
main (int argc, char **argv)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupServer *server;
|
|
Packit Service |
ca3877 |
SoupURI *base_uri;
|
|
Packit Service |
ca3877 |
char *path;
|
|
Packit Service |
ca3877 |
int i, ret;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_init (argc, argv, NULL);
|
|
Packit Service |
ca3877 |
apache_init ();
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
for (i = 0; i < 3; i++) {
|
|
Packit Service |
ca3877 |
proxy_resolvers[i] =
|
|
Packit Service |
ca3877 |
g_simple_proxy_resolver_new (proxies[i], (char **) ignore_hosts);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
server = soup_test_server_new (SOUP_TEST_SERVER_IN_THREAD);
|
|
Packit Service |
ca3877 |
soup_server_add_handler (server, NULL, server_callback, NULL, NULL);
|
|
Packit Service |
ca3877 |
base_uri = soup_test_server_get_uri (server, "http", NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
for (i = 0; i < ntests; i++) {
|
|
Packit Service |
ca3877 |
path = g_strdup_printf ("/proxy/async/%s", tests[i].explanation);
|
|
Packit Service |
ca3877 |
g_test_add_data_func (path, &tests[i], do_async_proxy_test);
|
|
Packit Service |
ca3877 |
g_free (path);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
for (i = 0; i < ntests; i++) {
|
|
Packit Service |
ca3877 |
path = g_strdup_printf ("/proxy/sync/%s", tests[i].explanation);
|
|
Packit Service |
ca3877 |
g_test_add_data_func (path, &tests[i], do_sync_proxy_test);
|
|
Packit Service |
ca3877 |
g_free (path);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_test_add_data_func ("/proxy/fragment", base_uri, do_proxy_fragment_test);
|
|
Packit Service |
ca3877 |
g_test_add_func ("/proxy/redirect", do_proxy_redirect_test);
|
|
Packit Service |
ca3877 |
g_test_add_func ("/proxy/auth-cache", do_proxy_auth_cache_test);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
ret = g_test_run ();
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_uri_free (base_uri);
|
|
Packit Service |
ca3877 |
soup_test_server_quit_unref (server);
|
|
Packit Service |
ca3877 |
for (i = 0; i < 3; i++)
|
|
Packit Service |
ca3877 |
g_object_unref (proxy_resolvers[i]);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_cleanup ();
|
|
Packit Service |
ca3877 |
return ret;
|
|
Packit Service |
ca3877 |
}
|