|
Packit Service |
ca3877 |
/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
|
|
Packit Service |
ca3877 |
/*
|
|
Packit Service |
ca3877 |
* Copyright 2012 Red Hat, Inc.
|
|
Packit Service |
ca3877 |
*/
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
#include "test-utils.h"
|
|
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 |
const char *last_modified, *etag;
|
|
Packit Service |
ca3877 |
const char *header;
|
|
Packit Service |
ca3877 |
guint status = SOUP_STATUS_OK;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (msg->method != SOUP_METHOD_GET && msg->method != SOUP_METHOD_POST) {
|
|
Packit Service |
ca3877 |
soup_message_set_status (msg, SOUP_STATUS_NOT_IMPLEMENTED);
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires");
|
|
Packit Service |
ca3877 |
if (header) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->response_headers,
|
|
Packit Service |
ca3877 |
"Expires",
|
|
Packit Service |
ca3877 |
header);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control");
|
|
Packit Service |
ca3877 |
if (header) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->response_headers,
|
|
Packit Service |
ca3877 |
"Cache-Control",
|
|
Packit Service |
ca3877 |
header);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
last_modified = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified");
|
|
Packit Service |
ca3877 |
if (last_modified) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->response_headers,
|
|
Packit Service |
ca3877 |
"Last-Modified",
|
|
Packit Service |
ca3877 |
last_modified);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
etag = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Test-Set-ETag");
|
|
Packit Service |
ca3877 |
if (etag) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->response_headers,
|
|
Packit Service |
ca3877 |
"ETag",
|
|
Packit Service |
ca3877 |
etag);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"If-Modified-Since");
|
|
Packit Service |
ca3877 |
if (header && last_modified) {
|
|
Packit Service |
ca3877 |
SoupDate *date;
|
|
Packit Service |
ca3877 |
time_t lastmod, check;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
date = soup_date_new_from_string (last_modified);
|
|
Packit Service |
ca3877 |
lastmod = soup_date_to_time_t (date);
|
|
Packit Service |
ca3877 |
soup_date_free (date);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
date = soup_date_new_from_string (header);
|
|
Packit Service |
ca3877 |
check = soup_date_to_time_t (date);
|
|
Packit Service |
ca3877 |
soup_date_free (date);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (lastmod <= check)
|
|
Packit Service |
ca3877 |
status = SOUP_STATUS_NOT_MODIFIED;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"If-None-Match");
|
|
Packit Service |
ca3877 |
if (header && etag) {
|
|
Packit Service |
ca3877 |
if (!strcmp (header, etag))
|
|
Packit Service |
ca3877 |
status = SOUP_STATUS_NOT_MODIFIED;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header = soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"Test-Set-My-Header");
|
|
Packit Service |
ca3877 |
if (header) {
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->response_headers,
|
|
Packit Service |
ca3877 |
"My-Header",
|
|
Packit Service |
ca3877 |
header);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (status == SOUP_STATUS_OK) {
|
|
Packit Service |
ca3877 |
GChecksum *sum;
|
|
Packit Service |
ca3877 |
const char *body;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
sum = g_checksum_new (G_CHECKSUM_SHA256);
|
|
Packit Service |
ca3877 |
g_checksum_update (sum, (guchar *)path, strlen (path));
|
|
Packit Service |
ca3877 |
if (last_modified)
|
|
Packit Service |
ca3877 |
g_checksum_update (sum, (guchar *)last_modified, strlen (last_modified));
|
|
Packit Service |
ca3877 |
if (etag)
|
|
Packit Service |
ca3877 |
g_checksum_update (sum, (guchar *)etag, strlen (etag));
|
|
Packit Service |
ca3877 |
body = g_checksum_get_string (sum);
|
|
Packit Service |
ca3877 |
soup_message_set_response (msg, "text/plain",
|
|
Packit Service |
ca3877 |
SOUP_MEMORY_COPY,
|
|
Packit Service |
ca3877 |
body, strlen (body) + 1);
|
|
Packit Service |
ca3877 |
g_checksum_free (sum);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
soup_message_set_status (msg, status);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static gboolean
|
|
Packit Service |
ca3877 |
is_network_stream (GInputStream *stream)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
while (G_IS_FILTER_INPUT_STREAM (stream))
|
|
Packit Service |
ca3877 |
stream = G_FILTER_INPUT_STREAM (stream)->base_stream;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return !G_IS_FILE_INPUT_STREAM (stream);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static char *do_request (SoupSession *session,
|
|
Packit Service |
ca3877 |
SoupURI *base_uri,
|
|
Packit Service |
ca3877 |
const char *method,
|
|
Packit Service |
ca3877 |
const char *path,
|
|
Packit Service |
ca3877 |
SoupMessageHeaders *response_headers,
|
|
Packit Service |
ca3877 |
...) G_GNUC_NULL_TERMINATED;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static gboolean last_request_hit_network;
|
|
Packit Service |
ca3877 |
static gboolean last_request_validated;
|
|
Packit Service |
ca3877 |
static gboolean last_request_unqueued;
|
|
Packit Service |
ca3877 |
static guint cancelled_requests;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
copy_headers (const char *name,
|
|
Packit Service |
ca3877 |
const char *value,
|
|
Packit Service |
ca3877 |
gpointer user_data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupMessageHeaders *headers = (SoupMessageHeaders *) user_data;
|
|
Packit Service |
ca3877 |
soup_message_headers_append (headers, name, value);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static char *
|
|
Packit Service |
ca3877 |
do_request (SoupSession *session,
|
|
Packit Service |
ca3877 |
SoupURI *base_uri,
|
|
Packit Service |
ca3877 |
const char *method,
|
|
Packit Service |
ca3877 |
const char *path,
|
|
Packit Service |
ca3877 |
SoupMessageHeaders *response_headers,
|
|
Packit Service |
ca3877 |
...)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupRequestHTTP *req;
|
|
Packit Service |
ca3877 |
SoupMessage *msg;
|
|
Packit Service |
ca3877 |
GInputStream *stream;
|
|
Packit Service |
ca3877 |
SoupURI *uri;
|
|
Packit Service |
ca3877 |
va_list ap;
|
|
Packit Service |
ca3877 |
const char *header, *value;
|
|
Packit Service |
ca3877 |
char buf[256];
|
|
Packit Service |
ca3877 |
gsize nread;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
last_request_validated = last_request_hit_network = FALSE;
|
|
Packit Service |
ca3877 |
last_request_unqueued = FALSE;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
uri = soup_uri_new_with_base (base_uri, path);
|
|
Packit Service |
ca3877 |
req = soup_session_request_http_uri (session, method, uri, NULL);
|
|
Packit Service |
ca3877 |
soup_uri_free (uri);
|
|
Packit Service |
ca3877 |
msg = soup_request_http_get_message (req);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
va_start (ap, response_headers);
|
|
Packit Service |
ca3877 |
while ((header = va_arg (ap, const char *))) {
|
|
Packit Service |
ca3877 |
value = va_arg (ap, const char *);
|
|
Packit Service |
ca3877 |
soup_message_headers_append (msg->request_headers,
|
|
Packit Service |
ca3877 |
header, value);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
va_end (ap);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
stream = soup_test_request_send (SOUP_REQUEST (req), NULL, 0, &error);
|
|
Packit Service |
ca3877 |
if (!stream) {
|
|
Packit Service |
ca3877 |
debug_printf (1, " could not send request: %s\n",
|
|
Packit Service |
ca3877 |
error->message);
|
|
Packit Service |
ca3877 |
g_error_free (error);
|
|
Packit Service |
ca3877 |
g_object_unref (req);
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
return NULL;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (response_headers)
|
|
Packit Service |
ca3877 |
soup_message_headers_foreach (msg->response_headers, copy_headers, response_headers);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (msg);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
if (last_request_validated)
|
|
Packit Service |
ca3877 |
last_request_unqueued = FALSE;
|
|
Packit Service |
ca3877 |
else
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Request unqueued before finishing");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
last_request_hit_network = is_network_stream (stream);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_input_stream_read_all (stream, buf, sizeof (buf), &nread,
|
|
Packit Service |
ca3877 |
NULL, &error);
|
|
Packit Service |
ca3877 |
if (error) {
|
|
Packit Service |
ca3877 |
debug_printf (1, " could not read response: %s\n",
|
|
Packit Service |
ca3877 |
error->message);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
soup_test_request_close_stream (SOUP_REQUEST (req), stream,
|
|
Packit Service |
ca3877 |
NULL, &error);
|
|
Packit Service |
ca3877 |
if (error) {
|
|
Packit Service |
ca3877 |
debug_printf (1, " could not close stream: %s\n",
|
|
Packit Service |
ca3877 |
error->message);
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
g_object_unref (stream);
|
|
Packit Service |
ca3877 |
g_object_unref (req);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Cache writes are G_PRIORITY_LOW, so they won't have happened yet... */
|
|
Packit Service |
ca3877 |
soup_cache_flush ((SoupCache *)soup_session_get_feature (session, SOUP_TYPE_CACHE));
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return nread ? g_memdup (buf, nread) : g_strdup ("");
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_request_with_cancel (SoupSession *session,
|
|
Packit Service |
ca3877 |
SoupURI *base_uri,
|
|
Packit Service |
ca3877 |
const char *method,
|
|
Packit Service |
ca3877 |
const char *path,
|
|
Packit Service |
ca3877 |
SoupTestRequestFlags flags)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupRequestHTTP *req;
|
|
Packit Service |
ca3877 |
GInputStream *stream;
|
|
Packit Service |
ca3877 |
SoupURI *uri;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
GCancellable *cancellable;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
last_request_validated = last_request_hit_network = last_request_unqueued = FALSE;
|
|
Packit Service |
ca3877 |
cancelled_requests = 0;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
uri = soup_uri_new_with_base (base_uri, path);
|
|
Packit Service |
ca3877 |
req = soup_session_request_http_uri (session, method, uri, NULL);
|
|
Packit Service |
ca3877 |
soup_uri_free (uri);
|
|
Packit Service |
ca3877 |
cancellable = flags & SOUP_TEST_REQUEST_CANCEL_CANCELLABLE ? g_cancellable_new () : NULL;
|
|
Packit Service |
ca3877 |
stream = soup_test_request_send (SOUP_REQUEST (req), cancellable, flags, &error);
|
|
Packit Service |
ca3877 |
if (stream) {
|
|
Packit Service |
ca3877 |
debug_printf (1, " could not cancel the request\n");
|
|
Packit Service |
ca3877 |
g_object_unref (stream);
|
|
Packit Service |
ca3877 |
g_object_unref (req);
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
} else
|
|
Packit Service |
ca3877 |
g_clear_error (&error);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_clear_object (&cancellable);
|
|
Packit Service |
ca3877 |
g_clear_object (&stream);
|
|
Packit Service |
ca3877 |
g_clear_object (&req;;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_cache_flush ((SoupCache *)soup_session_get_feature (session, SOUP_TYPE_CACHE));
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
message_starting (SoupMessage *msg, gpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
if (soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"If-Modified-Since") ||
|
|
Packit Service |
ca3877 |
soup_message_headers_get_one (msg->request_headers,
|
|
Packit Service |
ca3877 |
"If-None-Match")) {
|
|
Packit Service |
ca3877 |
debug_printf (2, " Conditional request for %s\n",
|
|
Packit Service |
ca3877 |
soup_message_get_uri (msg)->path);
|
|
Packit Service |
ca3877 |
last_request_validated = TRUE;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
request_queued (SoupSession *session, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
gpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_signal_connect (msg, "starting",
|
|
Packit Service |
ca3877 |
G_CALLBACK (message_starting),
|
|
Packit Service |
ca3877 |
data);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
request_unqueued (SoupSession *session, SoupMessage *msg,
|
|
Packit Service |
ca3877 |
gpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
if (msg->status_code == SOUP_STATUS_CANCELLED)
|
|
Packit Service |
ca3877 |
cancelled_requests++;
|
|
Packit Service |
ca3877 |
last_request_unqueued = TRUE;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_basics_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
char *body1, *body2, *body3, *body4, *body5, *cmp;
|
|
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 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_ADD_FEATURE, cache,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "request-queued",
|
|
Packit Service |
ca3877 |
G_CALLBACK (request_queued), NULL);
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "request-unqueued",
|
|
Packit Service |
ca3877 |
G_CALLBACK (request_unqueued), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Initial requests\n");
|
|
Packit Service |
ca3877 |
body1 = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
body2 = do_request (session, base_uri, "GET", "/2", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
body3 = do_request (session, base_uri, "GET", "/3", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Sat, 02 Jan 2011 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
body4 = do_request (session, base_uri, "GET", "/4", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-ETag", "\"abcdefg\"",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
body5 = do_request (session, base_uri, "GET", "/5", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "no-cache",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Resource with future Expires should have been cached */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Fresh cached resource\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /1 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /1 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body1, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Resource with long-ago Last-Modified should have been cached */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Heuristically-fresh cached resource\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/2", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
/* Not validated even if it has must-revalidate, because it hasn't expired */
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_validated,
|
|
Packit Service |
ca3877 |
"Request for /2 was validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /2 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /2 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body2, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Adding a query string should bypass the cache but not invalidate it */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Fresh cached resource with a query\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1?attr=value", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /1?attr=value filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /1?attr=value not unqueued");
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
debug_printf (2, " Second request\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Second request for /1 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Request for /1 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body1, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Expired + must-revalidate causes a conditional request */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Unchanged must-revalidate resource w/ Last-Modified\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/3", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Sat, 02 Jan 2011 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_validated,
|
|
Packit Service |
ca3877 |
"Request for /3 not validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /3 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /3 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body3, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Validation failure should update cache */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Changed must-revalidate resource w/ Last-Modified\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/3", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Sat, 02 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Sat, 02 Jan 2011 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_validated,
|
|
Packit Service |
ca3877 |
"Request for /3 not validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /3 filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Request for /3 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body3, !=, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Second request\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/3", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Sat, 02 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_validated,
|
|
Packit Service |
ca3877 |
"Second request for /3 not validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Second request for /3 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /3 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body3, !=, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* ETag + must-revalidate causes a conditional request */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Unchanged must-revalidate resource w/ ETag\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/4", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-ETag", "\"abcdefg\"",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_validated,
|
|
Packit Service |
ca3877 |
"Request for /4 not validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /4 not filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cached resource /4 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body4, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Cache-Control: no-cache prevents caching */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Uncacheable resource\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/5", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "no-cache",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /5 filled from cache");
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Request for /5 not unqueued");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (body5, ==, cmp);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* PUT to a URI invalidates the cache entry */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Invalidating and re-requesting a cached resource\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "PUT", "/1", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_hit_network,
|
|
Packit Service |
ca3877 |
"PUT filled from cache");
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_hit_network,
|
|
Packit Service |
ca3877 |
"PUT failed to invalidate cache entry");
|
|
Packit Service |
ca3877 |
g_assert_true (last_request_hit_network);
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
Packit Service |
ca3877 |
g_free (body1);
|
|
Packit Service |
ca3877 |
g_free (body2);
|
|
Packit Service |
ca3877 |
g_free (body3);
|
|
Packit Service |
ca3877 |
g_free (body4);
|
|
Packit Service |
ca3877 |
g_free (body5);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_cancel_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
char *body1, *body2;
|
|
Packit Service |
ca3877 |
guint flags;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_test_bug ("692310");
|
|
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 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
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, "request-unqueued",
|
|
Packit Service |
ca3877 |
G_CALLBACK (request_unqueued), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Initial requests\n");
|
|
Packit Service |
ca3877 |
body1 = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
body2 = do_request (session, base_uri, "GET", "/2", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2011 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-Cache-Control", "must-revalidate",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Check that messages are correctly processed on cancellations. */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Cancel fresh resource with soup_session_message_cancel()\n");
|
|
Packit Service |
ca3877 |
flags = SOUP_TEST_REQUEST_CANCEL_MESSAGE | SOUP_TEST_REQUEST_CANCEL_IMMEDIATE;
|
|
Packit Service |
ca3877 |
do_request_with_cancel (session, base_uri, "GET", "/1", flags);
|
|
Packit Service |
ca3877 |
g_assert_cmpint (cancelled_requests, ==, 1);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cancelled request /1 not unqueued");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " Cancel fresh resource with g_cancellable_cancel()\n");
|
|
Packit Service |
ca3877 |
flags = SOUP_TEST_REQUEST_CANCEL_CANCELLABLE | SOUP_TEST_REQUEST_CANCEL_IMMEDIATE;
|
|
Packit Service |
ca3877 |
do_request_with_cancel (session, base_uri, "GET", "/1", flags);
|
|
Packit Service |
ca3877 |
g_assert_cmpint (cancelled_requests, ==, 1);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cancelled request /1 not unqueued");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
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, "request-unqueued",
|
|
Packit Service |
ca3877 |
G_CALLBACK (request_unqueued), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Check that messages are correctly processed on cancellations. */
|
|
Packit Service |
ca3877 |
debug_printf (1, " Cancel a revalidating resource with soup_session_message_cancel()\n");
|
|
Packit Service |
ca3877 |
flags = SOUP_TEST_REQUEST_CANCEL_MESSAGE | SOUP_TEST_REQUEST_CANCEL_IMMEDIATE;
|
|
Packit Service |
ca3877 |
do_request_with_cancel (session, base_uri, "GET", "/2", flags);
|
|
Packit Service |
ca3877 |
g_assert_cmpint (cancelled_requests, ==, 2);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cancelled request /2 not unqueued");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " Cancel a revalidating resource with g_cancellable_cancel()\n");
|
|
Packit Service |
ca3877 |
flags = SOUP_TEST_REQUEST_CANCEL_CANCELLABLE | SOUP_TEST_REQUEST_CANCEL_IMMEDIATE;
|
|
Packit Service |
ca3877 |
do_request_with_cancel (session, base_uri, "GET", "/2", flags);
|
|
Packit Service |
ca3877 |
g_assert_cmpint (cancelled_requests, ==, 2);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_unqueued,
|
|
Packit Service |
ca3877 |
"Cancelled request /2 not unqueued");
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
Packit Service |
ca3877 |
g_free (body1);
|
|
Packit Service |
ca3877 |
g_free (body2);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static gboolean
|
|
Packit Service |
ca3877 |
unref_stream (gpointer stream)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_object_unref (stream);
|
|
Packit Service |
ca3877 |
return FALSE;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
base_stream_unreffed (gpointer loop, GObject *ex_base_stream)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
g_main_loop_quit (loop);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_refcounting_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
SoupRequestHTTP *req;
|
|
Packit Service |
ca3877 |
GInputStream *stream, *base_stream;
|
|
Packit Service |
ca3877 |
SoupURI *uri;
|
|
Packit Service |
ca3877 |
GError *error = NULL;
|
|
Packit Service |
ca3877 |
guint flags;
|
|
Packit Service |
ca3877 |
GMainLoop *loop;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_test_bug ("682527");
|
|
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 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_ADD_FEATURE, cache,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
last_request_validated = last_request_hit_network = FALSE;
|
|
Packit Service |
ca3877 |
cancelled_requests = 0;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
uri = soup_uri_new_with_base (base_uri, "/1");
|
|
Packit Service |
ca3877 |
req = soup_session_request_http_uri (session, "GET", uri, NULL);
|
|
Packit Service |
ca3877 |
soup_uri_free (uri);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
flags = SOUP_TEST_REQUEST_CANCEL_AFTER_SEND_FINISH | SOUP_TEST_REQUEST_CANCEL_MESSAGE;
|
|
Packit Service |
ca3877 |
stream = soup_test_request_send (SOUP_REQUEST (req), NULL, flags, &error);
|
|
Packit Service |
ca3877 |
if (!stream) {
|
|
Packit Service |
ca3877 |
debug_printf (1, " could not send request: %s\n",
|
|
Packit Service |
ca3877 |
error->message);
|
|
Packit Service |
ca3877 |
g_error_free (error);
|
|
Packit Service |
ca3877 |
g_object_unref (req);
|
|
Packit Service |
ca3877 |
return;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
g_object_unref (req);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
base_stream = g_filter_input_stream_get_base_stream (G_FILTER_INPUT_STREAM (stream));
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (1, " Checking that the base stream is properly unref'ed\n");
|
|
Packit Service |
ca3877 |
loop = g_main_loop_new (NULL, FALSE);
|
|
Packit Service |
ca3877 |
g_object_weak_ref (G_OBJECT (base_stream), base_stream_unreffed, loop);
|
|
Packit Service |
ca3877 |
g_idle_add (unref_stream, stream);
|
|
Packit Service |
ca3877 |
g_main_loop_run (loop);
|
|
Packit Service |
ca3877 |
g_main_loop_unref (loop);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_cache_flush ((SoupCache *)soup_session_get_feature (session, SOUP_TYPE_CACHE));
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_headers_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupMessageHeaders *headers;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
char *body1, *cmp;
|
|
Packit Service |
ca3877 |
const char *header_value;
|
|
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 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_ADD_FEATURE, cache,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_signal_connect (session, "request-queued",
|
|
Packit Service |
ca3877 |
G_CALLBACK (request_queued), NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Initial requests\n");
|
|
Packit Service |
ca3877 |
body1 = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-My-Header", "My header value",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* My-Header new value should be updated in cache */
|
|
Packit Service |
ca3877 |
debug_printf (2, " Fresh cached resource which updates My-Header\n");
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
"Test-Set-My-Header", "My header NEW value",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (last_request_validated,
|
|
Packit Service |
ca3877 |
"Request for /1 not validated");
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /1 not filled from cache");
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Check that cache returns the updated header */
|
|
Packit Service |
ca3877 |
debug_printf (2, " Fresh cached resource with new value for My-Header\n");
|
|
Packit Service |
ca3877 |
headers = soup_message_headers_new (SOUP_MESSAGE_HEADERS_RESPONSE);
|
|
Packit Service |
ca3877 |
cmp = do_request (session, base_uri, "GET", "/1", headers,
|
|
Packit Service |
ca3877 |
"Test-Set-Last-Modified", "Fri, 01 Jan 2010 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
soup_test_assert (!last_request_hit_network,
|
|
Packit Service |
ca3877 |
"Request for /1 not filled from cache");
|
|
Packit Service |
ca3877 |
g_free (cmp);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
header_value = soup_message_headers_get_list (headers, "My-Header");
|
|
Packit Service |
ca3877 |
g_assert_cmpstr (header_value, ==, "My header NEW value");
|
|
Packit Service |
ca3877 |
soup_message_headers_free (headers);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
Packit Service |
ca3877 |
g_free (body1);
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static guint
|
|
Packit Service |
ca3877 |
count_cached_resources_in_dir (const char *cache_dir)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
GDir *dir;
|
|
Packit Service |
ca3877 |
const char *name;
|
|
Packit Service |
ca3877 |
guint retval = 0;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
dir = g_dir_open (cache_dir, 0, NULL);
|
|
Packit Service |
ca3877 |
while ((name = g_dir_read_name (dir))) {
|
|
Packit Service |
ca3877 |
if (g_str_has_prefix (name, "soup."))
|
|
Packit Service |
ca3877 |
continue;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
retval++;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
g_dir_close (dir);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
return retval;
|
|
Packit Service |
ca3877 |
}
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
static void
|
|
Packit Service |
ca3877 |
do_leaks_test (gconstpointer data)
|
|
Packit Service |
ca3877 |
{
|
|
Packit Service |
ca3877 |
SoupURI *base_uri = (SoupURI *)data;
|
|
Packit Service |
ca3877 |
SoupSession *session;
|
|
Packit Service |
ca3877 |
SoupCache *cache;
|
|
Packit Service |
ca3877 |
char *cache_dir;
|
|
Packit Service |
ca3877 |
char *body;
|
|
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 |
session = soup_test_session_new (SOUP_TYPE_SESSION_ASYNC,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_USE_THREAD_CONTEXT, TRUE,
|
|
Packit Service |
ca3877 |
SOUP_SESSION_ADD_FEATURE, cache,
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Initial requests\n");
|
|
Packit Service |
ca3877 |
body = do_request (session, base_uri, "GET", "/1", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_free (body);
|
|
Packit Service |
ca3877 |
body = do_request (session, base_uri, "GET", "/2", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_free (body);
|
|
Packit Service |
ca3877 |
body = do_request (session, base_uri, "GET", "/3", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_free (body);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Dumping the cache\n");
|
|
Packit Service |
ca3877 |
soup_cache_dump (cache);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_assert_cmpuint (count_cached_resources_in_dir (cache_dir), ==, 3);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
body = do_request (session, base_uri, "GET", "/4", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_free (body);
|
|
Packit Service |
ca3877 |
body = do_request (session, base_uri, "GET", "/5", NULL,
|
|
Packit Service |
ca3877 |
"Test-Set-Expires", "Fri, 01 Jan 2100 00:00:00 GMT",
|
|
Packit Service |
ca3877 |
NULL);
|
|
Packit Service |
ca3877 |
g_free (body);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
/* Destroy the cache without dumping the last two resources */
|
|
Packit Service |
ca3877 |
soup_test_session_abort_unref (session);
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
cache = soup_cache_new (cache_dir, SOUP_CACHE_SINGLE_USER);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
debug_printf (2, " Loading the cache\n");
|
|
Packit Service |
ca3877 |
g_assert_cmpuint (count_cached_resources_in_dir (cache_dir), ==, 5);
|
|
Packit Service |
ca3877 |
soup_cache_load (cache);
|
|
Packit Service |
ca3877 |
g_assert_cmpuint (count_cached_resources_in_dir (cache_dir), ==, 3);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
g_object_unref (cache);
|
|
Packit Service |
ca3877 |
g_free (cache_dir);
|
|
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 |
int ret;
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
test_init (argc, argv, NULL);
|
|
Packit Service |
ca3877 |
|
|
Packit Service |
ca3877 |
server = soup_test_server_new (TRUE);
|
|
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 |
g_test_add_data_func ("/cache/basics", base_uri, do_basics_test);
|
|
Packit Service |
ca3877 |
g_test_add_data_func ("/cache/cancellation", base_uri, do_cancel_test);
|
|
Packit Service |
ca3877 |
g_test_add_data_func ("/cache/refcounting", base_uri, do_refcounting_test);
|
|
Packit Service |
ca3877 |
g_test_add_data_func ("/cache/headers", base_uri, do_headers_test);
|
|
Packit Service |
ca3877 |
g_test_add_data_func ("/cache/leaks", base_uri, do_leaks_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 |
|
|
Packit Service |
ca3877 |
test_cleanup ();
|
|
Packit Service |
ca3877 |
return ret;
|
|
Packit Service |
ca3877 |
}
|