summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabiano Fidêncio <fidencio@redhat.com>2013-09-15 22:00:11 +0200
committerPhilip Withnall <philip@tecnocode.co.uk>2013-10-27 23:28:53 +0000
commit88e22b33cabf5555f3865dd38598f145fbd89d8b (patch)
treebd0480dff8b81284574322ebfd0ce8f1f57c3938
parentcea908c22fd9b94b4319c40985c0ce356f2e137f (diff)
downloadlibgdata-88e22b33cabf5555f3865dd38598f145fbd89d8b.tar.gz
tests: Replace GDataMock for uhttpmock
https://bugzilla.gnome.org/show_bug.cgi?id=709691
-rw-r--r--configure.ac5
-rw-r--r--gdata/tests/Makefile.am8
-rw-r--r--gdata/tests/calendar.c70
-rw-r--r--gdata/tests/client-login-authorizer.c32
-rw-r--r--gdata/tests/common.c50
-rw-r--r--gdata/tests/common.h20
-rw-r--r--gdata/tests/contacts.c82
-rw-r--r--gdata/tests/documents.c102
-rw-r--r--gdata/tests/mock-resolver.c336
-rw-r--r--gdata/tests/mock-resolver.h58
-rw-r--r--gdata/tests/mock-server.c1647
-rw-r--r--gdata/tests/mock-server.h92
-rw-r--r--gdata/tests/oauth1-authorizer.c44
-rw-r--r--gdata/tests/picasaweb.c82
-rw-r--r--gdata/tests/youtube.c120
15 files changed, 313 insertions, 2435 deletions
diff --git a/configure.ac b/configure.ac
index b56123d0..94d18cbb 100644
--- a/configure.ac
+++ b/configure.ac
@@ -123,6 +123,11 @@ AC_SUBST([GNOME_PACKAGES_PRIVATE])
AC_SUBST([GNOME_PACKAGES])
AC_SUBST([GOA_ENABLED])
+dnl ****************************
+dnl Check for uhttpmock
+dnl ****************************
+PKG_CHECK_MODULES(UHTTPMOCK, libuhttpmock-0.0)
+
# Various necessary functions and headers
AC_CHECK_FUNCS([strchr])
AC_CHECK_FUNCS([strstr])
diff --git a/gdata/tests/Makefile.am b/gdata/tests/Makefile.am
index 8e50c29b..40f1c5f6 100644
--- a/gdata/tests/Makefile.am
+++ b/gdata/tests/Makefile.am
@@ -13,23 +13,21 @@ AM_CFLAGS = \
$(WARN_CFLAGS) \
$(GDATA_CFLAGS) \
$(GNOME_CFLAGS) \
+ $(UHTTPMOCK_CFLAGS) \
$(NULL)
LIBS = \
$(top_builddir)/gdata/libgdata.la \
$(GDK_PIXBUF_LIBS) \
$(GDATA_LIBS) \
- $(GNOME_LIBS)
+ $(GNOME_LIBS) \
+ $(UHTTPMOCK_LIBS)
noinst_PROGRAMS = $(TEST_PROGS)
TEST_SRCS = \
common.c \
common.h \
- mock-resolver.c \
- mock-resolver.h \
- mock-server.c \
- mock-server.h \
$(NULL)
TEST_PROGS += general
diff --git a/gdata/tests/calendar.c b/gdata/tests/calendar.c
index 5bbbf5c0..c54ddda0 100644
--- a/gdata/tests/calendar.c
+++ b/gdata/tests/calendar.c
@@ -24,7 +24,7 @@
#include "gdata.h"
#include "common.h"
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
typedef struct {
GDataCalendarCalendar *calendar;
@@ -51,7 +51,7 @@ set_up_temp_calendar (TempCalendarData *data, gconstpointer service)
g_assert (GDATA_IS_CALENDAR_CALENDAR (data->calendar));
g_object_unref (calendar);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -64,7 +64,7 @@ tear_down_temp_calendar (TempCalendarData *data, gconstpointer service)
GDATA_ENTRY (data->calendar), NULL, NULL) == TRUE);
g_object_unref (data->calendar);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -96,7 +96,7 @@ test_authentication (void)
g_object_unref (authorizer);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (authentication, void,
@@ -175,7 +175,7 @@ set_up_query_calendars (QueryCalendarsData *data, gconstpointer service)
g_assert (GDATA_IS_CALENDAR_CALENDAR (data->calendar2));
g_object_unref (calendar);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -192,7 +192,7 @@ tear_down_query_calendars (QueryCalendarsData *data, gconstpointer service)
GDATA_ENTRY (data->calendar2), NULL, NULL) == TRUE);
g_object_unref (data->calendar2);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -212,7 +212,7 @@ test_query_all_calendars (QueryCalendarsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_calendars, QueryCalendarsData);
@@ -260,7 +260,7 @@ test_query_all_calendars_async_progress_closure (QueryCalendarsData *query_data,
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -280,7 +280,7 @@ test_query_own_calendars (QueryCalendarsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (query_own_calendars, QueryCalendarsData,
@@ -326,7 +326,7 @@ test_query_own_calendars_async_progress_closure (QueryCalendarsData *query_data,
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -365,7 +365,7 @@ set_up_query_events (QueryEventsData *data, gconstpointer service)
g_assert (GDATA_IS_CALENDAR_EVENT (data->event3));
g_object_unref (event);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -386,7 +386,7 @@ tear_down_query_events (QueryEventsData *data, gconstpointer service)
GDATA_ENTRY (data->event3), NULL, NULL) == TRUE);
g_object_unref (data->event3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the calendar */
tear_down_temp_calendar ((TempCalendarData*) data, service);
@@ -410,7 +410,7 @@ test_query_events (QueryEventsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_events, QueryEventsData);
@@ -457,7 +457,7 @@ test_query_events_async_progress_closure (QueryEventsData *query_data, gconstpoi
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -482,7 +482,7 @@ tear_down_insert_event (InsertEventData *data, gconstpointer service)
GDATA_ENTRY (data->new_event), NULL, NULL) == TRUE);
g_object_unref (data->new_event);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the calendar too */
tear_down_temp_calendar ((TempCalendarData*) data, service);
@@ -528,7 +528,7 @@ test_event_insert (InsertEventData *data, gconstpointer service)
g_object_unref (event);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_event, InsertEventData);
@@ -1022,7 +1022,7 @@ set_up_temp_calendar_acls (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (rule);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1044,7 +1044,7 @@ tear_down_temp_calendar_acls (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (data->rule);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the calendar */
tear_down_temp_calendar ((TempCalendarData*) data, service);
@@ -1068,7 +1068,7 @@ test_access_rule_get (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1121,7 +1121,7 @@ test_access_rule_insert (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (rule);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1154,7 +1154,7 @@ test_access_rule_update (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (new_rule);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1175,7 +1175,7 @@ test_access_rule_delete (TempCalendarAclsData *data, gconstpointer service)
g_object_unref (data->rule);
data->rule = NULL;
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1290,7 +1290,7 @@ test_batch (gconstpointer service)
g_object_unref (operation);
g_object_unref (inserted_entry3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1316,7 +1316,7 @@ setup_batch_async (BatchAsyncData *data, gconstpointer service)
g_object_unref (event);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1356,7 +1356,7 @@ test_batch_async (BatchAsyncData *data, gconstpointer service)
g_main_loop_unref (main_loop);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1405,7 +1405,7 @@ test_batch_async_cancellation (BatchAsyncData *data, gconstpointer service)
g_object_unref (cancellable);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1423,25 +1423,25 @@ teardown_batch_async (BatchAsyncData *data, gconstpointer service)
g_object_unref (data->new_event);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
}
}
@@ -1458,13 +1458,13 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/calendar");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
authorizer = GDATA_AUTHORIZER (gdata_client_login_authorizer_new (CLIENT_ID, GDATA_TYPE_CALENDAR_SERVICE));
gdata_client_login_authorizer_authenticate (GDATA_CLIENT_LOGIN_AUTHORIZER (authorizer), USERNAME, PASSWORD, NULL, NULL);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
service = GDATA_SERVICE (gdata_calendar_service_new (authorizer));
diff --git a/gdata/tests/client-login-authorizer.c b/gdata/tests/client-login-authorizer.c
index 6c8a87ad..78211ac3 100644
--- a/gdata/tests/client-login-authorizer.c
+++ b/gdata/tests/client-login-authorizer.c
@@ -23,7 +23,7 @@
#include "common.h"
static GThread *main_thread = NULL;
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
static void
test_client_login_authorizer_constructor (void)
@@ -142,7 +142,7 @@ set_up_client_login_authorizer_data_authenticated (ClientLoginAuthorizerData *da
g_assert (gdata_client_login_authorizer_authenticate (data->authorizer, USERNAME, PASSWORD, NULL, NULL) == TRUE);
connect_to_client_login_authorizer (data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -342,7 +342,7 @@ test_client_login_authorizer_authenticate_sync (ClientLoginAuthorizerData *data,
post_test_authentication (data, TRUE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that authentication using an incorrect password fails */
@@ -365,7 +365,7 @@ test_client_login_authorizer_authenticate_sync_bad_password (ClientLoginAuthoriz
post_test_authentication (data, FALSE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that authentication against multiple authorization domains simultaneously and synchronously works */
@@ -391,7 +391,7 @@ test_client_login_authorizer_authenticate_sync_multiple_domains (ClientLoginAuth
post_test_authentication (data, TRUE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that synchronous authentication can be cancelled */
@@ -420,7 +420,7 @@ test_client_login_authorizer_authenticate_sync_cancellation (ClientLoginAuthoriz
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -500,7 +500,7 @@ test_client_login_authorizer_authenticate_async (ClientLoginAuthorizerAsyncData
g_main_loop_run (data->main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -539,7 +539,7 @@ test_client_login_authorizer_authenticate_async_multiple_domains (ClientLoginAut
g_main_loop_run (data->main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -582,7 +582,7 @@ test_client_login_authorizer_authenticate_async_cancellation (ClientLoginAuthori
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that gdata_authorizer_refresh_authorization() is a no-op (when authorised or not) */
@@ -705,19 +705,19 @@ test_client_login_authorizer_process_request_insecure (ClientLoginAuthorizerData
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
}
}
@@ -731,7 +731,7 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/client-login-authorizer");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
main_thread = g_thread_self ();
diff --git a/gdata/tests/common.c b/gdata/tests/common.c
index 72e44176..a5194768 100644
--- a/gdata/tests/common.c
+++ b/gdata/tests/common.c
@@ -25,7 +25,6 @@
#include <libxml/xmlsave.h>
#include "common.h"
-#include "mock-server.h"
/* %TRUE if interactive tests should be skipped because we're running automatically (for example) */
static gboolean no_interactive = FALSE;
@@ -49,11 +48,13 @@ static gboolean write_traces = FALSE;
static gboolean compare_traces = FALSE;
/* Global mock server instance used by all tests. */
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
void
gdata_test_init (int argc, char **argv)
{
+ GTlsCertificate *cert;
+ GError *child_error = NULL;
gint i;
#if !GLIB_CHECK_VERSION (2, 35, 0)
@@ -126,21 +127,28 @@ gdata_test_init (int argc, char **argv)
g_setenv ("G_MESSAGES_DEBUG", "libgdata", FALSE);
g_setenv ("LIBGDATA_LAX_SSL_CERTIFICATES", "1", FALSE);
- mock_server = gdata_mock_server_new ();
- gdata_mock_server_set_enable_logging (mock_server, write_traces);
- gdata_mock_server_set_enable_online (mock_server, write_traces || compare_traces);
+ mock_server = uhm_server_new ();
+ uhm_server_set_enable_logging (mock_server, write_traces);
+ uhm_server_set_enable_online (mock_server, write_traces || compare_traces);
+
+ /* Build the certificate. */
+ cert = g_tls_certificate_new_from_files (TEST_FILE_DIR "cert.pem", TEST_FILE_DIR "key.pem", &child_error);
+ g_assert_no_error (child_error);
+ /* Set it as the property. */
+ uhm_server_set_tls_certificate (mock_server, cert);
+ g_object_unref (cert);
}
/*
* gdata_test_get_mock_server:
*
- * Returns the singleton #GDataMockServer instance used throughout the test suite.
+ * Returns the singleton #UhmServer instance used throughout the test suite.
*
* Return value: (transfer none): the mock server
*
* Since: 0.13.4
*/
-GDataMockServer *
+UhmServer *
gdata_test_get_mock_server (void)
{
return mock_server;
@@ -911,7 +919,7 @@ gdata_test_debug_handler (const gchar *log_domain, GLogLevelFlags log_level, con
/* Log to the trace file. */
if (message != NULL && (*message == '<' || *message == '>' || *message == ' ') && *(message + 1) == ' ') {
- gdata_mock_server_received_message_chunk (mock_server, message, strlen (message));
+ uhm_server_received_message_chunk (mock_server, message, strlen (message), NULL);
}
}
@@ -924,7 +932,7 @@ gdata_test_assert_handler (const gchar *message)
/**
* gdata_test_set_https_port:
- * @server: a #GDataMockServer
+ * @server: a #UhmServer
*
* Sets the HTTPS port used for all future libgdata requests to that used by the given mock @server,
* effectively redirecting all client requests to the mock server.
@@ -932,44 +940,44 @@ gdata_test_assert_handler (const gchar *message)
* Since: 0.13.4
*/
void
-gdata_test_set_https_port (GDataMockServer *server)
+gdata_test_set_https_port (UhmServer *server)
{
- gchar *port_string = g_strdup_printf ("%u", gdata_mock_server_get_port (server));
+ gchar *port_string = g_strdup_printf ("%u", uhm_server_get_port (server));
g_setenv ("LIBGDATA_HTTPS_PORT", port_string, TRUE);
g_free (port_string);
}
/**
* gdata_test_mock_server_start_trace:
- * @server: a #GDataMockServer
+ * @server: a #UhmServer
* @trace_filename: filename of the trace to load
*
- * Wrapper around gdata_mock_server_start_trace() which additionally sets the <code class="literal">LIBGDATA_HTTPS_PORT</code>
+ * Wrapper around uhm_server_start_trace() which additionally sets the <code class="literal">LIBGDATA_HTTPS_PORT</code>
* environment variable to redirect all libgdata requests to the mock server.
*
* Since: 0.13.4
*/
void
-gdata_test_mock_server_start_trace (GDataMockServer *server, const gchar *trace_filename)
+gdata_test_mock_server_start_trace (UhmServer *server, const gchar *trace_filename)
{
- gdata_mock_server_start_trace (server, trace_filename);
+ uhm_server_start_trace (server, trace_filename, NULL);
gdata_test_set_https_port (server);
}
/**
* gdata_test_mock_server_handle_message_error:
- * @server: a #GDataMockServer
+ * @server: a #UhmServer
* @message: the message whose response should be filled
* @client: the currently connected client
* @user_data: user data provided when connecting the signal
*
- * Handler for #GDataMockServer::handle-message which sets the HTTP response for @message to the HTTP error status
+ * Handler for #UhmServer::handle-message which sets the HTTP response for @message to the HTTP error status
* specified in a #GDataTestRequestErrorData structure passed to @user_data.
*
* Since: 0.13.4
*/
gboolean
-gdata_test_mock_server_handle_message_error (GDataMockServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data)
+gdata_test_mock_server_handle_message_error (UhmServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data)
{
const GDataTestRequestErrorData *data = user_data;
@@ -981,19 +989,19 @@ gdata_test_mock_server_handle_message_error (GDataMockServer *server, SoupMessag
/**
* gdata_test_mock_server_handle_message_timeout:
- * @server: a #GDataMockServer
+ * @server: a #UhmServer
* @message: the message whose response should be filled
* @client: the currently connected client
* @user_data: user data provided when connecting the signal
*
- * Handler for #GDataMockServer::handle-message which waits for 2 seconds before returning a %SOUP_STATUS_REQUEST_TIMEOUT status
+ * Handler for #UhmServer::handle-message which waits for 2 seconds before returning a %SOUP_STATUS_REQUEST_TIMEOUT status
* and appropriate error message body. If used in conjunction with a 1 second timeout in the client code under test, this can
* simulate network error conditions and timeouts, in order to test the error handling code for such conditions.
*
* Since: 0.13.4
*/
gboolean
-gdata_test_mock_server_handle_message_timeout (GDataMockServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data)
+gdata_test_mock_server_handle_message_timeout (UhmServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data)
{
/* Sleep for longer than the timeout set on the client. */
g_usleep (2 * G_USEC_PER_SEC);
diff --git a/gdata/tests/common.h b/gdata/tests/common.h
index 1159ef5d..38f274c0 100644
--- a/gdata/tests/common.h
+++ b/gdata/tests/common.h
@@ -20,7 +20,7 @@
#include <glib.h>
#include <gdata/gdata.h>
-#include "mock-server.h"
+#include <uhttpmock/uhm.h>
#ifndef GDATA_TEST_COMMON_H
#define GDATA_TEST_COMMON_H
@@ -48,7 +48,7 @@ G_BEGIN_DECLS
void gdata_test_init (int argc, char **argv);
-GDataMockServer *gdata_test_get_mock_server (void) G_GNUC_WARN_UNUSED_RESULT;
+UhmServer *gdata_test_get_mock_server (void) G_GNUC_WARN_UNUSED_RESULT;
gboolean gdata_test_interactive (void);
@@ -184,7 +184,7 @@ tear_down_##CLOSURE_NAME##_async (GDataAsyncTestData *async_data, gconstpointer
* <function>test_<replaceable>TEST_NAME</replaceable>_async</function> and
* <function>test_<replaceable>TEST_NAME</replaceable>_async_cancellation</function>.
*
- * These functions assume the existence of a <varname>mock_server</varname> variable which points to the current #GDataMockServer instance. They
+ * These functions assume the existence of a <varname>mock_server</varname> variable which points to the current #UhmServer instance. They
* will automatically use traces <varname><replaceable>TEST_NAME</replaceable>-async</varname> and
* <varname><replaceable>TEST_NAME</replaceable>-async-cancellation</varname>.
*
@@ -242,7 +242,7 @@ test_##TEST_NAME##_async (GDataAsyncTestData *async_data, gconstpointer service)
\
g_main_loop_run (async_data->main_loop); \
\
- gdata_mock_server_end_trace (mock_server); \
+ uhm_server_end_trace (mock_server); \
} \
\
static void \
@@ -295,7 +295,7 @@ test_##TEST_NAME##_async_cancellation (GDataAsyncTestData *async_data, gconstpoi
async_data->cancellation_timeout *= GDATA_ASYNC_TIMEOUT_MULTIPLIER; \
} \
\
- gdata_mock_server_end_trace (mock_server); \
+ uhm_server_end_trace (mock_server); \
} while (async_data->cancellation_successful == TRUE); \
\
/* Clean up the last timeout callback */ \
@@ -319,7 +319,7 @@ void gdata_test_debug_output (void);
* @error_domain_func: constant function returning the #GQuark for the expected error domain
* @error_code: expected error code
*
- * A mapping between a HTTP response emitted by a #GDataMockServer and the error expected to be thrown by the HTTP client.
+ * A mapping between a HTTP response emitted by a #UhmServer and the error expected to be thrown by the HTTP client.
* This is designed for testing error handling in the client code, typically by running a single request through an array
* of these such mappings and testing the client code throws the correct error in each case.
*
@@ -335,10 +335,10 @@ typedef struct {
gint error_code;
} GDataTestRequestErrorData;
-void gdata_test_set_https_port (GDataMockServer *server);
-void gdata_test_mock_server_start_trace (GDataMockServer *server, const gchar *trace_filename);
-gboolean gdata_test_mock_server_handle_message_error (GDataMockServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data);
-gboolean gdata_test_mock_server_handle_message_timeout (GDataMockServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data);
+void gdata_test_set_https_port (UhmServer *server);
+void gdata_test_mock_server_start_trace (UhmServer *server, const gchar *trace_filename);
+gboolean gdata_test_mock_server_handle_message_error (UhmServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data);
+gboolean gdata_test_mock_server_handle_message_timeout (UhmServer *server, SoupMessage *message, SoupClientContext *client, gpointer user_data);
G_END_DECLS
diff --git a/gdata/tests/contacts.c b/gdata/tests/contacts.c
index e2409936..0b3e9732 100644
--- a/gdata/tests/contacts.c
+++ b/gdata/tests/contacts.c
@@ -24,7 +24,7 @@
#include "gdata.h"
#include "common.h"
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
typedef struct {
GDataContactsContact *contact;
@@ -48,10 +48,10 @@ set_up_temp_contact (TempContactData *data, gconstpointer service)
g_object_unref (contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* HACK. Wait for the server to propagate distributed changes. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
sleep (10);
}
}
@@ -77,7 +77,7 @@ tear_down_temp_contact (TempContactData *data, gconstpointer service)
g_object_unref (updated_contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (temp_contact, TempContactData);
@@ -111,7 +111,7 @@ test_authentication (void)
g_object_unref (authorizer);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (authentication, void,
@@ -183,11 +183,11 @@ set_up_query_all_contacts (QueryAllContactsData *data, gconstpointer service)
data->contact3 = gdata_contacts_service_insert_contact (GDATA_CONTACTS_SERVICE (service), contact, NULL, NULL);
g_object_unref (contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* It takes a few seconds for the contacts to reliably propagate around Google's servers. Distributed systems are so fun. Not.
* Thankfully, we don't have to wait when running against the mock server. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_usleep (G_USEC_PER_SEC * 5);
}
}
@@ -210,7 +210,7 @@ tear_down_query_all_contacts (QueryAllContactsData *data, gconstpointer service)
GDATA_ENTRY (data->contact3), NULL, NULL) == TRUE);
g_object_unref (data->contact3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -230,7 +230,7 @@ test_query_all_contacts (QueryAllContactsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_all_contacts, QueryAllContactsData);
@@ -277,7 +277,7 @@ test_query_all_contacts_async_progress_closure (QueryAllContactsData *query_data
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -301,7 +301,7 @@ tear_down_insert (InsertData *data, gconstpointer service)
g_object_unref (data->new_contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -445,7 +445,7 @@ test_contact_insert (InsertData *data, gconstpointer service)
* servers can allow this to happen. Somehow.
* This check isn't run when testing against a mock server because the dates in the trace file may be waaaay out of date. */
edited = gdata_contacts_contact_get_edited (contact);
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
creation_time = gdata_contacts_contact_get_edited (new_contact);
g_assert_cmpint (creation_time + TIME_FUZZINESS, >=, edited);
g_assert_cmpint (creation_time - TIME_FUZZINESS, <=, edited);
@@ -578,7 +578,7 @@ test_contact_insert (InsertData *data, gconstpointer service)
g_object_unref (contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -609,7 +609,7 @@ test_contact_update (TempContactData *data, gconstpointer service)
g_object_unref (new_contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -643,10 +643,10 @@ set_up_query_all_groups (QueryAllGroupsData *data, gconstpointer service)
g_assert (GDATA_IS_CONTACTS_GROUP (data->group3));
g_object_unref (group);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* HACK! Guess what? Distributed system inconsistency strikes again! */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
sleep (10);
}
}
@@ -668,7 +668,7 @@ tear_down_query_all_groups (QueryAllGroupsData *data, gconstpointer service)
GDATA_ENTRY (data->group3), NULL, NULL) == TRUE);
g_object_unref (data->group3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -688,7 +688,7 @@ test_query_all_groups (QueryAllGroupsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_all_groups, QueryAllGroupsData);
@@ -736,7 +736,7 @@ test_query_all_groups_async_progress_closure (QueryAllGroupsData *query_data, gc
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -753,7 +753,7 @@ static void
tear_down_insert_group (InsertGroupData *data, gconstpointer service)
{
/* HACK! Distributed systems suck. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
sleep (10);
}
@@ -764,7 +764,7 @@ tear_down_insert_group (InsertGroupData *data, gconstpointer service)
GDATA_ENTRY (data->new_group), NULL, NULL) == TRUE);
g_object_unref (data->new_group);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -798,7 +798,7 @@ test_group_insert (InsertGroupData *data, gconstpointer service)
/* Check the properties. Time-based properties can't be checked when running against a mock server, since
* the trace files may be quite old. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_assert_cmpint (gdata_contacts_group_get_edited (new_group), >=, time_val.tv_sec);
}
g_assert (gdata_contacts_group_is_deleted (new_group) == FALSE);
@@ -811,7 +811,7 @@ test_group_insert (InsertGroupData *data, gconstpointer service)
g_object_unref (group);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_group, InsertGroupData);
@@ -2012,7 +2012,7 @@ test_photo_add (TempContactData *data, gconstpointer service)
g_clear_error (&error);
g_free (photo_data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (photo_add, TempContactData,
@@ -2067,7 +2067,7 @@ add_photo_to_contact (GDataContactsService *service, GDataContactsContact **cont
/* HACK: It fairly consistently seems to take the Google servers about 4 seconds to process uploaded photos. Before this
* time, a query for the photo will return an error. So let's wait for 10.
* Helps: bgo#679072 */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
sleep (10);
}
@@ -2090,7 +2090,7 @@ set_up_temp_contact_with_photo (TempContactWithPhotoData *data, gconstpointer se
gdata_test_mock_server_start_trace (mock_server, "setup-temp-contact-with-photo");
add_photo_to_contact (GDATA_CONTACTS_SERVICE (service), &data->contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2126,7 +2126,7 @@ test_photo_get (TempContactData *data, gconstpointer service)
g_free (photo_data);
g_clear_error (&error);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (photo_get, TempContactData,
@@ -2178,7 +2178,7 @@ test_photo_delete (TempContactData *data, gconstpointer service)
g_clear_error (&error);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (photo_delete, TempContactData,
@@ -2317,7 +2317,7 @@ test_batch (gconstpointer service)
/*g_object_unref (operation);*/
g_object_unref (inserted_entry3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -2343,7 +2343,7 @@ setup_batch_async (BatchAsyncData *data, gconstpointer service)
g_object_unref (contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2383,7 +2383,7 @@ test_batch_async (BatchAsyncData *data, gconstpointer service)
g_main_loop_unref (main_loop);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2432,7 +2432,7 @@ test_batch_async_cancellation (BatchAsyncData *data, gconstpointer service)
g_object_unref (cancellable);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2450,7 +2450,7 @@ teardown_batch_async (BatchAsyncData *data, gconstpointer service)
g_object_unref (data->new_contact);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2532,19 +2532,19 @@ test_contact_id (void)
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
}
}
@@ -2561,13 +2561,13 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/contacts");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
authorizer = GDATA_AUTHORIZER (gdata_client_login_authorizer_new (CLIENT_ID, GDATA_TYPE_CONTACTS_SERVICE));
gdata_client_login_authorizer_authenticate (GDATA_CLIENT_LOGIN_AUTHORIZER (authorizer), USERNAME, PASSWORD, NULL, NULL);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
service = GDATA_SERVICE (gdata_contacts_service_new (authorizer));
diff --git a/gdata/tests/documents.c b/gdata/tests/documents.c
index c3033f84..3b903707 100644
--- a/gdata/tests/documents.c
+++ b/gdata/tests/documents.c
@@ -30,7 +30,7 @@
#include "gdata.h"
#include "common.h"
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
static gboolean
check_document_is_in_folder (GDataDocumentsDocument *document, GDataDocumentsFolder *folder)
@@ -137,7 +137,7 @@ test_authentication (void)
g_object_unref (authorizer);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (authentication, void,
@@ -209,7 +209,7 @@ set_up_temp_folder (TempFolderData *data, gconstpointer service)
g_free (upload_uri);
g_object_unref (folder);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -222,7 +222,7 @@ tear_down_temp_folder (TempFolderData *data, gconstpointer service)
g_object_unref (data->folder);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -272,7 +272,7 @@ _set_up_temp_document (GDataDocumentsEntry *entry, GDataService *service, GFile
/* HACK: Query for the new document, as Google's servers appear to modify it behind our back when creating the document:
* http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=2337. We have to wait a few seconds before trying this to allow the
* various Google servers to catch up with each other. Thankfully, we don't have to wait when running against the mock server. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_usleep (5 * G_USEC_PER_SEC);
}
@@ -309,7 +309,7 @@ set_up_temp_document_spreadsheet (TempDocumentData *data, gconstpointer service)
g_object_unref (document_file);
g_object_unref (document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -322,7 +322,7 @@ tear_down_temp_document (TempDocumentData *data, gconstpointer service)
g_object_unref (data->document);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -357,7 +357,7 @@ test_delete_folder (TempFolderData *data, gconstpointer service)
g_object_unref (data->folder);
data->folder = NULL;
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -392,7 +392,7 @@ test_delete_document (TempDocumentData *data, gconstpointer service)
g_object_unref (data->document);
data->document = NULL;
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -458,7 +458,7 @@ set_up_temp_documents (TempDocumentsData *data, gconstpointer service)
g_object_unref (document_file);
g_free (upload_uri);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -479,7 +479,7 @@ tear_down_temp_documents (TempDocumentsData *data, gconstpointer service)
delete_entry (GDATA_DOCUMENTS_ENTRY (data->arbitrary_document), GDATA_SERVICE (service));
g_object_unref (data->arbitrary_document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the folder */
tear_down_temp_folder ((TempFolderData*) data, service);
@@ -507,7 +507,7 @@ test_query_all_documents_with_folder (TempDocumentsData *data, gconstpointer ser
g_object_unref (feed);
g_object_unref (query);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -527,7 +527,7 @@ test_query_all_documents (TempDocumentsData *data, gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (temp_documents, TempDocumentsData);
@@ -575,7 +575,7 @@ test_query_all_documents_async_progress_closure (TempDocumentsData *documents_da
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef enum {
@@ -669,7 +669,7 @@ set_up_upload_document (UploadDocumentData *data, gconstpointer _test_params)
g_assert_not_reached ();
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -692,7 +692,7 @@ tear_down_upload_document (UploadDocumentData *data, gconstpointer _test_params)
/* HACK: Query for the new document, as Google's servers appear to modify it behind our back if we don't upload both metadata and data
* when creating the document: http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=2337. We have to wait a few
* seconds before trying this to allow the various Google servers to catch up with each other. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_usleep (5 * G_USEC_PER_SEC);
}
@@ -706,7 +706,7 @@ tear_down_upload_document (UploadDocumentData *data, gconstpointer _test_params)
g_object_unref (data->folder);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -940,7 +940,7 @@ test_upload (UploadDocumentData *data, gconstpointer _test_params)
g_clear_object (&document_file);
g_clear_object (&document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -985,7 +985,7 @@ set_up_update_document (UpdateDocumentData *data, gconstpointer _test_params)
g_object_unref (document_file);
g_object_unref (document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1006,7 +1006,7 @@ tear_down_update_document (UpdateDocumentData *data, gconstpointer _test_params)
/* HACK: Query for the new document, as Google's servers appear to modify it behind our back if we don't update both metadata and data
* when creating the document: http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=2337. We have to wait a few
* seconds before trying this to allow the various Google servers to catch up with each other. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_usleep (5 * G_USEC_PER_SEC);
}
@@ -1014,7 +1014,7 @@ tear_down_update_document (UpdateDocumentData *data, gconstpointer _test_params)
g_object_unref (data->document);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1134,7 +1134,7 @@ test_update (UpdateDocumentData *data, gconstpointer _test_params)
g_free (original_title);
g_object_unref (updated_document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1160,7 +1160,7 @@ tear_down_copy_document (TempCopyDocumentData *data, gconstpointer service)
delete_entry (GDATA_DOCUMENTS_ENTRY (data->new_document), GDATA_SERVICE (service));
g_object_unref (data->new_document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the folder */
tear_down_temp_document ((TempDocumentData*) data, service);
@@ -1182,7 +1182,7 @@ test_copy_document (TempCopyDocumentData *data, gconstpointer service)
g_assert_cmpstr (gdata_entry_get_id (GDATA_ENTRY (data->parent.document)), !=, gdata_entry_get_id (GDATA_ENTRY (data->new_document)));
g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (data->parent.document)), ==, gdata_entry_get_title (GDATA_ENTRY (data->new_document)));
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1259,7 +1259,7 @@ set_up_folders (FoldersData *data, GDataDocumentsService *service, gboolean init
/* HACK: Query for the new document, as Google's servers appear to modify it behind our back when creating the document:
* http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=2337. We have to wait a few seconds before trying this to allow the
* various Google servers to catch up with each other. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_usleep (5 * G_USEC_PER_SEC);
}
@@ -1275,7 +1275,7 @@ set_up_folders_add_to_folder (FoldersData *data, gconstpointer service)
{
gdata_test_mock_server_start_trace (mock_server, "setup-folders-add-to-folder");
set_up_folders (data, GDATA_DOCUMENTS_SERVICE (service), FALSE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1289,7 +1289,7 @@ tear_down_folders_add_to_folder (FoldersData *data, gconstpointer service)
delete_entry (GDATA_DOCUMENTS_ENTRY (data->folder), GDATA_SERVICE (service));
g_object_unref (data->folder);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1313,7 +1313,7 @@ test_folders_add_to_folder (FoldersData *data, gconstpointer service)
g_object_unref (new_document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (folders_add_to_folder, FoldersData);
@@ -1347,7 +1347,7 @@ set_up_folders_remove_from_folder (FoldersData *data, gconstpointer service)
{
gdata_test_mock_server_start_trace (mock_server, "setup-folders-remove-from-folder");
set_up_folders (data, GDATA_DOCUMENTS_SERVICE (service), TRUE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1377,7 +1377,7 @@ test_folders_remove_from_folder (FoldersData *data, gconstpointer service)
g_object_unref (new_document);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (folders_remove_from_folder, FoldersData);
@@ -1408,7 +1408,7 @@ G_STMT_START {
/* Since this code is called for the cancellation tests, we don't know exactly how many requests will be made
* before cancellation kicks in; so the epilogue request (below) needs to be in a separate trace file. */
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
gdata_test_mock_server_start_trace (mock_server, "folders_remove_from_folder-async-epilogue");
/* With the longer cancellation timeouts, the server can somehow modify the document without getting around to completely
@@ -1504,7 +1504,7 @@ test_download_document (TempDocumentsData *data, gconstpointer service)
_test_download_document (GDATA_DOCUMENTS_DOCUMENT (data->text_document), GDATA_SERVICE (service));
_test_download_document (GDATA_DOCUMENTS_DOCUMENT (data->arbitrary_document), GDATA_SERVICE (service));
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1582,7 +1582,7 @@ test_download_thumbnail (TempDocumentData *data, gconstpointer service)
}
#endif /* HAVE_GDK_PIXBUF */
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1616,7 +1616,7 @@ test_access_rule_insert (TempDocumentData *data, gconstpointer service)
g_object_unref (access_rule);
g_object_unref (new_access_rule);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1883,7 +1883,7 @@ test_batch (gconstpointer service)
g_object_unref (operation);
g_object_unref (inserted_entry3);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1915,7 +1915,7 @@ set_up_batch_async (BatchAsyncData *data, gconstpointer service)
g_object_unref (doc);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1955,7 +1955,7 @@ test_batch_async (BatchAsyncData *data, gconstpointer service)
g_main_loop_unref (main_loop);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2004,7 +2004,7 @@ test_batch_async_cancellation (BatchAsyncData *data, gconstpointer service)
g_object_unref (cancellable);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2015,29 +2015,29 @@ tear_down_batch_async (BatchAsyncData *data, gconstpointer service)
delete_entry (GDATA_DOCUMENTS_ENTRY (data->new_doc), GDATA_SERVICE (service));
g_object_unref (data->new_doc);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "docs.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "docs.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
}
}
@@ -2054,13 +2054,13 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/documents");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
authorizer = GDATA_AUTHORIZER (gdata_client_login_authorizer_new (CLIENT_ID, GDATA_TYPE_DOCUMENTS_SERVICE));
gdata_client_login_authorizer_authenticate (GDATA_CLIENT_LOGIN_AUTHORIZER (authorizer), DOCUMENTS_USERNAME, PASSWORD, NULL, NULL);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
service = GDATA_SERVICE (gdata_documents_service_new (authorizer));
diff --git a/gdata/tests/mock-resolver.c b/gdata/tests/mock-resolver.c
deleted file mode 100644
index ebb00198..00000000
--- a/gdata/tests/mock-resolver.c
+++ /dev/null
@@ -1,336 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) Philip Withnall 2013 <philip@tecnocode.co.uk>
- * Copyright (C) Collabora Ltd. 2009
- *
- * GData Client is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GData Client is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GData Client. If not, see <http://www.gnu.org/licenses/>.
- *
- * Original author: Vivek Dasmohapatra <vivek@collabora.co.uk>
- */
-
-/**
- * GDataMockResolver:
- *
- * A mock DNS resolver which resolves according to specified host-name–IP-address pairs, and raises an error for all non-specified host name requests.
- * This allows network connections for expected services to be redirected to a different server, such as a local mock server on a loopback interface.
- *
- * This code is heavily based on code originally by Vivek Dasmohapatra, found here:
- * http://cgit.collabora.com/git/user/sjoerd/telepathy-gabble.git/plain/tests/twisted/test-resolver.c
- * It was originally licenced under LGPLv2.1+, and implicitly relicenced to LGPLv3+ on copying into libgdata.
- */
-
-#include <stdio.h>
-#include <glib.h>
-#include <gio/gio.h>
-
-#ifdef G_OS_WIN32
-#include <windows.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-#include "mock-resolver.h"
-
-static void gdata_mock_resolver_finalize (GObject *object);
-
-static GList *gdata_mock_resolver_lookup_by_name (GResolver *resolver, const gchar *hostname, GCancellable *cancellable, GError **error);
-static void gdata_mock_resolver_lookup_by_name_async (GResolver *resolver, const gchar *hostname, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
-static GList *gdata_mock_resolver_lookup_by_name_finish (GResolver *resolver, GAsyncResult *result, GError **error);
-static GList *gdata_mock_resolver_lookup_service (GResolver *resolver, const gchar *rrname, GCancellable *cancellable, GError **error);
-static void gdata_mock_resolver_lookup_service_async (GResolver *resolver, const gchar *rrname, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
-static GList *gdata_mock_resolver_lookup_service_finish (GResolver *resolver, GAsyncResult *result, GError **error);
-
-typedef struct {
- gchar *key;
- gchar *addr;
-} FakeHost;
-
-typedef struct {
- char *key;
- GSrvTarget *srv;
-} FakeService;
-
-struct _GDataMockResolverPrivate {
- GList *fake_A;
- GList *fake_SRV;
-};
-
-G_DEFINE_TYPE (GDataMockResolver, gdata_mock_resolver, G_TYPE_RESOLVER)
-
-static void
-gdata_mock_resolver_class_init (GDataMockResolverClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
- GResolverClass *resolver_class = G_RESOLVER_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GDataMockResolverPrivate));
-
- gobject_class->finalize = gdata_mock_resolver_finalize;
-
- resolver_class->lookup_by_name = gdata_mock_resolver_lookup_by_name;
- resolver_class->lookup_by_name_async = gdata_mock_resolver_lookup_by_name_async;
- resolver_class->lookup_by_name_finish = gdata_mock_resolver_lookup_by_name_finish;
- resolver_class->lookup_service = gdata_mock_resolver_lookup_service;
- resolver_class->lookup_service_async = gdata_mock_resolver_lookup_service_async;
- resolver_class->lookup_service_finish = gdata_mock_resolver_lookup_service_finish;
-}
-
-static void
-gdata_mock_resolver_init (GDataMockResolver *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_MOCK_RESOLVER, GDataMockResolverPrivate);
-}
-
-static void
-gdata_mock_resolver_finalize (GObject *object)
-{
- gdata_mock_resolver_reset (GDATA_MOCK_RESOLVER (object));
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (gdata_mock_resolver_parent_class)->finalize (object);
-}
-
-static gchar *
-_service_rrname (const char *service, const char *protocol, const char *domain)
-{
- gchar *rrname, *ascii_domain;
-
- ascii_domain = g_hostname_to_ascii (domain);
- rrname = g_strdup_printf ("_%s._%s.%s", service, protocol, ascii_domain);
- g_free (ascii_domain);
-
- return rrname;
-}
-
-static GList *
-find_fake_services (GDataMockResolver *self, const char *name)
-{
- GList *fake = NULL;
- GList *rval = NULL;
-
- for (fake = self->priv->fake_SRV; fake != NULL; fake = g_list_next (fake)) {
- FakeService *entry = fake->data;
- if (entry != NULL && !g_strcmp0 (entry->key, name)) {
- rval = g_list_append (rval, g_srv_target_copy (entry->srv));
- }
- }
-
- return rval;
-}
-
-static GList *
-find_fake_hosts (GDataMockResolver *self, const char *name)
-{
- GList *fake = NULL;
- GList *rval = NULL;
-
- for (fake = self->priv->fake_A; fake != NULL; fake = g_list_next (fake)) {
- FakeHost *entry = fake->data;
- if (entry != NULL && !g_strcmp0 (entry->key, name)) {
- rval = g_list_append (rval, g_inet_address_new_from_string (entry->addr));
- }
- }
-
- return rval;
-}
-
-static GList *
-gdata_mock_resolver_lookup_by_name (GResolver *resolver, const gchar *hostname, GCancellable *cancellable, GError **error)
-{
- GList *result;
-
- result = find_fake_hosts (GDATA_MOCK_RESOLVER (resolver), hostname);
-
- if (result == NULL) {
- g_set_error (error, G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND, "No fake hostname record registered for ‘%s’.", hostname);
- }
-
- return result;
-}
-
-static void
-gdata_mock_resolver_lookup_by_name_async (GResolver *resolver, const gchar *hostname, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
-{
- GSimpleAsyncResult *res;
- GList *addr;
- GError *error = NULL;
-
- addr = gdata_mock_resolver_lookup_by_name (resolver, hostname, NULL, &error);
- res = g_simple_async_result_new (G_OBJECT (resolver), callback, user_data, NULL);
-
- if (addr != NULL) {
- g_simple_async_result_set_op_res_gpointer (res, addr, NULL);
- } else {
- g_simple_async_result_set_from_error (res, error);
- g_error_free (error);
- }
-
- g_simple_async_result_complete_in_idle (res);
- g_object_unref (res);
-}
-
-static GList *
-gdata_mock_resolver_lookup_by_name_finish (GResolver *resolver, GAsyncResult *result, GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error)) {
- return NULL;
- }
-
- return g_simple_async_result_get_op_res_gpointer (simple);
-}
-
-static GList *
-gdata_mock_resolver_lookup_service (GResolver *resolver, const gchar *rrname, GCancellable *cancellable, GError **error)
-{
- GList *result;
-
- result = find_fake_services (GDATA_MOCK_RESOLVER (resolver), rrname);
-
- if (result == NULL) {
- g_set_error (error, G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND, "No fake service records registered for ‘%s’.", rrname);
- }
-
- return result;
-}
-
-static void
-gdata_mock_resolver_lookup_service_async (GResolver *resolver, const gchar *rrname, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
-{
- GDataMockResolver *self = GDATA_MOCK_RESOLVER (resolver);
- GList *addr;
- GSimpleAsyncResult *res;
-
- addr = find_fake_services (self, rrname);
- res = g_simple_async_result_new (G_OBJECT (resolver), callback, user_data, gdata_mock_resolver_lookup_service_async);
-
- if (addr != NULL) {
- g_simple_async_result_set_op_res_gpointer (res, addr, NULL);
- } else {
- g_simple_async_result_set_error (res, G_RESOLVER_ERROR, G_RESOLVER_ERROR_NOT_FOUND, "No fake SRV record registered for ‘%s’.", rrname);
- }
-
- g_simple_async_result_complete_in_idle (res);
- g_object_unref (res);
-}
-
-static GList *
-gdata_mock_resolver_lookup_service_finish (GResolver *resolver, GAsyncResult *result, GError **error)
-{
- GSimpleAsyncResult *simple = G_SIMPLE_ASYNC_RESULT (result);
-
- if (g_simple_async_result_propagate_error (simple, error)) {
- return NULL;
- }
-
- return g_simple_async_result_get_op_res_gpointer (simple);
-}
-
-/**
- * gdata_mock_resolver_new:
- *
- * Creates a new #GDataMockResolver with default property values.
- *
- * Return value: (transfer full): a new #GDataMockResolver; unref with g_object_unref()
- */
-GDataMockResolver *
-gdata_mock_resolver_new (void)
-{
- return g_object_new (GDATA_TYPE_MOCK_RESOLVER, NULL);
-}
-
-/**
- * gdata_mock_resolver_reset:
- * @self: a #GDataMockResolver
- *
- * Resets the state of the #GDataMockResolver, deleting all records added with gdata_mock_resolver_add_A() and gdata_mock_resolver_add_SRV().
- */
-void
-gdata_mock_resolver_reset (GDataMockResolver *self)
-{
- GList *fake = NULL;
-
- for (fake = self->priv->fake_A; fake != NULL; fake = g_list_next (fake)) {
- FakeHost *entry = fake->data;
- g_free (entry->key);
- g_free (entry->addr);
- g_free (entry);
- }
- g_list_free (self->priv->fake_A);
- self->priv->fake_A = NULL;
-
- for (fake = self->priv->fake_SRV; fake != NULL; fake = g_list_next (fake)) {
- FakeService *entry = fake->data;
- g_free (entry->key);
- g_srv_target_free (entry->srv);
- g_free (entry);
- }
- g_list_free (self->priv->fake_SRV);
- self->priv->fake_SRV = NULL;
-}
-
-/**
- * gdata_mock_resolver_add_A:
- * @self: a #GDataMockResolver
- * @hostname: the hostname to match
- * @addr: the IP address to resolve to
- *
- * Adds a resolution mapping from the host name @hostname to the IP address @addr.
- *
- * Return value: %TRUE on success; %FALSE otherwise
- */
-gboolean
-gdata_mock_resolver_add_A (GDataMockResolver *self, const gchar *hostname, const gchar *addr)
-{
- FakeHost *entry = g_new0 (FakeHost, 1);
- entry->key = g_strdup (hostname);
- entry->addr = g_strdup (addr);
- self->priv->fake_A = g_list_append (self->priv->fake_A, entry);
-
- return TRUE;
-}
-
-/**
- * gdata_mock_resolver_add_SRV:
- * @self: a #GDataMockResolver
- * @hostname: the service name to match
- * @protocol: the protocol name to match
- * @domain: the domain name to match
- * @addr: the IP address to resolve to
- * @port: the port to resolve to
- *
- * Adds a resolution mapping the given @service (on @protocol and @domain) to the IP address @addr and given @port.
- *
- * Return value: %TRUE on success; %FALSE otherwise
- */
-gboolean
-gdata_mock_resolver_add_SRV (GDataMockResolver *self, const gchar *service, const gchar *protocol, const gchar *domain, const gchar *addr, guint16 port)
-{
- gchar *key;
- GSrvTarget *serv;
- FakeService *entry;
-
- key = _service_rrname (service, protocol, domain);
- entry = g_new0 (FakeService, 1);
- serv = g_srv_target_new (addr, port, 0, 0);
- entry->key = key;
- entry->srv = serv;
- self->priv->fake_SRV = g_list_append (self->priv->fake_SRV, entry);
-
- return TRUE;
-}
diff --git a/gdata/tests/mock-resolver.h b/gdata/tests/mock-resolver.h
deleted file mode 100644
index 40bec219..00000000
--- a/gdata/tests/mock-resolver.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) Philip Withnall 2013 <philip@tecnocode.co.uk>
- *
- * GData Client is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GData Client is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GData Client. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef GDATA_MOCK_RESOLVER_H
-#define GDATA_MOCK_RESOLVER_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-G_BEGIN_DECLS
-
-#define GDATA_TYPE_MOCK_RESOLVER (gdata_mock_resolver_get_type ())
-#define GDATA_MOCK_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDATA_TYPE_MOCK_RESOLVER, GDataMockResolver))
-#define GDATA_MOCK_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDATA_TYPE_MOCK_RESOLVER, GDataMockResolverClass))
-#define GDATA_IS_MOCK_RESOLVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDATA_TYPE_MOCK_RESOLVER))
-#define GDATA_IS_MOCK_RESOLVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDATA_TYPE_MOCK_RESOLVER))
-#define GDATA_MOCK_RESOLVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDATA_TYPE_MOCK_RESOLVER, GDataMockResolverClass))
-
-typedef struct _GDataMockResolverPrivate GDataMockResolverPrivate;
-
-typedef struct {
- GResolver parent;
- GDataMockResolverPrivate *priv;
-} GDataMockResolver;
-
-typedef struct {
- GResolverClass parent;
-} GDataMockResolverClass;
-
-GType gdata_mock_resolver_get_type (void) G_GNUC_CONST;
-
-GDataMockResolver *gdata_mock_resolver_new (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-
-void gdata_mock_resolver_reset (GDataMockResolver *self);
-
-gboolean gdata_mock_resolver_add_A (GDataMockResolver *self, const gchar *hostname, const gchar *addr);
-gboolean gdata_mock_resolver_add_SRV (GDataMockResolver *self, const gchar *service, const gchar *protocol, const gchar *domain, const gchar *addr, guint16 port);
-
-G_END_DECLS
-
-#endif /* !GDATA_MOCK_RESOLVER_H */
diff --git a/gdata/tests/mock-server.c b/gdata/tests/mock-server.c
deleted file mode 100644
index d965d607..00000000
--- a/gdata/tests/mock-server.c
+++ /dev/null
@@ -1,1647 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) Philip Withnall 2013 <philip@tecnocode.co.uk>
- *
- * GData Client is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GData Client is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GData Client. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/**
- * GDataMockServer:
- *
- * This is a mock HTTPS server which can be used to run unit tests of network client code on a loopback interface rather than on the real Internet.
- * At its core, it's a simple HTTPS server which runs on a loopback address on an arbitrary port. The code under test must be modified to send its
- * requests to this port, although #GDataMockResolver may be used to transparently redirect all IP addresses to the mock server.
- * A convenience layer on the mock server provides loading of and recording to trace files, which are sequences of request–response HTTPS message pairs
- * where each request is expected by the server (in order). On receiving an expected request, the mock server will return the relevant response and move
- * to expecting the next request in the trace file.
- *
- * The mock server currently only operates on a single network interface, on HTTPS only. This may change in future. A dummy TLS certificate is used
- * to authenticate the server. This certificate is not signed by a CA, so the SoupSession:ssl-strict property must be set to %FALSE in client code
- * during (and only during!) testing.
- *
- * The server can operate in three modes: logging, testing, and comparing. These are set by #GDataMockServer:enable-logging and #GDataMockServer:enable-online.
- * • Logging mode (#GDataMockServer:enable-logging: %TRUE, #GDataMockServer:enable-online: %TRUE): Requests are sent to the real server online, and the
- * request–response pairs recorded to a log file.
- * • Testing mode (#GDataMockServer:enable-logging: %FALSE, #GDataMockServer:enable-online: %FALSE): Requests are sent to the mock server, which responds
- * from the trace file.
- * • Comparing mode (#GDataMockServer:enable-logging: %FALSE, #GDataMockServer:enable-online: %TRUE): Requests are sent to the real server online, and
- * the request–response pairs are compared against those in an existing log file to see if the log file is up-to-date.
- */
-
-#include <glib.h>
-#include <glib/gi18n.h>
-#include <libsoup/soup.h>
-#include <string.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-
-#include "mock-resolver.h"
-#include "mock-server.h"
-
-static void gdata_mock_server_dispose (GObject *object);
-static void gdata_mock_server_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec);
-static void gdata_mock_server_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec);
-
-static gboolean real_handle_message (GDataMockServer *self, SoupMessage *message, SoupClientContext *client);
-
-static void server_handler_cb (SoupServer *server, SoupMessage *message, const gchar *path, GHashTable *query, SoupClientContext *client, gpointer user_data);
-static void load_file_stream_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable);
-static void load_file_iteration_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable);
-
-static GFileInputStream *load_file_stream (GFile *trace_file, GCancellable *cancellable, GError **error);
-static SoupMessage *load_file_iteration (GFileInputStream *input_stream, SoupURI *base_uri, GCancellable *cancellable, GError **error);
-
-struct _GDataMockServerPrivate {
- SoupServer *server;
- GDataMockResolver *resolver;
- GThread *server_thread;
-
- /* Server interface. */
- SoupAddress *address; /* unowned */
- guint port;
-
- GFile *trace_file;
- GFileInputStream *input_stream;
- GFileOutputStream *output_stream;
- SoupMessage *next_message;
- guint message_counter; /* ID of the message within the current trace file */
-
- GFile *trace_directory;
- gboolean enable_online;
- gboolean enable_logging;
-
- GByteArray *comparison_message;
- enum {
- UNKNOWN,
- REQUEST_DATA,
- REQUEST_TERMINATOR,
- RESPONSE_DATA,
- RESPONSE_TERMINATOR,
- } received_message_state;
-};
-
-enum {
- PROP_TRACE_DIRECTORY = 1,
- PROP_ENABLE_ONLINE,
- PROP_ENABLE_LOGGING,
- PROP_ADDRESS,
- PROP_PORT,
- PROP_RESOLVER,
-};
-
-enum {
- SIGNAL_HANDLE_MESSAGE = 1,
- LAST_SIGNAL,
-};
-
-static guint signals[LAST_SIGNAL] = { 0, };
-
-G_DEFINE_TYPE (GDataMockServer, gdata_mock_server, G_TYPE_OBJECT)
-
-static void
-gdata_mock_server_class_init (GDataMockServerClass *klass)
-{
- GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (GDataMockServerPrivate));
-
- gobject_class->get_property = gdata_mock_server_get_property;
- gobject_class->set_property = gdata_mock_server_set_property;
- gobject_class->dispose = gdata_mock_server_dispose;
-
- klass->handle_message = real_handle_message;
-
- /**
- * GDataMockServer:trace-directory:
- *
- * Directory relative to which all trace files specified in calls to gdata_mock_server_start_trace() will be resolved.
- * This is not used for any other methods, but must be non-%NULL if gdata_mock_server_start_trace() is called.
- */
- g_object_class_install_property (gobject_class, PROP_TRACE_DIRECTORY,
- g_param_spec_object ("trace-directory",
- "Trace Directory", "Directory relative to which all trace files will be resolved.",
- G_TYPE_FILE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer:enable-online:
- *
- * %TRUE if network traffic should reach the Internet as normal; %FALSE to redirect it to the local mock server.
- * Use this in conjunction with #GDataMockServer:enable-logging to either log online traffic, or replay logged traffic locally.
- */
- g_object_class_install_property (gobject_class, PROP_ENABLE_ONLINE,
- g_param_spec_boolean ("enable-online",
- "Enable Online", "Whether network traffic should reach the Internet as normal.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer:enable-logging:
- *
- * %TRUE if network traffic should be logged to a trace file (specified by calling gdata_mock_server_start_trace()). This operates independently
- * of whether traffic is online or being handled locally by the mock server.
- * Use this in conjunction with #GDataMockServer:enable-online to either log online traffic, or replay logged traffic locally.
- */
- g_object_class_install_property (gobject_class, PROP_ENABLE_LOGGING,
- g_param_spec_boolean ("enable-logging",
- "Enable Logging", "Whether network traffic should be logged to a trace file.",
- FALSE,
- G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer:address:
- *
- * Address of the local mock server if it's running, or %NULL otherwise. This will be non-%NULL between calls to gdata_mock_server_run() and
- * gdata_mock_server_stop().
- *
- * This should not normally need to be passed into client code under test, unless the code references IP addresses specifically. The mock server
- * runs a DNS resolver which automatically redirects client requests for known domain names to this address (#GDataMockServer:resolver).
- */
- g_object_class_install_property (gobject_class, PROP_ADDRESS,
- g_param_spec_object ("address",
- "Server Address", "Address of the local mock server if it's running.",
- SOUP_TYPE_ADDRESS,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer:port:
- *
- * Port of the local mock server if it's running, or <code class="literal">0</code> otherwise. This will be non-<code class="literal">0</code> between
- * calls to gdata_mock_server_run() and gdata_mock_server_stop().
- *
- * It is intended that this port be passed into the client code under test, to substitute for the default HTTPS port (443) which it would otherwise
- * use.
- */
- g_object_class_install_property (gobject_class, PROP_PORT,
- g_param_spec_uint ("port",
- "Server Port", "Port of the local mock server if it's running",
- 0, G_MAXUINT, 0,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer:resolver:
- *
- * Mock resolver used to redirect HTTP requests from specified domain names to the local mock server instance. This will always be set while the
- * server is running (between calls to gdata_mock_server_run() and gdata_mock_server_stop()), and is %NULL otherwise.
- *
- * Use the resolver specified in this property to add domain names which are expected to be requested by the current trace. Domain names not added
- * to the resolver will be rejected by the mock server. The set of domain names in the resolver will be reset when gdata_mock_server_stop() is
- * called.
- */
- g_object_class_install_property (gobject_class, PROP_RESOLVER,
- g_param_spec_object ("resolver",
- "Resolver", "Mock resolver used to redirect HTTP requests to the local mock server instance.",
- GDATA_TYPE_MOCK_RESOLVER,
- G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
-
- /**
- * GDataMockServer::handle-message:
- *
- * Emitted whenever the mock server is running and receives a request from a client. Test code may connect to this signal and implement a handler
- * which builds and returns a suitable response for a given message. The default handler reads a request–response pair from the current trace file,
- * matches the requests and then returns the given response. If the requests don't match, an error is raised.
- *
- * Signal handlers should return %TRUE if they have handled the request and set an appropriate response; and %FALSE otherwise.
- */
- signals[SIGNAL_HANDLE_MESSAGE] = g_signal_new ("handle-message", G_OBJECT_CLASS_TYPE (klass), G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (GDataMockServerClass, handle_message),
- g_signal_accumulator_true_handled, NULL,
- g_cclosure_marshal_generic,
- G_TYPE_BOOLEAN, 2,
- SOUP_TYPE_MESSAGE, SOUP_TYPE_CLIENT_CONTEXT);
-}
-
-static void
-gdata_mock_server_init (GDataMockServer *self)
-{
- self->priv = G_TYPE_INSTANCE_GET_PRIVATE (self, GDATA_TYPE_MOCK_SERVER, GDataMockServerPrivate);
-}
-
-static void
-gdata_mock_server_dispose (GObject *object)
-{
- GDataMockServerPrivate *priv = GDATA_MOCK_SERVER (object)->priv;
-
- g_clear_object (&priv->resolver);
- g_clear_object (&priv->server);
- g_clear_object (&priv->input_stream);
- g_clear_object (&priv->trace_file);
- g_clear_object (&priv->input_stream);
- g_clear_object (&priv->output_stream);
- g_clear_object (&priv->next_message);
- g_clear_object (&priv->trace_directory);
- g_clear_pointer (&priv->server_thread, g_thread_unref);
- g_clear_pointer (&priv->comparison_message, g_byte_array_unref);
-
- /* Chain up to the parent class */
- G_OBJECT_CLASS (gdata_mock_server_parent_class)->dispose (object);
-}
-
-static void
-gdata_mock_server_get_property (GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
-{
- GDataMockServerPrivate *priv = GDATA_MOCK_SERVER (object)->priv;
-
- switch (property_id) {
- case PROP_TRACE_DIRECTORY:
- g_value_set_object (value, priv->trace_directory);
- break;
- case PROP_ENABLE_ONLINE:
- g_value_set_boolean (value, priv->enable_online);
- break;
- case PROP_ENABLE_LOGGING:
- g_value_set_boolean (value, priv->enable_logging);
- break;
- case PROP_ADDRESS:
- g_value_set_object (value, priv->address);
- break;
- case PROP_PORT:
- g_value_set_uint (value, priv->port);
- break;
- case PROP_RESOLVER:
- g_value_set_object (value, priv->resolver);
- break;
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-static void
-gdata_mock_server_set_property (GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
-{
- GDataMockServer *self = GDATA_MOCK_SERVER (object);
-
- switch (property_id) {
- case PROP_TRACE_DIRECTORY:
- gdata_mock_server_set_trace_directory (self, g_value_get_object (value));
- break;
- case PROP_ENABLE_ONLINE:
- gdata_mock_server_set_enable_online (self, g_value_get_boolean (value));
- break;
- case PROP_ENABLE_LOGGING:
- gdata_mock_server_set_enable_logging (self, g_value_get_boolean (value));
- break;
- case PROP_ADDRESS:
- case PROP_PORT:
- case PROP_RESOLVER:
- /* Read-only. */
- default:
- /* We don't have any other property... */
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
- break;
- }
-}
-
-typedef struct {
- GFileInputStream *input_stream;
- SoupURI *base_uri;
-} LoadFileIterationData;
-
-static void
-load_file_iteration_data_free (LoadFileIterationData *data)
-{
- g_object_unref (data->input_stream);
- soup_uri_free (data->base_uri);
- g_slice_free (LoadFileIterationData, data);
-}
-
-static SoupURI * /* transfer full */
-build_base_uri (GDataMockServer *self)
-{
- GDataMockServerPrivate *priv = self->priv;
- gchar *base_uri_string;
- SoupURI *base_uri;
-
- if (priv->enable_online == FALSE) {
- base_uri_string = g_strdup_printf ("https://%s:%u", soup_address_get_physical (self->priv->address), self->priv->port);
- } else {
- base_uri_string = g_strdup ("https://localhost"); /* FIXME */
- }
-
- base_uri = soup_uri_new (base_uri_string);
- g_free (base_uri_string);
-
- return base_uri;
-}
-
-static inline gboolean
-parts_equal (const char *one, const char *two, gboolean insensitive)
-{
- if (!one && !two)
- return TRUE;
- if (!one || !two)
- return FALSE;
- return insensitive ? !g_ascii_strcasecmp (one, two) : !strcmp (one, two);
-}
-
-/* strcmp()-like return value: 0 means the messages compare equal. */
-static gint
-compare_incoming_message (SoupMessage *expected_message, SoupMessage *actual_message, SoupClientContext *actual_client)
-{
- SoupURI *expected_uri, *actual_uri;
-
- /* Compare method. */
- if (g_strcmp0 (expected_message->method, actual_message->method) != 0) {
- return 1;
- }
-
- /* Compare URIs. */
- expected_uri = soup_message_get_uri (expected_message);
- actual_uri = soup_message_get_uri (actual_message);
-
- /* TODO: Also compare actual_client auth domains and address? HTTP version? Method? */
-
- if (!parts_equal (expected_uri->user, actual_uri->user, FALSE) ||
- !parts_equal (expected_uri->password, actual_uri->password, FALSE) ||
- !parts_equal (expected_uri->path, actual_uri->path, FALSE) ||
- !parts_equal (expected_uri->query, actual_uri->query, FALSE) ||
- !parts_equal (expected_uri->fragment, actual_uri->fragment, FALSE)) {
- return 1;
- }
-
- return 0;
-}
-
-static void
-header_append_cb (const gchar *name, const gchar *value, gpointer user_data)
-{
- SoupMessage *message = user_data;
-
- soup_message_headers_append (message->response_headers, name, value);
-}
-
-static void
-server_process_message (GDataMockServer *self, SoupMessage *message, SoupClientContext *client)
-{
- GDataMockServerPrivate *priv = self->priv;
- SoupBuffer *message_body;
- goffset expected_content_length;
- gchar *trace_file_name, *trace_file_offset;
-
- g_assert (priv->next_message != NULL);
- priv->message_counter++;
-
- if (compare_incoming_message (priv->next_message, message, client) != 0) {
- gchar *body, *next_uri, *actual_uri;
-
- /* Received message is not what we expected. Return an error. */
- soup_message_set_status_full (message, SOUP_STATUS_BAD_REQUEST, "Unexpected request to mock server");
-
- next_uri = soup_uri_to_string (soup_message_get_uri (priv->next_message), TRUE);
- actual_uri = soup_uri_to_string (soup_message_get_uri (message), TRUE);
- body = g_strdup_printf ("Expected %s URI ‘%s’, but got %s ‘%s’.", priv->next_message->method, next_uri, message->method, actual_uri);
- g_free (actual_uri);
- g_free (next_uri);
- soup_message_body_append_take (message->response_body, (guchar *) body, strlen (body));
-
- return;
- }
-
- /* The incoming message matches what we expected, so copy the headers and body from the expected response and return it. */
- soup_message_set_http_version (message, soup_message_get_http_version (priv->next_message));
- soup_message_set_status_full (message, priv->next_message->status_code, priv->next_message->reason_phrase);
- soup_message_headers_foreach (priv->next_message->response_headers, header_append_cb, message);
-
- /* Add debug headers to identify the message and trace file. */
- trace_file_name = g_file_get_uri (priv->trace_file);
- soup_message_headers_append (message->response_headers, "X-Mock-Trace-File", trace_file_name);
- g_free (trace_file_name);
-
- trace_file_offset = g_strdup_printf ("%u", priv->message_counter);
- soup_message_headers_append (message->response_headers, "X-Mock-Trace-File-Offset", trace_file_offset);
- g_free (trace_file_offset);
-
- message_body = soup_message_body_flatten (priv->next_message->response_body);
- if (message_body->length > 0) {
- soup_message_body_append_buffer (message->response_body, message_body);
- }
-
- /* If the log file doesn't contain the full response body (e.g. because it's a huge binary file containing a nul byte somewhere),
- * make one up (all zeros). */
- expected_content_length = soup_message_headers_get_content_length (message->response_headers);
- if (expected_content_length > 0 && message_body->length < (guint64) expected_content_length) {
- guint8 *buf;
-
- buf = g_malloc0 (expected_content_length - message_body->length);
- soup_message_body_append_take (message->response_body, buf, expected_content_length - message_body->length);
- }
-
- soup_buffer_free (message_body);
-
- soup_message_body_complete (message->response_body);
-
- /* Clear the expected message. */
- g_clear_object (&priv->next_message);
-}
-
-static void
-server_handler_cb (SoupServer *server, SoupMessage *message, const gchar *path, GHashTable *query, SoupClientContext *client, gpointer user_data)
-{
- GDataMockServer *self = user_data;
- gboolean message_handled = FALSE;
-
- soup_server_pause_message (server, message);
- g_signal_emit (self, signals[SIGNAL_HANDLE_MESSAGE], 0, message, client, &message_handled);
- soup_server_unpause_message (server, message);
-
- /* The message should always be handled by real_handle_message() at least. */
- g_assert (message_handled == TRUE);
-}
-
-static gboolean
-real_handle_message (GDataMockServer *self, SoupMessage *message, SoupClientContext *client)
-{
- GDataMockServerPrivate *priv = self->priv;
- gboolean handled = FALSE;
-
- /* Asynchronously load the next expected message from the trace file. */
- if (priv->next_message == NULL) {
- GTask *task;
- LoadFileIterationData *data;
- GError *child_error = NULL;
-
- data = g_slice_new (LoadFileIterationData);
- data->input_stream = g_object_ref (priv->input_stream);
- data->base_uri = build_base_uri (self);
-
- task = g_task_new (self, NULL, NULL, NULL);
- g_task_set_task_data (task, data, (GDestroyNotify) load_file_iteration_data_free);
- g_task_run_in_thread_sync (task, load_file_iteration_thread_cb);
-
- /* Handle the results. */
- priv->next_message = g_task_propagate_pointer (task, &child_error);
-
- g_object_unref (task);
-
- if (child_error != NULL) {
- gchar *body;
-
- soup_message_set_status_full (message, SOUP_STATUS_INTERNAL_SERVER_ERROR, "Error loading expected request");
-
- body = g_strdup_printf ("Error: %s", child_error->message);
- soup_message_body_append_take (message->response_body, (guchar *) body, strlen (body));
- handled = TRUE;
-
- g_error_free (child_error);
- } else if (priv->next_message == NULL) {
- gchar *body, *actual_uri;
-
- /* Received message is not what we expected. Return an error. */
- soup_message_set_status_full (message, SOUP_STATUS_BAD_REQUEST, "Unexpected request to mock server");
-
- actual_uri = soup_uri_to_string (soup_message_get_uri (message), TRUE);
- body = g_strdup_printf ("Expected no request, but got %s ‘%s’.", message->method, actual_uri);
- g_free (actual_uri);
- soup_message_body_append_take (message->response_body, (guchar *) body, strlen (body));
- handled = TRUE;
- }
- }
-
- /* Process the actual message if we already know the expected message. */
- g_assert (priv->next_message != NULL || handled == TRUE);
- if (handled == FALSE) {
- server_process_message (self, message, client);
- handled = TRUE;
- }
-
- g_assert (handled == TRUE);
- return handled;
-}
-
-/**
- * gdata_mock_server_new:
- *
- * Creates a new #GDataMockServer with default properties.
- *
- * Return value: (transfer full): a new #GDataMockServer; unref with g_object_unref()
- */
-GDataMockServer *
-gdata_mock_server_new (void)
-{
- return g_object_new (GDATA_TYPE_MOCK_SERVER, NULL);
-}
-
-static gboolean
-trace_to_soup_message_headers_and_body (SoupMessageHeaders *message_headers, SoupMessageBody *message_body, const gchar message_direction, const gchar **_trace)
-{
- const gchar *i;
- const gchar *trace = *_trace;
-
- /* Parse headers. */
- while (TRUE) {
- gchar *header_name, *header_value;
-
- if (*trace == '\0') {
- /* No body. */
- goto done;
- } else if (*trace == ' ' && *(trace + 1) == ' ' && *(trace + 2) == '\n') {
- /* No body. */
- trace += 3;
- goto done;
- } else if (*trace != message_direction || *(trace + 1) != ' ') {
- g_warning ("Unrecognised start sequence ‘%c%c’.", *trace, *(trace + 1));
- goto error;
- }
- trace += 2;
-
- if (*trace == '\n') {
- /* Reached the end of the headers. */
- trace++;
- break;
- }
-
- i = strchr (trace, ':');
- if (i == NULL || *(i + 1) != ' ') {
- g_warning ("Missing spacer ‘: ’.");
- goto error;
- }
-
- header_name = g_strndup (trace, i - trace);
- trace += (i - trace) + 2;
-
- i = strchr (trace, '\n');
- if (i == NULL) {
- g_warning ("Missing spacer ‘\\n’.");
- goto error;
- }
-
- header_value = g_strndup (trace, i - trace);
- trace += (i - trace) + 1;
-
- /* Append the header. */
- soup_message_headers_append (message_headers, header_name, header_value);
-
- g_free (header_value);
- g_free (header_name);
- }
-
- /* Parse the body. */
- while (TRUE) {
- if (*trace == ' ' && *(trace + 1) == ' ' && *(trace + 2) == '\n') {
- /* End of the body. */
- trace += 3;
- break;
- } else if (*trace == '\0') {
- /* End of the body. */
- break;
- } else if (*trace != message_direction || *(trace + 1) != ' ') {
- g_warning ("Unrecognised start sequence ‘%c%c’.", *trace, *(trace + 1));
- goto error;
- }
- trace += 2;
-
- i = strchr (trace, '\n');
- if (i == NULL) {
- g_warning ("Missing spacer ‘\\n’.");
- goto error;
- }
-
- soup_message_body_append (message_body, SOUP_MEMORY_COPY, trace, i - trace + 1); /* include trailing \n */
- trace += (i - trace) + 1;
- }
-
-done:
- /* Done. Update the output trace pointer. */
- soup_message_body_complete (message_body);
- *_trace = trace;
-
- return TRUE;
-
-error:
- return FALSE;
-}
-
-/* base_uri is the base URI for the server, e.g. https://127.0.0.1:1431. */
-static SoupMessage *
-trace_to_soup_message (const gchar *trace, SoupURI *base_uri)
-{
- SoupMessage *message;
- const gchar *i, *j, *method;
- gchar *uri_string, *response_message;
- SoupHTTPVersion http_version;
- guint response_status;
- SoupURI *uri;
-
- g_return_val_if_fail (trace != NULL, NULL);
-
- /* The traces look somewhat like this:
- * > POST /unauth HTTP/1.1
- * > Soup-Debug-Timestamp: 1200171744
- * > Soup-Debug: SoupSessionAsync 1 (0x612190), SoupMessage 1 (0x617000), SoupSocket 1 (0x612220)
- * > Host: localhost
- * > Content-Type: text/plain
- * > Connection: close
- * >
- * > This is a test.
- *
- * < HTTP/1.1 201 Created
- * < Soup-Debug-Timestamp: 1200171744
- * < Soup-Debug: SoupMessage 1 (0x617000)
- * < Date: Sun, 12 Jan 2008 21:02:24 GMT
- * < Content-Length: 0
- *
- * This function parses a single request–response pair.
- */
-
- /* Parse the method, URI and HTTP version first. */
- if (*trace != '>' || *(trace + 1) != ' ') {
- g_warning ("Unrecognised start sequence ‘%c%c’.", *trace, *(trace + 1));
- goto error;
- }
- trace += 2;
-
- /* Parse “POST /unauth HTTP/1.1”. */
- if (strncmp (trace, "POST", strlen ("POST")) == 0) {
- method = SOUP_METHOD_POST;
- trace += strlen ("POST");
- } else if (strncmp (trace, "GET", strlen ("GET")) == 0) {
- method = SOUP_METHOD_GET;
- trace += strlen ("GET");
- } else if (strncmp (trace, "DELETE", strlen ("DELETE")) == 0) {
- method = SOUP_METHOD_DELETE;
- trace += strlen ("DELETE");
- } else if (strncmp (trace, "PUT", strlen ("PUT")) == 0) {
- method = SOUP_METHOD_PUT;
- trace += strlen ("PUT");
- } else {
- g_warning ("Unknown method ‘%s’.", trace);
- goto error;
- }
-
- if (*trace != ' ') {
- g_warning ("Unrecognised spacer ‘%c’.", *trace);
- goto error;
- }
- trace++;
-
- i = strchr (trace, ' ');
- if (i == NULL) {
- g_warning ("Missing spacer ‘ ’.");
- goto error;
- }
-
- uri_string = g_strndup (trace, i - trace);
- trace += (i - trace) + 1;
-
- if (strncmp (trace, "HTTP/1.1", strlen ("HTTP/1.1")) == 0) {
- http_version = SOUP_HTTP_1_1;
- trace += strlen ("HTTP/1.1");
- } else if (strncmp (trace, "HTTP/1.0", strlen ("HTTP/1.0")) == 0) {
- http_version = SOUP_HTTP_1_0;
- trace += strlen ("HTTP/1.0");
- } else {
- g_warning ("Unrecognised HTTP version ‘%s’.", trace);
- }
-
- if (*trace != '\n') {
- g_warning ("Unrecognised spacer ‘%c’.", *trace);
- goto error;
- }
- trace++;
-
- /* Build the message. */
- uri = soup_uri_new_with_base (base_uri, uri_string);
- message = soup_message_new_from_uri (method, uri);
- soup_uri_free (uri);
-
- if (message == NULL) {
- g_warning ("Invalid URI ‘%s’.", uri_string);
- goto error;
- }
-
- soup_message_set_http_version (message, http_version);
- g_free (uri_string);
-
- /* Parse the request headers and body. */
- if (trace_to_soup_message_headers_and_body (message->request_headers, message->request_body, '>', &trace) == FALSE) {
- goto error;
- }
-
- /* Parse the response, starting with “HTTP/1.1 201 Created”. */
- if (*trace != '<' || *(trace + 1) != ' ') {
- g_warning ("Unrecognised start sequence ‘%c%c’.", *trace, *(trace + 1));
- goto error;
- }
- trace += 2;
-
- if (strncmp (trace, "HTTP/1.1", strlen ("HTTP/1.1")) == 0) {
- http_version = SOUP_HTTP_1_1;
- trace += strlen ("HTTP/1.1");
- } else if (strncmp (trace, "HTTP/1.0", strlen ("HTTP/1.0")) == 0) {
- http_version = SOUP_HTTP_1_0;
- trace += strlen ("HTTP/1.0");
- } else {
- g_warning ("Unrecognised HTTP version ‘%s’.", trace);
- }
-
- if (*trace != ' ') {
- g_warning ("Unrecognised spacer ‘%c’.", *trace);
- goto error;
- }
- trace++;
-
- i = strchr (trace, ' ');
- if (i == NULL) {
- g_warning ("Missing spacer ‘ ’.");
- goto error;
- }
-
- response_status = g_ascii_strtoull (trace, (gchar **) &j, 10);
- if (j != i) {
- g_warning ("Invalid status ‘%s’.", trace);
- goto error;
- }
- trace += (i - trace) + 1;
-
- i = strchr (trace, '\n');
- if (i == NULL) {
- g_warning ("Missing spacer ‘\n’.");
- goto error;
- }
-
- response_message = g_strndup (trace, i - trace);
- trace += (i - trace) + 1;
-
- soup_message_set_status_full (message, response_status, response_message);
-
- /* Parse the response headers and body. */
- if (trace_to_soup_message_headers_and_body (message->response_headers, message->response_body, '<', &trace) == FALSE) {
- goto error;
- }
-
- return message;
-
-error:
- g_object_unref (message);
-
- return NULL;
-}
-
-static GFileInputStream *
-load_file_stream (GFile *trace_file, GCancellable *cancellable, GError **error)
-{
- return g_file_read (trace_file, cancellable, error);
-}
-
-static gboolean
-load_message_half (GFileInputStream *input_stream, GString *current_message, gchar half_direction, GCancellable *cancellable, GError **error)
-{
- guint8 buf[1024];
- gssize len;
-
- while (TRUE) {
- len = g_input_stream_read (G_INPUT_STREAM (input_stream), buf, sizeof (buf), cancellable, error);
-
- if (len == -1) {
- /* Error. */
- return FALSE;
- } else if (len == 0) {
- /* EOF. Try again to grab a response. */
- return TRUE;
- } else {
- const guint8 *i;
-
- /* Got some data. Parse it and see if we've reached the end of a message (i.e. read both the request and the response). */
- for (i = memchr (buf, half_direction, sizeof (buf)); i != NULL; i = memchr (i + 1, half_direction, buf + sizeof (buf) - i)) {
- if (*(i + 1) == ' ' && (i == buf || (i > buf && *(i - 1) == '\n'))) {
- /* Found the boundary between request and response.
- * Fall through to try and find the boundary between this response and the next request.
- * To make things simpler, seek back to the boundary and make a second read request below. */
- if (g_seekable_seek (G_SEEKABLE (input_stream), i - (buf + len), G_SEEK_CUR, cancellable, error) == FALSE) {
- /* Error. */
- return FALSE;
- }
-
- g_string_append_len (current_message, (gchar *) buf, i - buf);
-
- return TRUE;
- }
- }
-
- /* Reached the end of the buffer without finding a change in message. Loop around and load another buffer-full. */
- g_string_append_len (current_message, (gchar *) buf, len);
- }
- }
-
- return TRUE;
-}
-
-/* Returns TRUE iff the given message from a trace file should be ignored and not used by the mock server. */
-static gboolean
-should_ignore_soup_message (SoupMessage *message)
-{
- switch (message->status_code) {
- case SOUP_STATUS_NONE:
- case SOUP_STATUS_CANCELLED:
- case SOUP_STATUS_CANT_RESOLVE:
- case SOUP_STATUS_CANT_RESOLVE_PROXY:
- case SOUP_STATUS_CANT_CONNECT:
- case SOUP_STATUS_CANT_CONNECT_PROXY:
- case SOUP_STATUS_SSL_FAILED:
- case SOUP_STATUS_IO_ERROR:
- case SOUP_STATUS_MALFORMED:
- case SOUP_STATUS_TRY_AGAIN:
- case SOUP_STATUS_TOO_MANY_REDIRECTS:
- case SOUP_STATUS_TLS_FAILED:
- return TRUE;
- default:
- return FALSE;
- }
-}
-
-static SoupMessage *
-load_file_iteration (GFileInputStream *input_stream, SoupURI *base_uri, GCancellable *cancellable, GError **error)
-{
- SoupMessage *output_message = NULL;
- GString *current_message = NULL;
-
- current_message = g_string_new (NULL);
-
- do {
- /* Start loading from the stream. */
- g_string_truncate (current_message, 0);
-
- /* We should be at the start of a request (>). Search for the start of the response (<), then for the start of the next request (>). */
- if (load_message_half (input_stream, current_message, '<', cancellable, error) == FALSE ||
- load_message_half (input_stream, current_message, '>', cancellable, error) == FALSE) {
- goto done;
- }
-
- if (current_message->len > 0) {
- output_message = trace_to_soup_message (current_message->str, base_uri);
- } else {
- /* Reached the end of the file. */
- output_message = NULL;
- }
- } while (output_message != NULL && should_ignore_soup_message (output_message) == TRUE);
-
-done:
- /* Tidy up. */
- g_string_free (current_message, TRUE);
-
- /* Postcondition: (output_message != NULL) => (*error == NULL). */
- g_assert (output_message == NULL || (error == NULL || *error == NULL));
-
- return output_message;
-}
-
-static void
-load_file_stream_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
-{
- GFile *trace_file;
- GFileInputStream *input_stream;
- GError *child_error = NULL;
-
- trace_file = task_data;
- g_assert (G_IS_FILE (trace_file));
-
- input_stream = load_file_stream (trace_file, cancellable, &child_error);
-
- if (child_error != NULL) {
- g_task_return_error (task, child_error);
- } else {
- g_task_return_pointer (task, input_stream, g_object_unref);
- }
-}
-
-static void
-load_file_iteration_thread_cb (GTask *task, gpointer source_object, gpointer task_data, GCancellable *cancellable)
-{
- LoadFileIterationData *data = task_data;
- GFileInputStream *input_stream;
- SoupMessage *output_message;
- SoupURI *base_uri;
- GError *child_error = NULL;
-
- input_stream = data->input_stream;
- g_assert (G_IS_FILE_INPUT_STREAM (input_stream));
- base_uri = data->base_uri;
-
- output_message = load_file_iteration (input_stream, base_uri, cancellable, &child_error);
-
- if (child_error != NULL) {
- g_task_return_error (task, child_error);
- } else {
- g_task_return_pointer (task, output_message, g_object_unref);
- }
-}
-
-/**
- * gdata_mock_server_unload_trace:
- * @self: a #GDataMockServer
- *
- * Unloads the current trace file of network messages, as loaded by gdata_mock_server_load_trace() or gdata_mock_server_load_trace_async().
- */
-void
-gdata_mock_server_unload_trace (GDataMockServer *self)
-{
- GDataMockServerPrivate *priv = self->priv;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
-
- g_clear_object (&priv->next_message);
- g_clear_object (&priv->input_stream);
- g_clear_object (&priv->trace_file);
- g_clear_pointer (&priv->comparison_message, g_byte_array_unref);
- priv->message_counter = 0;
- priv->received_message_state = UNKNOWN;
-}
-
-/**
- * gdata_mock_server_load_trace:
- * @self: a #GDataMockServer
- * @trace_file: trace file to load
- * @cancellable: (allow-none): a #GCancellable, or %NULL
- * @error: (allow-none): return location for a #GError, or %NULL
- *
- * Synchronously loads the given @trace_file of network messages, ready to simulate a network conversation by matching
- * requests against the file and returning the associated responses. Call gdata_mock_server_run() to start the mock
- * server afterwards.
- *
- * Loading the trace file may be cancelled from another thread using @cancellable.
- *
- * On error, @error will be set and the state of the #GDataMockServer will not change.
- */
-void
-gdata_mock_server_load_trace (GDataMockServer *self, GFile *trace_file, GCancellable *cancellable, GError **error)
-{
- GDataMockServerPrivate *priv = self->priv;
- SoupURI *base_uri;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (G_IS_FILE (trace_file));
- g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- g_return_if_fail (error == NULL || *error == NULL);
- g_return_if_fail (priv->trace_file == NULL && priv->input_stream == NULL && priv->next_message == NULL);
-
- base_uri = build_base_uri (self);
-
- priv->trace_file = g_object_ref (trace_file);
- priv->input_stream = load_file_stream (priv->trace_file, cancellable, error);
-
- if (priv->input_stream != NULL) {
- GError *child_error = NULL;
-
- priv->next_message = load_file_iteration (priv->input_stream, base_uri, cancellable, &child_error);
- priv->message_counter = 0;
- priv->comparison_message = g_byte_array_new ();
- priv->received_message_state = UNKNOWN;
-
- if (child_error != NULL) {
- g_clear_object (&priv->trace_file);
- g_propagate_error (error, child_error);
- }
- } else {
- /* Error. */
- g_clear_object (&priv->trace_file);
- }
-
- soup_uri_free (base_uri);
-}
-
-typedef struct {
- GAsyncReadyCallback callback;
- gpointer user_data;
- SoupURI *base_uri;
-} LoadTraceData;
-
-static void
-load_trace_async_cb (GObject *source_object, GAsyncResult *result, gpointer user_data)
-{
- GDataMockServer *self = GDATA_MOCK_SERVER (source_object);
- LoadTraceData *data = user_data;
- LoadFileIterationData *iteration_data;
- GTask *task;
- GError *child_error = NULL;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (G_IS_ASYNC_RESULT (result));
- g_return_if_fail (g_task_is_valid (result, self));
-
- self->priv->input_stream = g_task_propagate_pointer (G_TASK (result), &child_error);
-
- iteration_data = g_slice_new (LoadFileIterationData);
- iteration_data->input_stream = g_object_ref (self->priv->input_stream);
- iteration_data->base_uri = data->base_uri; /* transfer ownership */
- data->base_uri = NULL;
-
- task = g_task_new (g_task_get_source_object (G_TASK (result)), g_task_get_cancellable (G_TASK (result)), data->callback, data->user_data);
- g_task_set_task_data (task, iteration_data, (GDestroyNotify) load_file_iteration_data_free);
-
- if (child_error != NULL) {
- g_task_return_error (task, child_error);
- } else {
- g_task_run_in_thread (task, load_file_iteration_thread_cb);
- }
-
- g_object_unref (task);
-
- g_slice_free (LoadTraceData, data);
-}
-
-/**
- * gdata_mock_server_load_trace_async:
- * @self: a #GDataMockServer
- * @trace_file: trace file to load
- * @cancellable: (allow-none): a #GCancellable, or %NULL
- * @callback: function to call once the async operation is complete
- * @user_data: (allow-none): user data to pass to @callback, or %NULL
- *
- * Asynchronous version of gdata_mock_server_load_trace(). In @callback, call gdata_mock_server_load_trace_finish() to complete the operation.
- */
-void
-gdata_mock_server_load_trace_async (GDataMockServer *self, GFile *trace_file, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data)
-{
- GTask *task;
- LoadTraceData *data;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (G_IS_FILE (trace_file));
- g_return_if_fail (cancellable == NULL || G_IS_CANCELLABLE (cancellable));
- g_return_if_fail (self->priv->trace_file == NULL && self->priv->input_stream == NULL && self->priv->next_message == NULL);
-
- self->priv->trace_file = g_object_ref (trace_file);
-
- data = g_slice_new (LoadTraceData);
- data->callback = callback;
- data->user_data = user_data;
- data->base_uri = build_base_uri (self);
-
- task = g_task_new (self, cancellable, load_trace_async_cb, data);
- g_task_set_task_data (task, g_object_ref (self->priv->trace_file), g_object_unref);
- g_task_run_in_thread (task, load_file_stream_thread_cb);
- g_object_unref (task);
-}
-
-/**
- * gdata_mock_server_load_trace_finish:
- * @self: a #GDataMockServer
- * @result: asynchronous operation result passed to the callback
- * @error: (allow-none): return location for a #GError, or %NULL
- *
- * Finishes an asynchronous operation started by gdata_mock_server_load_trace_async().
- *
- * On error, @error will be set and the state of the #GDataMockServer will not change.
- */
-void
-gdata_mock_server_load_trace_finish (GDataMockServer *self, GAsyncResult *result, GError **error)
-{
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (G_IS_ASYNC_RESULT (result));
- g_return_if_fail (error == NULL || *error == NULL);
- g_return_if_fail (g_task_is_valid (result, self));
-
- self->priv->next_message = g_task_propagate_pointer (G_TASK (result), error);
- self->priv->message_counter = 0;
- self->priv->comparison_message = g_byte_array_new ();
- self->priv->received_message_state = UNKNOWN;
-}
-
-static gpointer
-server_thread_cb (gpointer user_data)
-{
- GDataMockServer *self = user_data;
- GDataMockServerPrivate *priv = self->priv;
-
- /* Run the server. */
- soup_server_run (priv->server);
-
- return NULL;
-}
-
-/**
- * gdata_mock_server_run:
- * @self: a #GDataMockServer
- *
- * Runs the mock server, binding to a loopback TCP/IP interface and preparing a HTTPS server which is ready to accept requests.
- * The TCP/IP address and port number are chosen randomly out of the loopback addresses, and are exposed as #GDataMockServer:address and #GDataMockServer:port
- * once this function has returned. A #GDataMockResolver (exposed as #GDataMockServer:resolver) is set as the default #GResolver while the server is running.
- *
- * The server is started in a worker thread, so this function returns immediately and the server continues to run in the background. Use gdata_mock_server_stop()
- * to shut it down.
- *
- * This function always succeeds.
- */
-void
-gdata_mock_server_run (GDataMockServer *self)
-{
- GDataMockServerPrivate *priv = self->priv;
- struct sockaddr_in sock;
- SoupAddress *addr;
- GMainContext *thread_context;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (priv->resolver == NULL);
- g_return_if_fail (priv->server == NULL);
-
- /* Grab a loopback IP to use. */
- memset (&sock, 0, sizeof (sock));
- sock.sin_family = AF_INET;
- sock.sin_addr.s_addr = htonl (INADDR_LOOPBACK);
- sock.sin_port = htons (0); /* random port */
-
- addr = soup_address_new_from_sockaddr ((struct sockaddr *) &sock, sizeof (sock));
- g_assert (addr != NULL);
-
- /* Set up the server. The SSL certificate can be generated using:
- * openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -nodes */
- thread_context = g_main_context_new ();
- priv->server = soup_server_new ("interface", addr,
- "ssl-cert-file", TEST_FILE_DIR "cert.pem",
- "ssl-key-file", TEST_FILE_DIR "key.pem",
- "async-context", thread_context,
- "raw-paths", TRUE,
- NULL);
- soup_server_add_handler (priv->server, "/", server_handler_cb, self, NULL);
-
- g_main_context_unref (thread_context);
- g_object_unref (addr);
-
- /* Grab the randomly selected address and port. */
- priv->address = soup_socket_get_local_address (soup_server_get_listener (priv->server));
- priv->port = soup_server_get_port (priv->server);
-
- /* Set up the resolver. It is expected that callers will grab the resolver (by calling gdata_mock_server_get_resolver())
- * immediately after this function returns, and add some expected hostnames by calling gdata_mock_resolver_add_A() one or
- * more times, before starting the next test. */
- priv->resolver = gdata_mock_resolver_new ();
- g_resolver_set_default (G_RESOLVER (priv->resolver));
-
- g_object_freeze_notify (G_OBJECT (self));
- g_object_notify (G_OBJECT (self), "address");
- g_object_notify (G_OBJECT (self), "port");
- g_object_notify (G_OBJECT (self), "resolver");
- g_object_thaw_notify (G_OBJECT (self));
-
- /* Start the network thread. */
- priv->server_thread = g_thread_new ("mock-server-thread", server_thread_cb, self);
-}
-
-/**
- * gdata_mock_server_stop:
- * @self: a #GDataMockServer
- *
- * Stops a mock server started by calling gdata_mock_server_run(). This shuts down the server's worker thread and unbinds it from its TCP/IP socket.
- *
- * This unloads any trace file loaded by calling gdata_mock_server_load_trace() (or its asynchronous counterpart). It also resets the set of domain
- * names loaded into the #GDataMockServer:resolver.
- *
- * This function always succeeds.
- */
-void
-gdata_mock_server_stop (GDataMockServer *self)
-{
- GDataMockServerPrivate *priv = self->priv;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (priv->server != NULL);
- g_return_if_fail (priv->resolver != NULL);
-
- /* Stop the server. */
- soup_server_disconnect (priv->server);
- g_thread_join (priv->server_thread);
- priv->server_thread = NULL;
- gdata_mock_resolver_reset (priv->resolver);
-
- g_clear_object (&priv->server);
- g_clear_object (&priv->resolver);
-
- priv->address = NULL;
- priv->port = 0;
-
- g_object_freeze_notify (G_OBJECT (self));
- g_object_notify (G_OBJECT (self), "address");
- g_object_notify (G_OBJECT (self), "port");
- g_object_notify (G_OBJECT (self), "resolver");
- g_object_thaw_notify (G_OBJECT (self));
-
- /* Reset the trace file. */
- gdata_mock_server_unload_trace (self);
-}
-
-/**
- * gdata_mock_server_get_trace_directory:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:trace-directory property.
- *
- * Return value: (allow-none) (transfer none): the directory to load/store trace files from, or %NULL
- */
-GFile *
-gdata_mock_server_get_trace_directory (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), NULL);
-
- return self->priv->trace_directory;
-}
-
-/**
- * gdata_mock_server_set_trace_directory:
- * @self: a #GDataMockServer
- * @trace_directory: (allow-none) (transfer none): a directory to load/store trace files from, or %NULL to unset it
- *
- * Sets the value of the #GDataMockServer:trace-directory property.
- */
-void
-gdata_mock_server_set_trace_directory (GDataMockServer *self, GFile *trace_directory)
-{
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (trace_directory == NULL || G_IS_FILE (trace_directory));
-
- if (trace_directory != NULL) {
- g_object_ref (trace_directory);
- }
-
- g_clear_object (&self->priv->trace_directory);
- self->priv->trace_directory = trace_directory;
- g_object_notify (G_OBJECT (self), "trace-directory");
-}
-
-/**
- * gdata_mock_server_start_trace:
- * @self: a #GDataMockServer
- * @trace_name: name of the trace
- *
- * Starts a mock server which follows the trace file of filename @trace_name in the #GDataMockServer:trace-directory directory.
- * See gdata_mock_server_start_trace_full() for further documentation.
- *
- * This function has undefined behaviour if #GDataMockServer:trace-directory is %NULL.
- */
-void
-gdata_mock_server_start_trace (GDataMockServer *self, const gchar *trace_name)
-{
- GFile *trace_file;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (trace_name != NULL && *trace_name != '\0');
-
- g_assert (self->priv->trace_directory != NULL);
-
- trace_file = g_file_get_child (self->priv->trace_directory, trace_name);
- gdata_mock_server_start_trace_full (self, trace_file);
- g_object_unref (trace_file);
-}
-
-/**
- * gdata_mock_server_start_trace_full:
- * @self: a #GDataMockServer
- * @trace_file: a trace file to load
- *
- * Convenience function to start logging to or reading from the given @trace_file, depending on the values of #GDataMockServer:enable-logging and
- * #GDataMockServer:enable-online.
- *
- * If #GDataMockServer:enable-logging is %TRUE, a log handler will be set up to redirect all client network activity into the given @trace_file.
- * If @trace_file already exists, it will be overwritten.
- *
- * If #GDataMockServer:enable-online is %FALSE, the given @trace_file is loaded using gdata_mock_server_load_trace() and then a mock server is
- * started using gdata_mock_server_run().
- *
- * On error, a warning message will be printed. FIXME: Ewww.
- */
-void
-gdata_mock_server_start_trace_full (GDataMockServer *self, GFile *trace_file)
-{
- GDataMockServerPrivate *priv = self->priv;
- GError *child_error = NULL;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (G_IS_FILE (trace_file));
-
- if (priv->output_stream != NULL) {
- g_warning ("%s: Nested trace files are not supported. Call gdata_mock_server_end_trace() before calling %s again.", G_STRFUNC, G_STRFUNC);
- }
- g_return_if_fail (priv->output_stream == NULL);
-
- /* Start writing out a trace file if logging is enabled. */
- if (priv->enable_logging == TRUE) {
- priv->output_stream = g_file_replace (trace_file, NULL, FALSE, G_FILE_CREATE_NONE, NULL, &child_error);
-
- if (child_error != NULL) {
- gchar *trace_file_path;
-
- trace_file_path = g_file_get_path (trace_file);
- g_warning ("Error replacing trace file ‘%s’: %s", trace_file_path, child_error->message);
- g_free (trace_file_path);
-
- g_error_free (child_error);
-
- return;
- }
- }
-
- /* Start reading from a trace file if online testing is disabled or if we need to compare server responses to the trace file. */
- if (priv->enable_online == FALSE) {
- gdata_mock_server_run (self);
- gdata_mock_server_load_trace (self, trace_file, NULL, &child_error);
-
- if (child_error != NULL) {
- gchar *trace_file_path = g_file_get_path (trace_file);
- g_error ("Error loading trace file ‘%s’: %s", trace_file_path, child_error->message);
- g_free (trace_file_path);
-
- g_error_free (child_error);
-
- gdata_mock_server_stop (self);
-
- return;
- }
- } else if (priv->enable_online == TRUE && priv->enable_logging == FALSE) {
- gdata_mock_server_load_trace (self, trace_file, NULL, &child_error);
-
- if (child_error != NULL) {
- gchar *trace_file_path = g_file_get_path (trace_file);
- g_error ("Error loading trace file ‘%s’: %s", trace_file_path, child_error->message);
- g_free (trace_file_path);
-
- g_error_free (child_error);
-
- return;
- }
- }
-}
-
-/**
- * gdata_mock_server_end_trace:
- * @self: a #GDataMockServer
- *
- * Convenience function to finish logging to or reading from a trace file previously passed to gdata_mock_server_start_trace() or
- * gdata_mock_server_start_trace_full().
- *
- * If #GDataMockServer:enable-online is %FALSE, this will shut down the mock server (as if gdata_mock_server_stop() had been called).
- */
-void
-gdata_mock_server_end_trace (GDataMockServer *self)
-{
- GDataMockServerPrivate *priv = self->priv;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
-
- if (priv->enable_online == FALSE) {
- gdata_mock_server_stop (self);
- } else if (priv->enable_online == TRUE && priv->enable_logging == FALSE) {
- gdata_mock_server_unload_trace (self);
- }
-
- if (priv->enable_logging == TRUE) {
- g_clear_object (&self->priv->output_stream);
- }
-}
-
-/**
- * gdata_mock_server_get_enable_online:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:enable-online property.
- *
- * Return value: %TRUE if the server does not intercept and handle network connections from client code; %FALSE otherwise
- */
-gboolean
-gdata_mock_server_get_enable_online (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), FALSE);
-
- return self->priv->enable_online;
-}
-
-/**
- * gdata_mock_server_set_enable_online:
- * @self: a #GDataMockServer
- * @enable_online: %TRUE to not intercept and handle network connections from client code; %FALSE otherwise
- *
- * Sets the value of the #GDataMockServer:enable-online property.
- */
-void
-gdata_mock_server_set_enable_online (GDataMockServer *self, gboolean enable_online)
-{
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
-
- self->priv->enable_online = enable_online;
- g_object_notify (G_OBJECT (self), "enable-online");
-}
-
-/**
- * gdata_mock_server_get_enable_logging:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:enable-logging property.
- *
- * Return value: %TRUE if client network traffic is being logged to a trace file; %FALSE otherwise
- */
-gboolean
-gdata_mock_server_get_enable_logging (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), FALSE);
-
- return self->priv->enable_logging;
-}
-
-/**
- * gdata_mock_server_set_enable_logging:
- * @self: a #GDataMockServer
- * @enable_logging: %TRUE to log client network traffic to a trace file; %FALSE otherwise
- *
- * Sets the value of the #GDataMockServer:enable-logging property.
- */
-void
-gdata_mock_server_set_enable_logging (GDataMockServer *self, gboolean enable_logging)
-{
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
-
- self->priv->enable_logging = enable_logging;
- g_object_notify (G_OBJECT (self), "enable-logging");
-}
-
-/**
- * gdata_mock_server_received_message_chunk:
- * @self: a #GDataMockServer
- * @message_chunk: single line of a message which was received
- * @message_chunk_length: length of @message_chunk in bytes
- *
- * Indicates to the mock server that a single new line of a message was received from the real server. The message line may be
- * appended to the current trace file if logging is enabled (#GDataMockServer:enable-logging is %TRUE), adding a newline character
- * at the end. If logging is disabled but online mode is enabled (#GDataMockServer:enable-online is %TRUE), the message line will
- * be compared to the next expected line in the existing trace file. Otherwise, this function is a no-op.
- *
- * On error, a warning will be printed. FIXME: That's icky.
- */
-void
-gdata_mock_server_received_message_chunk (GDataMockServer *self, const gchar *message_chunk, goffset message_chunk_length)
-{
- GDataMockServerPrivate *priv = self->priv;
- GError *child_error = NULL;
-
- g_return_if_fail (GDATA_IS_MOCK_SERVER (self));
- g_return_if_fail (message_chunk != NULL);
-
- /* Silently ignore the call if logging is disabled and we're offline, or if a trace file hasn't been specified. */
- if ((priv->enable_logging == FALSE && priv->enable_online == FALSE) || (priv->enable_logging == TRUE && priv->output_stream == NULL)) {
- return;
- }
-
- /* Simple state machine to track where we are in the soup log format. */
- switch (priv->received_message_state) {
- case UNKNOWN:
- if (strncmp (message_chunk, "> ", 2) == 0) {
- priv->received_message_state = REQUEST_DATA;
- }
- break;
- case REQUEST_DATA:
- if (strcmp (message_chunk, " ") == 0) {
- priv->received_message_state = REQUEST_TERMINATOR;
- } else if (strncmp (message_chunk, "> ", 2) != 0) {
- priv->received_message_state = UNKNOWN;
- }
- break;
- case REQUEST_TERMINATOR:
- if (strncmp (message_chunk, "< ", 2) == 0) {
- priv->received_message_state = RESPONSE_DATA;
- } else {
- priv->received_message_state = UNKNOWN;
- }
- break;
- case RESPONSE_DATA:
- if (strcmp (message_chunk, " ") == 0) {
- priv->received_message_state = RESPONSE_TERMINATOR;
- } else if (strncmp (message_chunk, "< ", 2) != 0) {
- priv->received_message_state = UNKNOWN;
- }
- break;
- case RESPONSE_TERMINATOR:
- if (strncmp (message_chunk, "> ", 2) == 0) {
- priv->received_message_state = REQUEST_DATA;
- } else {
- priv->received_message_state = UNKNOWN;
- }
- break;
- default:
- g_assert_not_reached ();
- }
-
- /* Silently ignore responses outputted by libsoup before the requests. This can happen when a SoupMessage is cancelled part-way through
- * sending the request; in which case libsoup logs only a response of the form:
- * < HTTP/1.1 1 Cancelled
- * < Soup-Debug-Timestamp: 1375190963
- * < Soup-Debug: SoupMessage 0 (0x7fffe00261c0)
- */
- if (priv->received_message_state == UNKNOWN) {
- return;
- }
-
- /* Append to the trace file. */
- if (priv->enable_logging == TRUE &&
- (g_output_stream_write_all (G_OUTPUT_STREAM (priv->output_stream), message_chunk, message_chunk_length, NULL, NULL, &child_error) == FALSE ||
- g_output_stream_write_all (G_OUTPUT_STREAM (priv->output_stream), "\n", 1, NULL, NULL, &child_error) == FALSE)) {
- gchar *trace_file_path = g_file_get_path (priv->trace_file);
- g_warning ("Error appending to log file ‘%s’: %s", trace_file_path, child_error->message);
- g_free (trace_file_path);
-
- g_error_free (child_error);
-
- return;
- }
-
- /* Or compare to the existing trace file. */
- if (priv->enable_logging == FALSE && priv->enable_online == TRUE) {
- /* Build up the message to compare. */
- /* TODO: escape null bytes? */
- g_byte_array_append (priv->comparison_message, (const guint8 *) message_chunk, message_chunk_length);
- g_byte_array_append (priv->comparison_message, (const guint8 *) '\n', 1);
-
- if (strcmp (message_chunk, " ") == 0) {
- /* Received the last chunk of the response, so compare the message from the trace file and that from online. */
- SoupMessage *online_message;
- SoupURI *base_uri;
-
- /* End of a message. */
- base_uri = soup_uri_new ("https://localhost/"); /* FIXME */
- online_message = trace_to_soup_message ((const gchar *) priv->comparison_message->data, base_uri);
- soup_uri_free (base_uri);
-
- g_byte_array_set_size (priv->comparison_message, 0);
- priv->received_message_state = UNKNOWN;
-
- g_assert (priv->next_message != NULL);
-
- /* Compare the message from the server with the message in the log file. */
- if (compare_incoming_message (online_message, priv->next_message, NULL) != 0) {
- gchar *next_uri, *actual_uri;
-
- next_uri = soup_uri_to_string (soup_message_get_uri (priv->next_message), TRUE);
- actual_uri = soup_uri_to_string (soup_message_get_uri (online_message), TRUE);
- g_warning ("Expected URI ‘%s’, but got ‘%s’.", next_uri, actual_uri);
- g_free (actual_uri);
- g_free (next_uri);
-
- g_object_unref (online_message);
-
- return;
- }
-
- g_object_unref (online_message);
- }
- }
-}
-
-/**
- * gdata_mock_server_get_address:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:address property.
- *
- * Return value: (allow-none) (transfer none): the address of the listening socket the server is currently bound to; or %NULL if the server is not running
- */
-SoupAddress *
-gdata_mock_server_get_address (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), NULL);
-
- return self->priv->address;
-}
-
-/**
- * gdata_mock_server_get_port:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:port property.
- *
- * Return value: the port of the listening socket the server is currently bound to; or <code class="literal">0</code> if the server is not running
- */
-guint
-gdata_mock_server_get_port (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), 0);
-
- return self->priv->port;
-}
-
-/**
- * gdata_mock_server_get_resolver:
- * @self: a #GDataMockServer
- *
- * Gets the value of the #GDataMockServer:resolver property.
- *
- * Return value: (allow-none) (transfer none): the mock resolver in use by the mock server, or %NULL if no resolver is active
- */
-GDataMockResolver *
-gdata_mock_server_get_resolver (GDataMockServer *self)
-{
- g_return_val_if_fail (GDATA_IS_MOCK_SERVER (self), NULL);
-
- return self->priv->resolver;
-}
diff --git a/gdata/tests/mock-server.h b/gdata/tests/mock-server.h
deleted file mode 100644
index 5ea39f03..00000000
--- a/gdata/tests/mock-server.h
+++ /dev/null
@@ -1,92 +0,0 @@
-/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */
-/*
- * GData Client
- * Copyright (C) Philip Withnall 2013 <philip@tecnocode.co.uk>
- *
- * GData Client is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GData Client is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GData Client. If not, see <http://www.gnu.org/licenses/>.
- */
-
-#ifndef GDATA_MOCK_SERVER_H
-#define GDATA_MOCK_SERVER_H
-
-#include <glib.h>
-#include <glib-object.h>
-#include <gio/gio.h>
-
-#include "mock-resolver.h"
-
-G_BEGIN_DECLS
-
-#define GDATA_TYPE_MOCK_SERVER (gdata_mock_server_get_type ())
-#define GDATA_MOCK_SERVER(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDATA_TYPE_MOCK_SERVER, GDataMockServer))
-#define GDATA_MOCK_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDATA_TYPE_MOCK_SERVER, GDataMockServerClass))
-#define GDATA_IS_MOCK_SERVER(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDATA_TYPE_MOCK_SERVER))
-#define GDATA_IS_MOCK_SERVER_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDATA_TYPE_MOCK_SERVER))
-#define GDATA_MOCK_SERVER_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDATA_TYPE_MOCK_SERVER, GDataMockServerClass))
-
-typedef struct _GDataMockServerPrivate GDataMockServerPrivate;
-
-typedef struct {
- GObject parent;
- GDataMockServerPrivate *priv;
-} GDataMockServer;
-
-typedef struct {
- GObjectClass parent;
-
- /**
- * handle_message:
- *
- * Class handler for the #GDataMockServer::handle-message signal. Subclasses may implement this to override the
- * default handler for the signal. The default handler should always return %TRUE to indicate that it has handled
- * the @message from @client by setting an appropriate response on the #SoupMessage.
- */
- gboolean (*handle_message) (GDataMockServer *self, SoupMessage *message, SoupClientContext *client);
-} GDataMockServerClass;
-
-GType gdata_mock_server_get_type (void) G_GNUC_CONST;
-
-GDataMockServer *gdata_mock_server_new (void) G_GNUC_MALLOC G_GNUC_WARN_UNUSED_RESULT;
-
-void gdata_mock_server_load_trace (GDataMockServer *self, GFile *trace_file, GCancellable *cancellable, GError **error);
-void gdata_mock_server_load_trace_async (GDataMockServer *self, GFile *trace_file, GCancellable *cancellable, GAsyncReadyCallback callback, gpointer user_data);
-void gdata_mock_server_load_trace_finish (GDataMockServer *self, GAsyncResult *result, GError **error);
-void gdata_mock_server_unload_trace (GDataMockServer *self);
-
-void gdata_mock_server_run (GDataMockServer *self);
-void gdata_mock_server_stop (GDataMockServer *self);
-
-GFile *gdata_mock_server_get_trace_directory (GDataMockServer *self) G_GNUC_WARN_UNUSED_RESULT;
-void gdata_mock_server_set_trace_directory (GDataMockServer *self, GFile *trace_directory);
-
-void gdata_mock_server_start_trace (GDataMockServer *self, const gchar *trace_name);
-void gdata_mock_server_start_trace_full (GDataMockServer *self, GFile *trace_file);
-void gdata_mock_server_end_trace (GDataMockServer *self);
-
-gboolean gdata_mock_server_get_enable_online (GDataMockServer *self) G_GNUC_WARN_UNUSED_RESULT;
-void gdata_mock_server_set_enable_online (GDataMockServer *self, gboolean enable_online);
-
-gboolean gdata_mock_server_get_enable_logging (GDataMockServer *self) G_GNUC_WARN_UNUSED_RESULT;
-void gdata_mock_server_set_enable_logging (GDataMockServer *self, gboolean enable_logging);
-
-void gdata_mock_server_received_message_chunk (GDataMockServer *self, const gchar *message_chunk, goffset message_chunk_length);
-
-SoupAddress *gdata_mock_server_get_address (GDataMockServer *self);
-guint gdata_mock_server_get_port (GDataMockServer *self);
-
-GDataMockResolver *gdata_mock_server_get_resolver (GDataMockServer *self) G_GNUC_WARN_UNUSED_RESULT;
-
-G_END_DECLS
-
-#endif /* !GDATA_MOCK_SERVER_H */
diff --git a/gdata/tests/oauth1-authorizer.c b/gdata/tests/oauth1-authorizer.c
index 537df1a0..aa08e998 100644
--- a/gdata/tests/oauth1-authorizer.c
+++ b/gdata/tests/oauth1-authorizer.c
@@ -23,7 +23,7 @@
#include "common.h"
static GThread *main_thread = NULL;
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
static void
test_oauth1_authorizer_constructor (void)
@@ -198,7 +198,7 @@ skip_test:
g_free (token_secret);
g_free (verifier);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -395,7 +395,7 @@ test_oauth1_authorizer_refresh_authorization (OAuth1AuthorizerData *data, gconst
g_assert_no_error (error);
g_clear_error (&error);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that processing a request with a NULL domain will not change the request. */
@@ -508,7 +508,7 @@ test_oauth1_authorizer_request_authentication_uri_sync (OAuth1AuthorizerData *da
g_free (token);
g_free (token_secret);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that requesting an authentication URI synchronously can be cancelled */
@@ -540,7 +540,7 @@ test_oauth1_authorizer_request_authentication_uri_sync_cancellation (OAuth1Autho
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -614,7 +614,7 @@ test_oauth1_authorizer_request_authentication_uri_async (OAuth1AuthorizerAsyncDa
g_main_loop_run (data->main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -661,7 +661,7 @@ test_oauth1_authorizer_request_authentication_uri_async_cancellation (OAuth1Auth
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -692,7 +692,7 @@ set_up_oauth1_authorizer_interactive_data (OAuth1AuthorizerInteractiveData *data
g_free (authentication_uri);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -715,7 +715,7 @@ set_up_oauth1_authorizer_interactive_data_bad_credentials (OAuth1AuthorizerInter
g_free (authentication_uri);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -759,7 +759,7 @@ test_oauth1_authorizer_request_authorization_sync (OAuth1AuthorizerInteractiveDa
g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->parent.authorizer),
gdata_contacts_service_get_primary_authorization_domain ()) == TRUE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that synchronously authorizing a request token fails if an invalid verifier is provided. */
@@ -786,7 +786,7 @@ test_oauth1_authorizer_request_authorization_sync_bad_credentials (OAuth1Authori
g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (data->parent.authorizer),
gdata_contacts_service_get_primary_authorization_domain ()) == FALSE);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Test that cancellation of synchronously authorizing a request token works. Note that this test has to be interactive, as the user has to visit the
@@ -826,7 +826,7 @@ test_oauth1_authorizer_request_authorization_sync_cancellation (OAuth1Authorizer
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -906,7 +906,7 @@ test_oauth1_authorizer_request_authorization_async (OAuth1AuthorizerInteractiveA
g_main_loop_run (data->main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -947,7 +947,7 @@ test_oauth1_authorizer_request_authorization_async_bad_credentials (OAuth1Author
g_main_loop_run (data->main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1001,25 +1001,25 @@ test_oauth1_authorizer_request_authorization_async_cancellation (OAuth1Authorize
g_object_unref (cancellable);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
}
}
@@ -1033,7 +1033,7 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/oauth1-authorizer");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
main_thread = g_thread_self ();
diff --git a/gdata/tests/picasaweb.c b/gdata/tests/picasaweb.c
index 1653e3cb..8319a1d2 100644
--- a/gdata/tests/picasaweb.c
+++ b/gdata/tests/picasaweb.c
@@ -33,7 +33,7 @@
#define PW_USERNAME "libgdata.picasaweb@gmail.com"
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
/* Assert that two albums have equal properties, but aren't the same object instance. For use in, e.g., comparing an inserted album from the server
* to the original instance which was inserted. */
@@ -370,7 +370,7 @@ test_authentication (void)
g_object_unref (authorizer);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (authentication, void,
@@ -493,7 +493,7 @@ set_up_query_files (QueryFilesData *data, gconstpointer service)
data->file3 = upload_file (GDATA_PICASAWEB_SERVICE (service), "Test file 3", data->album);
data->file4 = upload_file (GDATA_PICASAWEB_SERVICE (service), "Test file 4", data->album);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -508,7 +508,7 @@ tear_down_query_files (QueryFilesData *data, gconstpointer service)
g_object_unref (data->file1);
/* HACK! Wait for the distributed Google servers to synchronise. */
- if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ if (uhm_server_get_enable_online (mock_server) == TRUE) {
sleep (10);
}
@@ -525,7 +525,7 @@ tear_down_query_files (QueryFilesData *data, gconstpointer service)
g_object_unref (album_feed);
g_object_unref (data->album);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Checks to perform on a photo feed from test_query_files() or test_query_files_async(). */
@@ -579,7 +579,7 @@ test_query_files (QueryFilesData *data, gconstpointer service)
g_object_unref (photo_feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_files, QueryFilesData);
@@ -630,7 +630,7 @@ test_query_files_async_progress_closure (QueryFilesData *query_data, gconstpoint
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -651,7 +651,7 @@ test_query_files_single (QueryFilesData *data, gconstpointer service)
g_object_unref (file);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -713,7 +713,7 @@ test_download_thumbnails (QueryFilesData *data, gconstpointer service)
/* FIXME. The mock server currently doesn't support binary data, so we can't get JPEG files
* from it. Hence, only perform the GdkPixbuf tests when running tests online. */
- if (gdata_mock_server_get_enable_online (mock_server) == FALSE) {
+ if (uhm_server_get_enable_online (mock_server) == FALSE) {
break;
}
@@ -737,7 +737,7 @@ test_download_thumbnails (QueryFilesData *data, gconstpointer service)
}
#endif /* HAVE_GDK_PIXBUF */
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -790,7 +790,7 @@ test_download_photo (QueryFilesData *data, gconstpointer service)
g_file_delete (destination_file, NULL, NULL);
g_object_unref (destination_file);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -826,7 +826,7 @@ tear_down_insert_album (InsertAlbumData *data, gconstpointer service)
g_object_unref (data->album);
g_object_unref (data->inserted_album);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -860,7 +860,7 @@ test_insert_album (InsertAlbumData *data, gconstpointer service)
g_object_unref (inserted_album);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_album, InsertAlbumData);
@@ -937,7 +937,7 @@ set_up_query_all_albums (QueryAllAlbumsData *data, gconstpointer service)
g_object_unref (album);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -961,7 +961,7 @@ tear_down_query_all_albums (QueryAllAlbumsData *data, gconstpointer service)
GDATA_ENTRY (data->album4), NULL, NULL) == TRUE);
g_object_unref (data->album4);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1052,7 +1052,7 @@ test_query_all_albums (QueryAllAlbumsData *data, gconstpointer service)
g_object_unref (album_feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1101,7 +1101,7 @@ test_query_all_albums_with_limits (QueryAllAlbumsData *data, gconstpointer servi
g_object_unref (album_feed_1);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_all_albums, QueryAllAlbumsData);
@@ -1153,7 +1153,7 @@ test_query_all_albums_async_progress_closure (QueryAllAlbumsData *unused_data, g
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1211,7 +1211,7 @@ set_up_query_comments (QueryCommentsData *data, gconstpointer service)
g_assert (GDATA_IS_PICASAWEB_COMMENT (data->comment1));
g_object_unref (comment_);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1238,7 +1238,7 @@ tear_down_query_comments (QueryCommentsData *data, gconstpointer service)
g_object_unref (data->comment3);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
/* Delete the test files and albums. */
tear_down_query_files ((QueryFilesData*) data, service);
@@ -1308,7 +1308,7 @@ test_comment_query (QueryCommentsData *data, gconstpointer service)
g_object_unref (comments_feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (query_comments, QueryCommentsData);
@@ -1360,7 +1360,7 @@ test_comment_query_async_progress_closure (QueryCommentsData *query_data, gconst
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1399,7 +1399,7 @@ tear_down_insert_comment (InsertCommentData *data, gconstpointer service)
g_object_unref (data->comment);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
tear_down_query_files ((QueryFilesData*) data, service);
}
@@ -1443,7 +1443,7 @@ test_comment_insert (InsertCommentData *data, gconstpointer service)
data->new_comment = GDATA_PICASAWEB_COMMENT (new_comment);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_comment, InsertCommentData);
@@ -1484,7 +1484,7 @@ test_comment_delete (QueryCommentsData *data, gconstpointer service)
g_object_unref (data->comment1);
data->comment1 = NULL;
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (comment_delete, QueryCommentsData,
@@ -1532,7 +1532,7 @@ test_query_user (gconstpointer service)
g_object_unref (user);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* Check that asynchronously querying for the currently authenticated user's details works and returns the correct details. */
@@ -1630,7 +1630,7 @@ set_up_upload (UploadData *data, gconstpointer service)
g_assert_no_error (error);
g_assert (G_IS_FILE_INPUT_STREAM (data->file_stream));
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1652,7 +1652,7 @@ tear_down_upload (UploadData *data, gconstpointer service)
g_object_unref (data->file_stream);
g_object_unref (data->service);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1695,7 +1695,7 @@ test_upload_default_album (UploadData *data, gconstpointer service)
g_assert_cmpstr (tags2[1], ==, tags[1]);
g_assert_cmpstr (tags2[2], ==, tags[2]);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (upload, UploadData);
@@ -2064,23 +2064,23 @@ test_query_etag (void)
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
+ const gchar *ip_address = uhm_server_get_address (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "picasaweb.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "picasaweb.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
}
}
@@ -2097,13 +2097,13 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/picasaweb");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
authorizer = GDATA_AUTHORIZER (gdata_client_login_authorizer_new (CLIENT_ID, GDATA_TYPE_PICASAWEB_SERVICE));
gdata_client_login_authorizer_authenticate (GDATA_CLIENT_LOGIN_AUTHORIZER (authorizer), PW_USERNAME, PASSWORD, NULL, NULL);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
service = GDATA_SERVICE (gdata_picasaweb_service_new (authorizer));
diff --git a/gdata/tests/youtube.c b/gdata/tests/youtube.c
index 4a98e205..1195bc3a 100644
--- a/gdata/tests/youtube.c
+++ b/gdata/tests/youtube.c
@@ -26,27 +26,27 @@
#define DEVELOPER_KEY "AI39si7Me3Q7zYs6hmkFvpRBD2nrkVjYYsUO5lh_3HdOkGRc9g6Z4nzxZatk_aAo2EsA21k7vrda0OO6oFg2rnhMedZXPyXoEw"
-static GDataMockServer *mock_server = NULL;
+static UhmServer *mock_server = NULL;
-/* Effectively gdata_test_mock_server_start_trace() but calling gdata_mock_server_run() instead of gdata_mock_server_start_trace(). */
+/* Effectively gdata_test_mock_server_start_trace() but calling uhm_server_run() instead of uhm_server_start_trace(). */
static void
-gdata_test_mock_server_run (GDataMockServer *server)
+gdata_test_mock_server_run (UhmServer *server)
{
const gchar *ip_address;
- GDataMockResolver *resolver;
+ UhmResolver *resolver;
- gdata_mock_server_run (server);
+ uhm_server_run (server);
gdata_test_set_https_port (server);
- if (gdata_mock_server_get_enable_online (server) == FALSE) {
+ if (uhm_server_get_enable_online (server) == FALSE) {
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
- resolver = gdata_mock_server_get_resolver (server);
+ ip_address = uhm_server_get_address (server);
+ resolver = uhm_server_get_resolver (server);
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "gdata.youtube.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "uploads.gdata.youtube.com", ip_address);
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "gdata.youtube.com", ip_address);
+ uhm_resolver_add_A (resolver, "uploads.gdata.youtube.com", ip_address);
}
}
@@ -79,7 +79,7 @@ test_authentication (void)
g_object_unref (authorizer);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* HTTP message responses and the expected associated GData error domain/code. */
@@ -138,10 +138,10 @@ test_authentication_error (void)
gulong handler_id;
guint i;
- if (gdata_mock_server_get_enable_logging (mock_server) == TRUE) {
+ if (uhm_server_get_enable_logging (mock_server) == TRUE) {
g_test_message ("Ignoring test due to logging being enabled.");
return;
- } else if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ } else if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_test_message ("Ignoring test due to running online and test not being reproducible.");
return;
}
@@ -172,7 +172,7 @@ test_authentication_error (void)
g_object_unref (authorizer);
- gdata_mock_server_stop (mock_server);
+ uhm_server_stop (mock_server);
g_signal_handler_disconnect (mock_server, handler_id);
}
}
@@ -185,16 +185,16 @@ test_authentication_timeout (void)
GError *error = NULL;
gulong handler_id;
- if (gdata_mock_server_get_enable_logging (mock_server) == TRUE) {
+ if (uhm_server_get_enable_logging (mock_server) == TRUE) {
g_test_message ("Ignoring test due to logging being enabled.");
return;
- } else if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ } else if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_test_message ("Ignoring test due to running online and test not being reproducible.");
return;
}
handler_id = g_signal_connect (mock_server, "handle-message", (GCallback) gdata_test_mock_server_handle_message_timeout, NULL);
- gdata_mock_server_run (mock_server);
+ uhm_server_run (mock_server);
gdata_test_set_https_port (mock_server);
/* Create an authorizer and set its timeout as low as possible (1 second). */
@@ -218,7 +218,7 @@ test_authentication_timeout (void)
g_object_unref (authorizer);
- gdata_mock_server_stop (mock_server);
+ uhm_server_stop (mock_server);
g_signal_handler_disconnect (mock_server, handler_id);
}
@@ -313,7 +313,7 @@ test_query_standard_feeds (gconstpointer service)
g_object_unref (feed);
}
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -333,7 +333,7 @@ test_query_standard_feed (gconstpointer service)
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -358,7 +358,7 @@ test_query_standard_feed_with_query (gconstpointer service)
g_object_unref (query);
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
/* HTTP message responses and the expected associated GData error domain/code. */
@@ -420,10 +420,10 @@ test_query_standard_feed_error (gconstpointer service)
gulong handler_id;
guint i;
- if (gdata_mock_server_get_enable_logging (mock_server) == TRUE) {
+ if (uhm_server_get_enable_logging (mock_server) == TRUE) {
g_test_message ("Ignoring test due to logging being enabled.");
return;
- } else if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ } else if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_test_message ("Ignoring test due to running online and test not being reproducible.");
return;
}
@@ -440,7 +440,7 @@ test_query_standard_feed_error (gconstpointer service)
g_assert (feed == NULL);
g_clear_error (&error);
- gdata_mock_server_stop (mock_server);
+ uhm_server_stop (mock_server);
g_signal_handler_disconnect (mock_server, handler_id);
}
}
@@ -452,10 +452,10 @@ test_query_standard_feed_timeout (gconstpointer service)
GError *error = NULL;
gulong handler_id;
- if (gdata_mock_server_get_enable_logging (mock_server) == TRUE) {
+ if (uhm_server_get_enable_logging (mock_server) == TRUE) {
g_test_message ("Ignoring test due to logging being enabled.");
return;
- } else if (gdata_mock_server_get_enable_online (mock_server) == TRUE) {
+ } else if (uhm_server_get_enable_online (mock_server) == TRUE) {
g_test_message ("Ignoring test due to running online and test not being reproducible.");
return;
}
@@ -472,7 +472,7 @@ test_query_standard_feed_timeout (gconstpointer service)
g_assert (feed == NULL);
g_clear_error (&error);
- gdata_mock_server_stop (mock_server);
+ uhm_server_stop (mock_server);
g_signal_handler_disconnect (mock_server, handler_id);
}
@@ -520,7 +520,7 @@ test_query_standard_feed_async_progress_closure (gconstpointer service)
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static GDataYouTubeVideo *
@@ -612,7 +612,7 @@ test_query_related (gconstpointer service)
g_object_unref (video);
g_object_unref (feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (query_related, void,
@@ -667,7 +667,7 @@ test_query_related_async_progress_closure (gconstpointer service)
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -733,7 +733,7 @@ tear_down_upload (UploadData *data, gconstpointer service)
g_free (data->content_type);
g_object_unref (data->service);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -786,7 +786,7 @@ test_upload_simple (UploadData *data, gconstpointer service)
g_assert_cmpstr (tags2[1], ==, tags[1]);
g_assert_cmpstr (tags2[2], ==, tags[2]);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (upload, UploadData);
@@ -1724,7 +1724,7 @@ test_query_single (gconstpointer service)
g_object_unref (video);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (query_single, void,
@@ -1765,7 +1765,7 @@ set_up_comment (CommentData *data, gconstpointer service)
GDATA_TYPE_YOUTUBE_VIDEO, NULL, NULL));
g_assert (GDATA_IS_YOUTUBE_VIDEO (data->video));
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1819,7 +1819,7 @@ test_comment_query (CommentData *data, gconstpointer service)
g_object_unref (comments_feed);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (comment, CommentData);
@@ -1869,7 +1869,7 @@ test_comment_query_async_progress_closure (CommentData *query_data, gconstpointe
g_slice_free (GDataAsyncProgressClosure, data);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
typedef struct {
@@ -1890,7 +1890,7 @@ set_up_insert_comment (InsertCommentData *data, gconstpointer service)
gdata_entry_set_content (GDATA_ENTRY (data->comment), "This is a test comment.");
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1904,7 +1904,7 @@ tear_down_insert_comment (InsertCommentData *data, gconstpointer service)
tear_down_comment ((CommentData*) data, service);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -1948,7 +1948,7 @@ test_comment_insert (InsertCommentData *data, gconstpointer service)
g_object_unref (new_comment);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_CLOSURE_FUNCTIONS (insert_comment, InsertCommentData);
@@ -1988,7 +1988,7 @@ test_comment_delete (InsertCommentData *data, gconstpointer service)
g_assert (success == FALSE);
g_clear_error (&error);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (comment_delete, InsertCommentData,
@@ -2093,7 +2093,7 @@ test_categories (gconstpointer service)
gdata_service_set_locale (GDATA_SERVICE (service), old_locale);
g_free (old_locale);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
GDATA_ASYNC_TEST_FUNCTIONS (categories, void,
@@ -2150,7 +2150,7 @@ setup_batch (BatchData *data, gconstpointer service)
data->new_video2 = video;
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2208,7 +2208,7 @@ test_batch (BatchData *data, gconstpointer service)
g_clear_error (&error);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2243,7 +2243,7 @@ test_batch_async (BatchData *data, gconstpointer service)
g_main_loop_run (main_loop);
g_main_loop_unref (main_loop);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2288,7 +2288,7 @@ test_batch_async_cancellation (BatchData *data, gconstpointer service)
g_object_unref (cancellable);
g_object_unref (operation);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
}
static void
@@ -2301,24 +2301,24 @@ teardown_batch (BatchData *data, gconstpointer service)
static void
mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec, gpointer user_data)
{
- GDataMockServer *server;
- GDataMockResolver *resolver;
+ UhmServer *server;
+ UhmResolver *resolver;
- server = GDATA_MOCK_SERVER (object);
+ server = UHM_SERVER (object);
/* Set up the expected domain names here. This should technically be split up between
* the different unit test suites, but that's too much effort. */
- resolver = gdata_mock_server_get_resolver (server);
+ resolver = uhm_server_get_resolver (server);
if (resolver != NULL) {
- const gchar *ip_address = soup_address_get_physical (gdata_mock_server_get_address (server));
-
- gdata_mock_resolver_add_A (resolver, "www.google.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "gdata.youtube.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "uploads.gdata.youtube.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
- gdata_mock_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
+ const gchar *ip_address = uhm_server_get_address (server);
+
+ uhm_resolver_add_A (resolver, "www.google.com", ip_address);
+ uhm_resolver_add_A (resolver, "gdata.youtube.com", ip_address);
+ uhm_resolver_add_A (resolver, "uploads.gdata.youtube.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh3.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh5.googleusercontent.com", ip_address);
+ uhm_resolver_add_A (resolver, "lh6.googleusercontent.com", ip_address);
}
}
@@ -2335,13 +2335,13 @@ main (int argc, char *argv[])
mock_server = gdata_test_get_mock_server ();
g_signal_connect (G_OBJECT (mock_server), "notify::resolver", (GCallback) mock_server_notify_resolver_cb, NULL);
trace_directory = g_file_new_for_path (TEST_FILE_DIR "traces/youtube");
- gdata_mock_server_set_trace_directory (mock_server, trace_directory);
+ uhm_server_set_trace_directory (mock_server, trace_directory);
g_object_unref (trace_directory);
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
authorizer = GDATA_AUTHORIZER (gdata_client_login_authorizer_new (CLIENT_ID, GDATA_TYPE_YOUTUBE_SERVICE));
gdata_client_login_authorizer_authenticate (GDATA_CLIENT_LOGIN_AUTHORIZER (authorizer), USERNAME, PASSWORD, NULL, NULL);
- gdata_mock_server_end_trace (mock_server);
+ uhm_server_end_trace (mock_server);
service = GDATA_SERVICE (gdata_youtube_service_new (DEVELOPER_KEY, authorizer));