[libgdata] tests: Add networked tests for the Google Tasks service
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgdata] tests: Add networked tests for the Google Tasks service
- Date: Sun, 21 Sep 2014 16:43:02 +0000 (UTC)
commit 5d6f40293c1127a3879d32bd7eef4b518cb797e7
Author: Philip Withnall <philip tecnocode co uk>
Date: Wed Sep 17 23:52:48 2014 +0100
tests: Add networked tests for the Google Tasks service
This brings test coverage of the gdata/services/tasks/ directory up to
84% of lines and 90% of functions, which is good enough.
https://bugzilla.gnome.org/show_bug.cgi?id=657539
gdata/tests/Makefile.am | 23 +
gdata/tests/tasks.c | 748 +++++++++++++++++++-
gdata/tests/traces/tasks/authentication | 67 +--
gdata/tests/traces/tasks/global-authentication | 67 +--
gdata/tests/traces/tasks/setup-delete-task | 80 +++
gdata/tests/traces/tasks/setup-delete-tasklist | 39 +
gdata/tests/traces/tasks/setup-insert-task | 39 +
gdata/tests/traces/tasks/setup-list-task | 162 +++++
gdata/tests/traces/tasks/setup-list-tasklist | 117 +++
gdata/tests/traces/tasks/setup-update-task | 80 +++
gdata/tests/traces/tasks/setup-update-tasklist | 39 +
gdata/tests/traces/tasks/task-delete | 23 +
gdata/tests/traces/tasks/task-insert | 41 ++
gdata/tests/traces/tasks/task-list | 63 ++
gdata/tests/traces/tasks/task-update | 42 ++
gdata/tests/traces/tasks/tasklist-delete | 23 +
gdata/tests/traces/tasks/tasklist-insert | 42 +-
.../traces/tasks/tasklist-insert-unauthorised | 44 ++
gdata/tests/traces/tasks/tasklist-list | 61 ++
gdata/tests/traces/tasks/tasklist-update | 40 +
gdata/tests/traces/tasks/teardown-delete-task | 23 +
gdata/tests/traces/tasks/teardown-insert-task | 46 ++
gdata/tests/traces/tasks/teardown-insert-tasklist | 23 +
gdata/tests/traces/tasks/teardown-list-task | 92 +++
gdata/tests/traces/tasks/teardown-list-tasklist | 69 ++
gdata/tests/traces/tasks/teardown-update-task | 46 ++
gdata/tests/traces/tasks/teardown-update-tasklist | 23 +
27 files changed, 2035 insertions(+), 127 deletions(-)
---
diff --git a/gdata/tests/Makefile.am b/gdata/tests/Makefile.am
index af68480..2f8e778 100644
--- a/gdata/tests/Makefile.am
+++ b/gdata/tests/Makefile.am
@@ -387,6 +387,29 @@ EXTRA_DIST += \
\
traces/tasks/authentication \
traces/tasks/global-authentication \
+ traces/tasks/setup-delete-task \
+ traces/tasks/setup-delete-tasklist \
+ traces/tasks/setup-insert-task \
+ traces/tasks/setup-list-task \
+ traces/tasks/setup-list-tasklist \
+ traces/tasks/setup-update-task \
+ traces/tasks/setup-update-tasklist \
+ traces/tasks/task-delete \
+ traces/tasks/task-insert \
+ traces/tasks/task-list \
+ traces/tasks/tasklist-delete \
+ traces/tasks/tasklist-insert \
+ traces/tasks/tasklist-insert-unauthorised \
+ traces/tasks/tasklist-list \
+ traces/tasks/tasklist-update \
+ traces/tasks/task-update \
+ traces/tasks/teardown-delete-task \
+ traces/tasks/teardown-insert-task \
+ traces/tasks/teardown-insert-tasklist \
+ traces/tasks/teardown-list-task \
+ traces/tasks/teardown-list-tasklist \
+ traces/tasks/teardown-update-task \
+ traces/tasks/teardown-update-tasklist \
$(NULL)
-include $(top_srcdir)/git.mk
diff --git a/gdata/tests/tasks.c b/gdata/tests/tasks.c
index 051585a..7a5bc7e 100644
--- a/gdata/tests/tasks.c
+++ b/gdata/tests/tasks.c
@@ -27,6 +27,57 @@
static UhmServer *mock_server = NULL; /* owned */
+#undef CLIENT_ID /* from common.h */
+
+#define CLIENT_ID "352818697630-nqu2cmt5quqd6lr17ouoqmb684u84l1f.apps.googleusercontent.com"
+#define CLIENT_SECRET "-fA4pHQJxR3zJ-FyAMPQsikg"
+#define REDIRECT_URI "urn:ietf:wg:oauth:2.0:oob"
+
+static void
+test_authentication (void)
+{
+ GDataOAuth2Authorizer *authorizer = NULL; /* owned */
+ gchar *authentication_uri, *authorisation_code;
+
+ gdata_test_mock_server_start_trace (mock_server, "authentication");
+
+ authorizer = gdata_oauth2_authorizer_new (CLIENT_ID, CLIENT_SECRET,
+ REDIRECT_URI,
+ GDATA_TYPE_TASKS_SERVICE);
+
+ /* Get an authentication URI. */
+ authentication_uri = gdata_oauth2_authorizer_build_authentication_uri (authorizer, NULL, FALSE);
+ g_assert (authentication_uri != NULL);
+
+ /* Get the authorisation code off the user. */
+ if (uhm_server_get_enable_online (mock_server)) {
+ authorisation_code = gdata_test_query_user_for_verifier (authentication_uri);
+ } else {
+ /* Hard coded, extracted from the trace file. */
+ authorisation_code = g_strdup
("4/OEX-S1iMbOA_dOnNgUlSYmGWh3TK.QrR73axcNMkWoiIBeO6P2m_su7cwkQI");
+ }
+
+ g_free (authentication_uri);
+
+ if (authorisation_code == NULL) {
+ /* Skip tests. */
+ goto skip_test;
+ }
+
+ /* Authorise the token */
+ g_assert (gdata_oauth2_authorizer_request_authorization (authorizer, authorisation_code, NULL, NULL)
== TRUE);
+
+ /* Check all is as it should be */
+ g_assert (gdata_authorizer_is_authorized_for_domain (GDATA_AUTHORIZER (authorizer),
+
gdata_tasks_service_get_primary_authorization_domain ()) == TRUE);
+
+skip_test:
+ g_free (authorisation_code);
+ g_object_unref (authorizer);
+
+ uhm_server_end_trace (mock_server);
+}
+
/* Test that building a query URI works with the various parameters. */
static void
test_query_uri (void)
@@ -468,6 +519,633 @@ test_task_parser_normal (void)
g_object_unref (task);
}
+/* Test that inserting a tasklist works. */
+typedef struct {
+ GDataTasksTasklist *new_tasklist;
+} InsertTasklistData;
+
+static void
+set_up_insert_tasklist (InsertTasklistData *data, gconstpointer service)
+{
+ data->new_tasklist = NULL;
+}
+
+static void
+tear_down_insert_tasklist (InsertTasklistData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-insert-tasklist");
+
+ /* Delete the new tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->new_tasklist), NULL, NULL) == TRUE);
+
+ g_object_unref (data->new_tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_tasklist_insert (InsertTasklistData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GDataEntry *new_entry; /* unowned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "tasklist-insert");
+
+ /* Create the tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "My list of things");
+
+ /* Insert it. */
+ data->new_tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+ g_assert (GDATA_IS_TASKS_TASKLIST (data->new_tasklist));
+ gdata_test_compare_kind (GDATA_ENTRY (data->new_tasklist),
+ "tasks#taskList", NULL);
+
+ new_entry = GDATA_ENTRY (data->new_tasklist);
+
+ /* Check properties. */
+ g_assert_cmpstr (gdata_entry_get_id (new_entry), !=, NULL);
+ g_assert_cmpstr (gdata_entry_get_etag (new_entry), !=, NULL);
+ g_assert_cmpstr (gdata_entry_get_title (new_entry), ==,
+ gdata_entry_get_title (GDATA_ENTRY (tasklist)));
+ g_assert_cmpint (gdata_entry_get_updated (new_entry), >, -1);
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_tasklist_insert_unauthorised (gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GDataTasksTasklist *new_tasklist = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server,
+ "tasklist-insert-unauthorised");
+
+ /* Create the tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "My list of things");
+
+ /* Insert it. */
+ new_tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_error (error, GDATA_SERVICE_ERROR,
+ GDATA_SERVICE_ERROR_AUTHENTICATION_REQUIRED);
+ g_assert (new_tasklist == NULL);
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that listing tasklists works. */
+typedef struct {
+ GDataTasksTasklist *tasklist1;
+ GDataTasksTasklist *tasklist2;
+ GDataTasksTasklist *tasklist3;
+} ListTasklistData;
+
+static void
+set_up_list_tasklist (ListTasklistData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-list-tasklist");
+
+ /* Create the tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+
+ /* Insert it. */
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 1");
+ data->tasklist1 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 2");
+ data->tasklist2 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Tasklist 3");
+ data->tasklist3 = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_list_tasklist (ListTasklistData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-list-tasklist");
+
+ /* Delete the tasklists. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist1), NULL, NULL) == TRUE);
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist2), NULL, NULL) == TRUE);
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist3), NULL, NULL) == TRUE);
+
+ g_object_unref (data->tasklist1);
+ g_object_unref (data->tasklist2);
+ g_object_unref (data->tasklist3);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_tasklist_list (ListTasklistData *data, gconstpointer service)
+{
+ GDataFeed *feed = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "tasklist-list");
+
+ feed = gdata_tasks_service_query_all_tasklists (GDATA_TASKS_SERVICE (service),
+ NULL, NULL, NULL, NULL,
+ &error);
+ g_assert_no_error (error);
+
+ /* Check the three tasklists are present. */
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist1))) !=
NULL);
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist2))) !=
NULL);
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->tasklist3))) !=
NULL);
+
+ g_object_unref (feed);
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that updating a single tasklist works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+} UpdateTasklistData;
+
+static void
+set_up_update_tasklist (UpdateTasklistData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-update-tasklist");
+
+ /* Create the tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+
+ /* Insert it. */
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_update_tasklist (UpdateTasklistData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-update-tasklist");
+
+ /* Delete the tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
+ g_object_unref (data->tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_tasklist_update (UpdateTasklistData *data, gconstpointer service)
+{
+ GDataTasksTasklist *updated_tasklist = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "tasklist-update");
+
+ /* Update the tasklist. */
+ gdata_entry_set_title (GDATA_ENTRY (data->tasklist), "New Title!");
+
+ updated_tasklist = gdata_tasks_service_update_tasklist (GDATA_TASKS_SERVICE (service),
+ data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Check the updated tasklist. */
+ g_assert (GDATA_IS_TASKS_TASKLIST (updated_tasklist));
+ g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (updated_tasklist)),
+ ==, "New Title!");
+
+ g_object_unref (data->tasklist);
+ data->tasklist = updated_tasklist;
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that deleting a single tasklist works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+} DeleteTasklistData;
+
+static void
+set_up_delete_tasklist (DeleteTasklistData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-delete-tasklist");
+
+ /* Create the tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+
+ /* Insert it. */
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_delete_tasklist (DeleteTasklistData *data, gconstpointer service)
+{
+ g_object_unref (data->tasklist);
+}
+
+static void
+test_tasklist_delete (DeleteTasklistData *data, gconstpointer service)
+{
+ gboolean retval;
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "tasklist-delete");
+
+ /* Delete the tasklist. */
+ retval = gdata_tasks_service_delete_tasklist (GDATA_TASKS_SERVICE (service),
+ data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+ g_assert (retval);
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that inserting a task works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+ GDataTasksTask *new_task;
+} InsertTaskData;
+
+static void
+set_up_insert_task (InsertTaskData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL;
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-insert-task");
+
+ /* Create a tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ data->new_task = NULL;
+
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_insert_task (InsertTaskData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-insert-task");
+
+ /* Delete the new task. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->new_task), NULL, NULL) == TRUE);
+ g_object_unref (data->new_task);
+
+ /* Delete the tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
+ g_object_unref (data->tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_task_insert (InsertTaskData *data, gconstpointer service)
+{
+ GDataTasksTask *task = NULL; /* owned */
+ GDataEntry *new_entry; /* unowned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "task-insert");
+
+ /* Create the task. */
+ task = gdata_tasks_task_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (task), "My list of things");
+
+ /* Insert it. */
+ data->new_task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+ g_assert (GDATA_IS_TASKS_TASK (data->new_task));
+ gdata_test_compare_kind (GDATA_ENTRY (data->new_task),
+ "tasks#task", NULL);
+
+ new_entry = GDATA_ENTRY (data->new_task);
+
+ /* Check properties. */
+ g_assert_cmpstr (gdata_entry_get_id (new_entry), !=, NULL);
+ g_assert_cmpstr (gdata_entry_get_etag (new_entry), !=, NULL);
+ g_assert_cmpstr (gdata_entry_get_title (new_entry), ==,
+ gdata_entry_get_title (GDATA_ENTRY (task)));
+ g_assert_cmpint (gdata_entry_get_updated (new_entry), >, -1);
+
+ g_object_unref (task);
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that listing tasks works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+ GDataTasksTask *task1;
+ GDataTasksTask *task2;
+ GDataTasksTask *task3;
+} ListTaskData;
+
+static void
+set_up_list_task (ListTaskData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GDataTasksTask *task = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-list-task");
+
+ /* Create a tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Create the task. */
+ task = gdata_tasks_task_new (NULL);
+
+ /* Insert it. */
+ gdata_entry_set_title (GDATA_ENTRY (task), "Task 1");
+ data->task1 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ gdata_entry_set_title (GDATA_ENTRY (task), "Task 2");
+ data->task2 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ gdata_entry_set_title (GDATA_ENTRY (task), "Task 3");
+ data->task3 = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (task);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_list_task (ListTaskData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-list-task");
+
+ /* Delete the tasks. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->task1), NULL, NULL) == TRUE);
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->task2), NULL, NULL) == TRUE);
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->task3), NULL, NULL) == TRUE);
+
+ g_object_unref (data->task1);
+ g_object_unref (data->task2);
+ g_object_unref (data->task3);
+
+ /* Delete the tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
+ g_object_unref (data->tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_task_list (ListTaskData *data, gconstpointer service)
+{
+ GDataFeed *feed = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "task-list");
+
+ feed = gdata_tasks_service_query_tasks (GDATA_TASKS_SERVICE (service),
+ data->tasklist, NULL, NULL,
+ NULL, NULL, &error);
+ g_assert_no_error (error);
+
+ /* Check the three tasks are present. */
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task1))) != NULL);
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task2))) != NULL);
+ g_assert (gdata_feed_look_up_entry (feed, gdata_entry_get_id (GDATA_ENTRY (data->task3))) != NULL);
+
+ g_object_unref (feed);
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that updating a single task works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+ GDataTasksTask *task;
+} UpdateTaskData;
+
+static void
+set_up_update_task (UpdateTaskData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GDataTasksTask *task = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-update-task");
+
+ /* Create a tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Create the task. */
+ task = gdata_tasks_task_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (task), "Some task");
+ data->task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (task);
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_update_task (UpdateTaskData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-update-task");
+
+ /* Delete the task. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->task), NULL, NULL) == TRUE);
+ g_object_unref (data->task);
+
+ /* Delete the tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
+ g_object_unref (data->tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_task_update (UpdateTaskData *data, gconstpointer service)
+{
+ GDataTasksTask *updated_task = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "task-update");
+
+ /* Update the task. */
+ gdata_entry_set_title (GDATA_ENTRY (data->task), "New Title!");
+
+ updated_task = gdata_tasks_service_update_task (GDATA_TASKS_SERVICE (service),
+ data->task,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Check the updated task. */
+ g_assert (GDATA_IS_TASKS_TASK (updated_task));
+ g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (updated_task)),
+ ==, "New Title!");
+
+ g_object_unref (data->task);
+ data->task = updated_task;
+
+ uhm_server_end_trace (mock_server);
+}
+
+/* Test that deleting a single task works. */
+typedef struct {
+ GDataTasksTasklist *tasklist;
+ GDataTasksTask *task;
+} DeleteTaskData;
+
+static void
+set_up_delete_task (DeleteTaskData *data, gconstpointer service)
+{
+ GDataTasksTasklist *tasklist = NULL; /* owned */
+ GDataTasksTask *task = NULL; /* owned */
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "setup-delete-task");
+
+ /* Create a tasklist. */
+ tasklist = gdata_tasks_tasklist_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (tasklist), "Some tasklist");
+ data->tasklist = gdata_tasks_service_insert_tasklist (GDATA_TASKS_SERVICE (service),
+ tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ /* Create the task. */
+ task = gdata_tasks_task_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (task), "Some task");
+ data->task = gdata_tasks_service_insert_task (GDATA_TASKS_SERVICE (service),
+ task, data->tasklist,
+ NULL, &error);
+ g_assert_no_error (error);
+
+ g_object_unref (task);
+ g_object_unref (tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+tear_down_delete_task (DeleteTaskData *data, gconstpointer service)
+{
+ gdata_test_mock_server_start_trace (mock_server, "teardown-delete-task");
+
+ g_object_unref (data->task);
+
+ /* Delete the tasklist. */
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service),
gdata_tasks_service_get_primary_authorization_domain (),
+ GDATA_ENTRY (data->tasklist), NULL, NULL) == TRUE);
+ g_object_unref (data->tasklist);
+
+ uhm_server_end_trace (mock_server);
+}
+
+static void
+test_task_delete (DeleteTaskData *data, gconstpointer service)
+{
+ gboolean retval;
+ GError *error = NULL;
+
+ gdata_test_mock_server_start_trace (mock_server, "task-delete");
+
+ /* Delete the task. */
+ retval = gdata_tasks_service_delete_task (GDATA_TASKS_SERVICE (service),
+ data->task, NULL, &error);
+ g_assert_no_error (error);
+ g_assert (retval);
+
+ uhm_server_end_trace (mock_server);
+}
+
/* Test that getting/setting tasklist properties works. */
static void
test_tasklist_properties (void)
@@ -606,6 +1284,8 @@ mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec,
uhm_resolver_add_A (resolver, "www.google.com", ip_address);
uhm_resolver_add_A (resolver, "www.googleapis.com", ip_address);
+ uhm_resolver_add_A (resolver,
+ "accounts.google.com", ip_address);
}
}
@@ -617,8 +1297,8 @@ mock_server_notify_resolver_cb (GObject *object, GParamSpec *pspec,
static GDataAuthorizer *
create_global_authorizer (void)
{
- GDataOAuth1Authorizer *authorizer = NULL; /* owned */
- gchar *authentication_uri, *token, *token_secret, *verifier;
+ GDataOAuth2Authorizer *authorizer = NULL; /* owned */
+ gchar *authentication_uri, *authorisation_code;
GError *error = NULL;
/* If not online, just return a dummy authoriser. */
@@ -628,24 +1308,25 @@ create_global_authorizer (void)
/* Otherwise, go through the interactive OAuth dance. */
gdata_test_mock_server_start_trace (mock_server, "global-authentication");
- authorizer = gdata_oauth1_authorizer_new ("Application name",
+ authorizer = gdata_oauth2_authorizer_new (CLIENT_ID, CLIENT_SECRET,
+ REDIRECT_URI,
GDATA_TYPE_TASKS_SERVICE);
/* Get an authentication URI */
- authentication_uri = gdata_oauth1_authorizer_request_authentication_uri (authorizer, &token,
&token_secret, NULL, &error);
- g_assert_no_error (error);
+ authentication_uri = gdata_oauth2_authorizer_build_authentication_uri (authorizer, NULL, FALSE);
g_assert (authentication_uri != NULL);
- /* Get the verifier off the user.
- *
- * FIXME: Won’t work due to nonces in the OAuth protocol. */
+ /* Get the authorisation code off the user. */
if (uhm_server_get_enable_online (mock_server)) {
- verifier = gdata_test_query_user_for_verifier (authentication_uri);
+ authorisation_code = gdata_test_query_user_for_verifier (authentication_uri);
+ } else {
+ /* Hard coded, extracted from the trace file. */
+ authorisation_code = g_strdup
("4/hmXZtrXmXMqK1hwiWPZs9F_N6DK-.Ap4OICAUIe0WoiIBeO6P2m8IDoMxkQI");
}
g_free (authentication_uri);
- if (verifier == NULL) {
+ if (authorisation_code == NULL) {
/* Skip tests. */
g_object_unref (authorizer);
authorizer = NULL;
@@ -653,13 +1334,11 @@ create_global_authorizer (void)
}
/* Authorise the token */
- g_assert (gdata_oauth1_authorizer_request_authorization (authorizer, token, token_secret, verifier,
NULL, &error));
+ g_assert (gdata_oauth2_authorizer_request_authorization (authorizer, authorisation_code, NULL,
&error));
g_assert_no_error (error);
skip_test:
- g_free (token);
- g_free (token_secret);
- g_free (verifier);
+ g_free (authorisation_code);
uhm_server_end_trace (mock_server);
@@ -671,7 +1350,9 @@ main (int argc, char *argv[])
{
gint retval;
GDataAuthorizer *authorizer = NULL; /* owned */
+ GDataAuthorizer *unauthorised_authorizer = NULL; /* owned */
GDataService *service = NULL; /* owned */
+ GDataService *unauthorised_service = NULL; /* owned */
GFile *trace_directory = NULL; /* owned */
gdata_test_init (argc, argv);
@@ -684,8 +1365,45 @@ main (int argc, char *argv[])
g_object_unref (trace_directory);
authorizer = create_global_authorizer ();
+ unauthorised_authorizer = GDATA_AUTHORIZER (gdata_oauth2_authorizer_new (CLIENT_ID,
+ CLIENT_SECRET,
+ REDIRECT_URI,
+ GDATA_TYPE_TASKS_SERVICE));
service = GDATA_SERVICE (gdata_tasks_service_new (authorizer));
+ unauthorised_service = GDATA_SERVICE (gdata_tasks_service_new (unauthorised_authorizer));
+
+ g_test_add_func ("/tasks/authentication", test_authentication);
+
+ g_test_add_data_func ("/tasks/tasklist/insert/unauthorised",
+ unauthorised_service,
+ test_tasklist_insert_unauthorised);
+
+ g_test_add ("/tasks/tasklist/insert", InsertTasklistData, service,
+ set_up_insert_tasklist, test_tasklist_insert,
+ tear_down_insert_tasklist);
+ g_test_add ("/tasks/tasklist/list", ListTasklistData, service,
+ set_up_list_tasklist, test_tasklist_list,
+ tear_down_list_tasklist);
+ g_test_add ("/tasks/tasklist/update", UpdateTasklistData, service,
+ set_up_update_tasklist, test_tasklist_update,
+ tear_down_update_tasklist);
+ g_test_add ("/tasks/tasklist/delete", DeleteTasklistData, service,
+ set_up_delete_tasklist, test_tasklist_delete,
+ tear_down_delete_tasklist);
+
+ g_test_add ("/tasks/task/insert", InsertTaskData, service,
+ set_up_insert_task, test_task_insert,
+ tear_down_insert_task);
+ g_test_add ("/tasks/task/list", ListTaskData, service,
+ set_up_list_task, test_task_list,
+ tear_down_list_task);
+ g_test_add ("/tasks/task/update", UpdateTaskData, service,
+ set_up_update_task, test_task_update,
+ tear_down_update_task);
+ g_test_add ("/tasks/task/delete", DeleteTaskData, service,
+ set_up_delete_task, test_task_delete,
+ tear_down_delete_task);
g_test_add_func ("/tasks/task/properties", test_task_properties);
g_test_add_func ("/tasks/task/escaping", test_task_escaping);
@@ -705,7 +1423,9 @@ main (int argc, char *argv[])
retval = g_test_run ();
+ g_clear_object (&unauthorised_service);
g_clear_object (&service);
+ g_clear_object (&unauthorised_authorizer);
g_clear_object (&authorizer);
return retval;
diff --git a/gdata/tests/traces/tasks/authentication b/gdata/tests/traces/tasks/authentication
index 90921dc..3abfecc 100644
--- a/gdata/tests/traces/tasks/authentication
+++ b/gdata/tests/traces/tasks/authentication
@@ -1,58 +1,35 @@
-> POST /accounts/OAuthGetRequestToken HTTP/1.1
-> Soup-Debug-Timestamp: 1409422326
-> Soup-Debug: SoupSession 1 (0x12c74a0), SoupMessage 1 (0x148d2c0), SoupSocket 1 (0x15295f0)
-> Host: www.google.com
+> POST /o/oauth2/token HTTP/1.1
+> Soup-Debug-Timestamp: 1411305313
+> Soup-Debug: SoupSession 1 (0x25fd370), SoupMessage 1 (0x28e5190), SoupSocket 1 (0x28bcb40)
+> Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
-> Authorization: OAuth
oauth_consumer_key="anonymous",oauth_signature_method="HMAC-SHA1",oauth_signature="FdGrzlgEmMBFhWVk1s7%2BAOAntZ4%3D",oauth_timestamp="1409422326",oauth_nonce="TulqpkiMKnDeZ0yZBYeMEbeCBMs21s",oauth_version="1.0"
Accept-Encoding: gzip, deflate
-> User-Agent: libgdata/0.15.3 - gzip
+> User-Agent: libgdata/0.17.0 - gzip
Connection: Keep-Alive
->
xoauth_displayname=Application+name&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ftasks&oauth_callback=oob
+>
client_id=352818697630-nqu2cmt5quqd6lr17ouoqmb684u84l1f.apps.googleusercontent.com&client_secret=-fA4pHQJxR3zJ-FyAMPQsikg&code=4%2FOEX-S1iMbOA_dOnNgUlSYmGWh3TK.QrR73axcNMkWoiIBeO6P2m_su7cwkQI&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&grant_type=authorization_code
< HTTP/1.1 200 OK
-< Soup-Debug-Timestamp: 1409422326
-< Soup-Debug: SoupMessage 1 (0x148d2c0)
-< Content-Type: text/plain; charset=UTF-8
-< X-Frame-Options: DENY
+< Soup-Debug-Timestamp: 1411305313
+< Soup-Debug: SoupMessage 1 (0x28e5190)
+< Content-Type: application/json; charset=utf-8
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:15:13 GMT
+< Content-Disposition: attachment; filename="json.txt"; filename*=UTF-8''json.txt
< Content-Encoding: gzip
-< Date: Sat, 30 Aug 2014 18:12:06 GMT
-< Expires: Sat, 30 Aug 2014 18:12:06 GMT
-< Cache-Control: private, max-age=0
< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< Server: GSE
-< Alternate-Protocol: 443:quic
+< Alternate-Protocol: 443:quic,p=0.002
< Transfer-Encoding: chunked
<
-<
oauth_token=4%2Fl5d93H05bTVol0AM-ElG13vOG5Uq&oauth_token_secret=XKiN1TLQqnTqqyJFtf4W04u0&oauth_callback_confirmed=true
-
-> POST /accounts/OAuthGetAccessToken HTTP/1.1
-> Soup-Debug-Timestamp: 1409422343
-> Soup-Debug: SoupSession 1 (0x12c74a0), SoupMessage 2 (0x148d3b0), SoupSocket 2 (0x15292b0)
-> Host: www.google.com
-> Content-Type: application/x-www-form-urlencoded
-> Authorization: OAuth
oauth_consumer_key="anonymous",oauth_token="4%2Fl5d93H05bTVol0AM-ElG13vOG5Uq",oauth_signature_method="HMAC-SHA1",oauth_signature="iOj0JfnbfuigBbqwbmk7WdW%2BwXA%3D",oauth_timestamp="1409422343",oauth_nonce="h6O8MxJ4GcCUZ1Q",oauth_version="1.0"
-> Accept-Encoding: gzip, deflate
-> User-Agent: libgdata/0.15.3 - gzip
-> Connection: Keep-Alive
->
-> oauth_verifier=xr1gdoOQNtflNMk58dgYiBIv
-
-< HTTP/1.1 200 OK
-< Soup-Debug-Timestamp: 1409422343
-< Soup-Debug: SoupMessage 2 (0x148d3b0)
-< Content-Type: text/plain; charset=UTF-8
-< X-Frame-Options: DENY
-< Content-Encoding: gzip
-< Date: Sat, 30 Aug 2014 18:12:23 GMT
-< Expires: Sat, 30 Aug 2014 18:12:23 GMT
-< Cache-Control: private, max-age=0
-< X-Content-Type-Options: nosniff
-< X-XSS-Protection: 1; mode=block
-< Server: GSE
-< Alternate-Protocol: 443:quic
-< Transfer-Encoding: chunked
-<
-< oauth_token=1%2FQHOXVuxNbP60WkZZ3KTYK3jxxC1L8k7VbTa6Mtz-Vko&oauth_token_secret=iDghWbJqQk_2N47DebnAxXN2
+< {
+< "access_token" : "ya29.hwAB1qOhYEtLzMrP_BObQQoQ8rgDq7GWWSCI47bXVrLBS3zpFKRlDx-C",
+< "token_type" : "Bearer",
+< "expires_in" : 3600,
+< "refresh_token" : "1/B7GfeRCYkkDmZF6KdjLR3OW7nlAjz1LIeJGg_mhludc"
+< }
diff --git a/gdata/tests/traces/tasks/global-authentication b/gdata/tests/traces/tasks/global-authentication
index 543a0a6..8c27cf6 100644
--- a/gdata/tests/traces/tasks/global-authentication
+++ b/gdata/tests/traces/tasks/global-authentication
@@ -1,58 +1,35 @@
-> POST /accounts/OAuthGetRequestToken HTTP/1.1
-> Soup-Debug-Timestamp: 1409422415
-> Soup-Debug: SoupSession 1 (0x1452110), SoupMessage 1 (0x176e0d0), SoupSocket 1 (0x17918d0)
-> Host: www.google.com
+> POST /o/oauth2/token HTTP/1.1
+> Soup-Debug-Timestamp: 1411311975
+> Soup-Debug: SoupSession 1 (0xcfb110), SoupMessage 1 (0xff20a0), SoupSocket 1 (0x103a0d0)
+> Host: accounts.google.com
Content-Type: application/x-www-form-urlencoded
-> Authorization: OAuth
oauth_consumer_key="anonymous",oauth_signature_method="HMAC-SHA1",oauth_signature="i2nl79VvYsmeJu3fqxbPvTiuzOs%3D",oauth_timestamp="1409422414",oauth_nonce="xEqfLPDaB3h9_tmfbaXy3fV3",oauth_version="1.0"
Accept-Encoding: gzip, deflate
-> User-Agent: libgdata/0.15.3 - gzip
+> User-Agent: libgdata/0.17.0 - gzip
Connection: Keep-Alive
->
xoauth_displayname=Application+name&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Ftasks&oauth_callback=oob
+>
client_id=352818697630-nqu2cmt5quqd6lr17ouoqmb684u84l1f.apps.googleusercontent.com&client_secret=-fA4pHQJxR3zJ-FyAMPQsikg&code=4%2FhmXZtrXmXMqK1hwiWPZs9F_N6DK-.Ap4OICAUIe0WoiIBeO6P2m8IDoMxkQI&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&grant_type=authorization_code
< HTTP/1.1 200 OK
-< Soup-Debug-Timestamp: 1409422415
-< Soup-Debug: SoupMessage 1 (0x176e0d0)
-< Content-Type: text/plain; charset=UTF-8
-< X-Frame-Options: DENY
+< Soup-Debug-Timestamp: 1411311975
+< Soup-Debug: SoupMessage 1 (0xff20a0)
+< Content-Type: application/json; charset=utf-8
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:15 GMT
+< Content-Disposition: attachment; filename="json.txt"; filename*=UTF-8''json.txt
< Content-Encoding: gzip
-< Date: Sat, 30 Aug 2014 18:13:35 GMT
-< Expires: Sat, 30 Aug 2014 18:13:35 GMT
-< Cache-Control: private, max-age=0
< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< Server: GSE
-< Alternate-Protocol: 443:quic
+< Alternate-Protocol: 443:quic,p=0.002
< Transfer-Encoding: chunked
<
-<
oauth_token=4%2FxtSo6-lke4k9-2pkKsbio8Hlug_3&oauth_token_secret=yu3WyKJeNUBgvbcEdWh-pmc6&oauth_callback_confirmed=true
-
-> POST /accounts/OAuthGetAccessToken HTTP/1.1
-> Soup-Debug-Timestamp: 1409422422
-> Soup-Debug: SoupSession 1 (0x1452110), SoupMessage 2 (0x176e1c0), SoupSocket 2 (0x1791b40)
-> Host: www.google.com
-> Content-Type: application/x-www-form-urlencoded
-> Authorization: OAuth
oauth_consumer_key="anonymous",oauth_token="4%2FxtSo6-lke4k9-2pkKsbio8Hlug_3",oauth_signature_method="HMAC-SHA1",oauth_signature="rqutQ8Pg3rEFvv2IXEfH7q1zrSA%3D",oauth_timestamp="1409422422",oauth_nonce="JlzqaeUaWbuNm_a8kTtIDPmBzmr0",oauth_version="1.0"
-> Accept-Encoding: gzip, deflate
-> User-Agent: libgdata/0.15.3 - gzip
-> Connection: Keep-Alive
->
-> oauth_verifier=pYWHuxLD1Ko430Ty7y6zlFpk
-
-< HTTP/1.1 200 OK
-< Soup-Debug-Timestamp: 1409422422
-< Soup-Debug: SoupMessage 2 (0x176e1c0)
-< Content-Type: text/plain; charset=UTF-8
-< X-Frame-Options: DENY
-< Content-Encoding: gzip
-< Date: Sat, 30 Aug 2014 18:13:42 GMT
-< Expires: Sat, 30 Aug 2014 18:13:42 GMT
-< Cache-Control: private, max-age=0
-< X-Content-Type-Options: nosniff
-< X-XSS-Protection: 1; mode=block
-< Server: GSE
-< Alternate-Protocol: 443:quic
-< Transfer-Encoding: chunked
-<
-< oauth_token=1%2FPWynNF1IaX9ebgNq9RZcL8_aawfAk2LeWeKH62x7xnw&oauth_token_secret=s1yZ_C890UZYYI99K1JVV6Yb
+< {
+< "access_token" : "ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU",
+< "token_type" : "Bearer",
+< "expires_in" : 3600,
+< "refresh_token" : "1/pdQzbl1uTCsnztMYVypgAH-ldUeZV2n7S6GDq6-tYF8"
+< }
diff --git a/gdata/tests/traces/tasks/setup-delete-task b/gdata/tests/traces/tasks/setup-delete-task
new file mode 100644
index 0000000..75093ca
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-delete-task
@@ -0,0 +1,80 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411311990
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 19 (0xff2460), SoupSocket 11 (0x103a340)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311993
+< Soup-Debug: SoupMessage 19 (0xff2460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:33 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/P0-yzIfqEp8hfY8XeaG0NpnVdEY"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/P0-yzIfqEp8hfY8XeaG0NpnVdEY\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T15:06:32.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA"
+< }
+
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311993
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 20 (0xff2370), SoupSocket 12 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some task","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311993
+< Soup-Debug: SoupMessage 20 (0xff2370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:33 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTEwMTQ3NjU0MzI"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjU1MzM0NDU0Nw",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTEwMTQ3NjU0MzI\"",
+< "title": "Some task",
+< "updated": "2014-09-21T15:06:33.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjU1MzM0NDU0Nw",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-delete-tasklist b/gdata/tests/traces/tasks/setup-delete-tasklist
new file mode 100644
index 0000000..4fae2ca
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-delete-tasklist
@@ -0,0 +1,39 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306825
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 13 (0x1a99190), SoupSocket 8 (0x199fa70)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306827
+< Soup-Debug: SoupMessage 13 (0x1a99190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:27 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/C1YQlR3vXAgqp98al63Zwv69j00"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTE0MDkwNzk5Njow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/C1YQlR3vXAgqp98al63Zwv69j00\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T13:40:27.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTE0MDkwNzk5Njow"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-insert-task b/gdata/tests/traces/tasks/setup-insert-task
new file mode 100644
index 0000000..723bea6
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-insert-task
@@ -0,0 +1,39 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411311976
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 1 (0xff2190), SoupSocket 1 (0x103a340)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311977
+< Soup-Debug: SoupMessage 1 (0xff2190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:17 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/_OP1nZig6T24458ddfbOXnBLhjE"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/_OP1nZig6T24458ddfbOXnBLhjE\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T15:06:17.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-list-task b/gdata/tests/traces/tasks/setup-list-task
new file mode 100644
index 0000000..89166fe
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-list-task
@@ -0,0 +1,162 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411311980
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 5 (0xff2550), SoupSocket 3 (0x103a270)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311981
+< Soup-Debug: SoupMessage 5 (0xff2550)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:21 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/PbVEEtyPldOicyVC8KpBcIrP3co"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/PbVEEtyPldOicyVC8KpBcIrP3co\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T15:06:21.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow"
+< }
+
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311981
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 6 (0xff2550), SoupSocket 4 (0x103a340)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Task 1","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311982
+< Soup-Debug: SoupMessage 6 (0xff2550)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:22 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/MzE3NzgwODgx"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMzMyNDAxMTM2",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/MzE3NzgwODgx\"",
+< "title": "Task 1",
+< "updated": "2014-09-21T15:06:21.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMzMyNDAxMTM2",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311982
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 7 (0xff2460), SoupSocket 5 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Task 2","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311982
+< Soup-Debug: SoupMessage 7 (0xff2460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:22 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/NTY5MzIxODcx"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxNDY3MTQwNDcw",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/NTY5MzIxODcx\"",
+< "title": "Task 2",
+< "updated": "2014-09-21T15:06:22.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxNDY3MTQwNDcw",
+< "position": "00000000001610612734",
+< "status": "needsAction"
+< }
+
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311983
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 8 (0xff2370), SoupSocket 6 (0x103a410)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Task 3","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311983
+< Soup-Debug: SoupMessage 8 (0xff2370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:23 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTgxNzc5ODY2Nw"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMTU3NTQzNjg5",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTgxNzc5ODY2Nw\"",
+< "title": "Task 3",
+< "updated": "2014-09-21T15:06:23.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMTU3NTQzNjg5",
+< "position": "00000000001234803096",
+< "status": "needsAction"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-list-tasklist b/gdata/tests/traces/tasks/setup-list-tasklist
new file mode 100644
index 0000000..98fe3d7
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-list-tasklist
@@ -0,0 +1,117 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306815
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 3 (0x1a99370), SoupSocket 2 (0x199fdb0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Tasklist 1","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306816
+< Soup-Debug: SoupMessage 3 (0x1a99370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:16 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/mcdH7OfYcOU1vkq49QoOeZ4viZ0"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTM0OTQ3MzMyOjA",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/mcdH7OfYcOU1vkq49QoOeZ4viZ0\"",
+< "title": "Tasklist 1",
+< "updated": "2014-09-21T13:40:16.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTM0OTQ3MzMyOjA"
+< }
+
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306816
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 4 (0x1a99460), SoupSocket 3 (0x199fa70)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Tasklist 2","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306818
+< Soup-Debug: SoupMessage 4 (0x1a99460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:18 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/1JlVECn_cMPg1pMhl7jB4_Mvo5k"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6NzcyNzY3ODAxOjA",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/1JlVECn_cMPg1pMhl7jB4_Mvo5k\"",
+< "title": "Tasklist 2",
+< "updated": "2014-09-21T13:40:18.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NzcyNzY3ODAxOjA"
+< }
+
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306818
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 5 (0x1a99550), SoupSocket 4 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Tasklist 2","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306820
+< Soup-Debug: SoupMessage 5 (0x1a99550)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:20 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/gP8XnbCGmgmZCm0q7Wmqsl8zt74"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTg1OTU0NTMxOTow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/gP8XnbCGmgmZCm0q7Wmqsl8zt74\"",
+< "title": "Tasklist 2",
+< "updated": "2014-09-21T13:40:19.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTg1OTU0NTMxOTow"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-update-task b/gdata/tests/traces/tasks/setup-update-task
new file mode 100644
index 0000000..5e15032
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-update-task
@@ -0,0 +1,80 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411311986
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 14 (0xff2280), SoupSocket 9 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311988
+< Soup-Debug: SoupMessage 14 (0xff2280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:28 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/L6nOdn_S4OwYUP7IdjSGd7fk9Po"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/L6nOdn_S4OwYUP7IdjSGd7fk9Po\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T15:06:28.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA"
+< }
+
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311988
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 15 (0xff2370), SoupSocket 10 (0x103a1a0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some task","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311989
+< Soup-Debug: SoupMessage 15 (0xff2370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:29 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTExMzAyNDk3Njk"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTExMzAyNDk3Njk\"",
+< "title": "Some task",
+< "updated": "2014-09-21T15:06:28.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+
diff --git a/gdata/tests/traces/tasks/setup-update-tasklist b/gdata/tests/traces/tasks/setup-update-tasklist
new file mode 100644
index 0000000..ae82a93
--- /dev/null
+++ b/gdata/tests/traces/tasks/setup-update-tasklist
@@ -0,0 +1,39 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306822
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 10 (0x1a99190), SoupSocket 7 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"Some tasklist","kind":"tasks#taskList"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306823
+< Soup-Debug: SoupMessage 10 (0x1a99190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:23 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/5BOhEfC4ZnzLfX5N7niDqC5Hbiw"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/5BOhEfC4ZnzLfX5N7niDqC5Hbiw\"",
+< "title": "Some tasklist",
+< "updated": "2014-09-21T13:40:23.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow"
+< }
+
diff --git a/gdata/tests/traces/tasks/task-delete b/gdata/tests/traces/tasks/task-delete
new file mode 100644
index 0000000..760b14d
--- /dev/null
+++ b/gdata/tests/traces/tasks/task-delete
@@ -0,0 +1,23 @@
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjU1MzM0NDU0Nw
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311993
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 21 (0xff2280), SoupSocket 12 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTEwMTQ3NjU0MzI"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311994
+< Soup-Debug: SoupMessage 21 (0xff2280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:34 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/task-insert b/gdata/tests/traces/tasks/task-insert
new file mode 100644
index 0000000..2569cc7
--- /dev/null
+++ b/gdata/tests/traces/tasks/task-insert
@@ -0,0 +1,41 @@
+> POST /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311978
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 2 (0xff2280), SoupSocket 2 (0x103a5b0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"My list of things","kind":"tasks#task","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311978
+< Soup-Debug: SoupMessage 2 (0xff2280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:18 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTUyODk4MTc1Mg"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MTgxODA5NjI4Mg",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTUyODk4MTc1Mg\"",
+< "title": "My list of things",
+< "updated": "2014-09-21T15:06:18.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MTgxODA5NjI4Mg",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+
diff --git a/gdata/tests/traces/tasks/task-list b/gdata/tests/traces/tasks/task-list
new file mode 100644
index 0000000..eaea2af
--- /dev/null
+++ b/gdata/tests/traces/tasks/task-list
@@ -0,0 +1,63 @@
+> GET /tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks HTTP/1.1
+> Soup-Debug-Timestamp: 1411311983
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 9 (0xff2280), SoupSocket 6 (0x103a410)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311983
+< Soup-Debug: SoupMessage 9 (0xff2280)
+< Expires: Sun, 21 Sep 2014 15:06:23 GMT
+< Date: Sun, 21 Sep 2014 15:06:23 GMT
+< Cache-Control: private, max-age=0, must-revalidate, no-transform
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTE3MzIyNTc1NTM"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#tasks",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTE3MzIyNTc1NTM\"",
+< "items": [
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMTU3NTQzNjg5",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTgxNzc5ODY2Nw\"",
+< "title": "Task 3",
+< "updated": "2014-09-21T15:06:23.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMTU3NTQzNjg5",
+< "position": "00000000001234803096",
+< "status": "needsAction"
+< },
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxNDY3MTQwNDcw",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/NTY5MzIxODcx\"",
+< "title": "Task 2",
+< "updated": "2014-09-21T15:06:22.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxNDY3MTQwNDcw",
+< "position": "00000000001610612734",
+< "status": "needsAction"
+< },
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMzMyNDAxMTM2",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/MzE3NzgwODgx\"",
+< "title": "Task 1",
+< "updated": "2014-09-21T15:06:21.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMzMyNDAxMTM2",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+< ]
+< }
+
diff --git a/gdata/tests/traces/tasks/task-update b/gdata/tests/traces/tasks/task-update
new file mode 100644
index 0000000..a66b2e2
--- /dev/null
+++ b/gdata/tests/traces/tasks/task-update
@@ -0,0 +1,42 @@
+> PUT
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311989
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 16 (0xff2460), SoupSocket 10 (0x103a1a0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTExMzAyNDk3Njk"
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"New
Title!","id":"MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY","updated":"2014-09-21T15:06:28.000001+00:00","kind":"tasks#task","etag":"\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTExMzAyNDk3Njk\"","selfLink":"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY","position":"00000000002147483647","status":"needsAction","deleted":false,"hidden":false}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411311989
+< Soup-Debug: SoupMessage 16 (0xff2460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:29 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTIwNzYxNzMyMzM"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#task",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTIwNzYxNzMyMzM\"",
+< "title": "New Title!",
+< "updated": "2014-09-21T15:06:28.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY",
+< "position": "00000000002147483647",
+< "status": "needsAction"
+< }
+
diff --git a/gdata/tests/traces/tasks/tasklist-delete b/gdata/tests/traces/tasks/tasklist-delete
new file mode 100644
index 0000000..164b0de
--- /dev/null
+++ b/gdata/tests/traces/tasks/tasklist-delete
@@ -0,0 +1,23 @@
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTE0MDkwNzk5Njow HTTP/1.1
+> Soup-Debug-Timestamp: 1411306827
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 14 (0x1a99280), SoupSocket 8 (0x199fa70)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/C1YQlR3vXAgqp98al63Zwv69j00"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306828
+< Soup-Debug: SoupMessage 14 (0x1a99280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:28 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/tasklist-insert b/gdata/tests/traces/tasks/tasklist-insert
index 5298e25..9747f73 100644
--- a/gdata/tests/traces/tasks/tasklist-insert
+++ b/gdata/tests/traces/tasks/tasklist-insert
@@ -1,43 +1,39 @@
POST /tasks/v1/users/@me/lists HTTP/1.1
-> Soup-Debug-Timestamp: 1409440767
-> Soup-Debug: SoupSession 1 (0xe9c5d0), SoupMessage 1 (0x1033ac0), SoupSocket 1 (0x11dbdf0)
+> Soup-Debug-Timestamp: 1411306812
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 1 (0x1a99190), SoupSocket 1 (0x199fb40)
Host: www.googleapis.com
-> Authorization: OAuth
oauth_consumer_key="anonymous",oauth_token="1%2Fz2LxDQgU_zI5e8bSFsM5whzWKbIgQOOxp16jbVMaCRI",oauth_signature_method="HMAC-SHA1",oauth_signature="N%2BaoKaK8znejOXtPpSMCViVoo9U%3D",oauth_timestamp="1409440767",oauth_nonce="VsowDzIyUz0n4y7XqeWeo_HS5O5U",oauth_version="1.0"
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
GData-Version: 2
Content-Type: application/json
Accept-Encoding: gzip, deflate
-> User-Agent: libgdata/0.15.3 - gzip
+> User-Agent: libgdata/0.17.0 - gzip
Connection: Keep-Alive
{"title":"My list of things","kind":"tasks#taskList"}
-< HTTP/1.1 403 Forbidden
-< Soup-Debug-Timestamp: 1409440767
-< Soup-Debug: SoupMessage 1 (0x1033ac0)
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306814
+< Soup-Debug: SoupMessage 1 (0x1a99190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:14 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/HjwkZTFIW-wjpOLph_icBX6TaiM"
< Content-Type: application/json; charset=UTF-8
< Content-Encoding: gzip
-< Date: Sat, 30 Aug 2014 23:19:27 GMT
-< Expires: Sat, 30 Aug 2014 23:19:27 GMT
-< Cache-Control: private, max-age=0
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< Server: GSE
-< Alternate-Protocol: 443:quic
+< Alternate-Protocol: 443:quic,p=0.002
< Transfer-Encoding: chunked
<
< {
-< "error": {
-< "errors": [
-< {
-< "domain": "usageLimits",
-< "reason": "dailyLimitExceededUnreg",
-< "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.",
-< "extendedHelp": "https://code.google.com/apis/console"
-< }
-< ],
-< "code": 403,
-< "message": "Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup."
-< }
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTIyMTE2NDk0ODow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/HjwkZTFIW-wjpOLph_icBX6TaiM\"",
+< "title": "My list of things",
+< "updated": "2014-09-21T13:40:14.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTIyMTE2NDk0ODow"
< }
diff --git a/gdata/tests/traces/tasks/tasklist-insert-unauthorised
b/gdata/tests/traces/tasks/tasklist-insert-unauthorised
new file mode 100644
index 0000000..7bfd2a7
--- /dev/null
+++ b/gdata/tests/traces/tasks/tasklist-insert-unauthorised
@@ -0,0 +1,44 @@
+> POST /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411316511
+> Soup-Debug: SoupSession 1 (0xb5b4a0), SoupMessage 1 (0xda1190), SoupSocket 1 (0xdbcb40)
+> Host: www.googleapis.com
+> GData-Version: 2
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"My list of things","kind":"tasks#taskList"}
+
+< HTTP/1.1 401 Unauthorized
+< Soup-Debug-Timestamp: 1411316511
+< Soup-Debug: SoupMessage 1 (0xda1190)
+< WWW-Authenticate: Bearer realm="https://accounts.google.com/AuthSubRequest"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< Date: Sun, 21 Sep 2014 16:21:51 GMT
+< Expires: Sun, 21 Sep 2014 16:21:51 GMT
+< Cache-Control: private, max-age=0
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "error": {
+< "errors": [
+< {
+< "domain": "global",
+< "reason": "required",
+< "message": "Login Required",
+< "locationType": "header",
+< "location": "Authorization"
+< }
+< ],
+< "code": 401,
+< "message": "Login Required"
+< }
+< }
+
diff --git a/gdata/tests/traces/tasks/tasklist-list b/gdata/tests/traces/tasks/tasklist-list
new file mode 100644
index 0000000..07c971c
--- /dev/null
+++ b/gdata/tests/traces/tasks/tasklist-list
@@ -0,0 +1,61 @@
+> GET /tasks/v1/users/@me/lists HTTP/1.1
+> Soup-Debug-Timestamp: 1411306820
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 6 (0x1a99550), SoupSocket 4 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306820
+< Soup-Debug: SoupMessage 6 (0x1a99550)
+< Expires: Sun, 21 Sep 2014 13:40:20 GMT
+< Date: Sun, 21 Sep 2014 13:40:20 GMT
+< Cache-Control: private, max-age=0, must-revalidate, no-transform
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/90SjER9vi17HFYtnlu6S6TjNRaU"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskLists",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/90SjER9vi17HFYtnlu6S6TjNRaU\"",
+< "items": [
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MDow",
+< "title": "libgdata.test's list",
+< "updated": "2014-09-21T13:40:18.000Z",
+< "selfLink": "https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MDow"
+< },
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTM0OTQ3MzMyOjA",
+< "title": "Tasklist 1",
+< "updated": "2014-09-21T13:40:16.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTM0OTQ3MzMyOjA"
+< },
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6NzcyNzY3ODAxOjA",
+< "title": "Tasklist 2",
+< "updated": "2014-09-21T13:40:18.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NzcyNzY3ODAxOjA"
+< },
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTg1OTU0NTMxOTow",
+< "title": "Tasklist 2",
+< "updated": "2014-09-21T13:40:19.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTg1OTU0NTMxOTow"
+< }
+< ]
+< }
+
diff --git a/gdata/tests/traces/tasks/tasklist-update b/gdata/tests/traces/tasks/tasklist-update
new file mode 100644
index 0000000..bdff0c4
--- /dev/null
+++ b/gdata/tests/traces/tasks/tasklist-update
@@ -0,0 +1,40 @@
+> PUT /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow HTTP/1.1
+> Soup-Debug-Timestamp: 1411306823
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 11 (0x1a990a0), SoupSocket 7 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/5BOhEfC4ZnzLfX5N7niDqC5Hbiw"
+> Content-Type: application/json
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+>
+> {"title":"New
Title!","id":"MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow","updated":"2014-09-21T13:40:23.000001+00:00","kind":"tasks#taskList","etag":"\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/5BOhEfC4ZnzLfX5N7niDqC5Hbiw\"","selfLink":"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow"}
+
+< HTTP/1.1 200 OK
+< Soup-Debug-Timestamp: 1411306824
+< Soup-Debug: SoupMessage 11 (0x1a990a0)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:24 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/smzoungBBZODx_f27QgdqLglzOM"
+< Content-Type: application/json; charset=UTF-8
+< Content-Encoding: gzip
+< X-Content-Type-Options: nosniff
+< X-Frame-Options: SAMEORIGIN
+< X-XSS-Protection: 1; mode=block
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+< Transfer-Encoding: chunked
+<
+< {
+< "kind": "tasks#taskList",
+< "id": "MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow",
+< "etag": "\"Lck7VNWFJuXdzMtOmrYPx0KFV2s/smzoungBBZODx_f27QgdqLglzOM\"",
+< "title": "New Title!",
+< "updated": "2014-09-21T13:40:23.000Z",
+< "selfLink":
"https://www.googleapis.com/tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow"
+< }
+
diff --git a/gdata/tests/traces/tasks/teardown-delete-task b/gdata/tests/traces/tasks/teardown-delete-task
new file mode 100644
index 0000000..1d89155
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-delete-task
@@ -0,0 +1,23 @@
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTYwNzA5MTc3OjA HTTP/1.1
+> Soup-Debug-Timestamp: 1411311994
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 22 (0xff2190), SoupSocket 11 (0x103a340)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/P0-yzIfqEp8hfY8XeaG0NpnVdEY"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311994
+< Soup-Debug: SoupMessage 22 (0xff2190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:34 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-insert-task b/gdata/tests/traces/tasks/teardown-insert-task
new file mode 100644
index 0000000..3d45234
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-insert-task
@@ -0,0 +1,46 @@
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MTgxODA5NjI4Mg
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311978
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 3 (0xff2370), SoupSocket 2 (0x103a5b0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTUyODk4MTc1Mg"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311979
+< Soup-Debug: SoupMessage 3 (0xff2370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:19 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NDA1MjA2NTQ6MA HTTP/1.1
+> Soup-Debug-Timestamp: 1411311979
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 4 (0xff2460), SoupSocket 1 (0x103a340)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/_OP1nZig6T24458ddfbOXnBLhjE"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311980
+< Soup-Debug: SoupMessage 4 (0xff2460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:20 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-insert-tasklist
b/gdata/tests/traces/tasks/teardown-insert-tasklist
new file mode 100644
index 0000000..bb6d264
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-insert-tasklist
@@ -0,0 +1,23 @@
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTIyMTE2NDk0ODow HTTP/1.1
+> Soup-Debug-Timestamp: 1411306814
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 2 (0x1a99280), SoupSocket 1 (0x199fb40)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/HjwkZTFIW-wjpOLph_icBX6TaiM"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306814
+< Soup-Debug: SoupMessage 2 (0x1a99280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:14 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-list-task b/gdata/tests/traces/tasks/teardown-list-task
new file mode 100644
index 0000000..bfe73d0
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-list-task
@@ -0,0 +1,92 @@
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMzMyNDAxMTM2
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311983
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 10 (0xff2190), SoupSocket 6 (0x103a410)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/MzE3NzgwODgx"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311984
+< Soup-Debug: SoupMessage 10 (0xff2190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:24 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxNDY3MTQwNDcw
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311984
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 11 (0xff20a0), SoupSocket 5 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/NTY5MzIxODcx"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311985
+< Soup-Debug: SoupMessage 11 (0xff20a0)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:25 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1MzoxMTU3NTQzNjg5
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311985
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 12 (0xff20a0), SoupSocket 7 (0x103a5b0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTgxNzc5ODY2Nw"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311985
+< Soup-Debug: SoupMessage 12 (0xff20a0)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:25 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MjA0NDQ5MjU1Mzow HTTP/1.1
+> Soup-Debug-Timestamp: 1411311985
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 13 (0xff2190), SoupSocket 8 (0x103a5b0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/PbVEEtyPldOicyVC8KpBcIrP3co"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311986
+< Soup-Debug: SoupMessage 13 (0xff2190)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:26 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-list-tasklist b/gdata/tests/traces/tasks/teardown-list-tasklist
new file mode 100644
index 0000000..f6c0a73
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-list-tasklist
@@ -0,0 +1,69 @@
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTM0OTQ3MzMyOjA HTTP/1.1
+> Soup-Debug-Timestamp: 1411306820
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 7 (0x1a99460), SoupSocket 4 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/mcdH7OfYcOU1vkq49QoOeZ4viZ0"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306821
+< Soup-Debug: SoupMessage 7 (0x1a99460)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:21 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6NzcyNzY3ODAxOjA HTTP/1.1
+> Soup-Debug-Timestamp: 1411306821
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 8 (0x1a99370), SoupSocket 5 (0x199fa70)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/1JlVECn_cMPg1pMhl7jB4_Mvo5k"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306821
+< Soup-Debug: SoupMessage 8 (0x1a99370)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:21 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTg1OTU0NTMxOTow HTTP/1.1
+> Soup-Debug-Timestamp: 1411306821
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 9 (0x1a99280), SoupSocket 6 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/gP8XnbCGmgmZCm0q7Wmqsl8zt74"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306822
+< Soup-Debug: SoupMessage 9 (0x1a99280)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:22 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-update-task b/gdata/tests/traces/tasks/teardown-update-task
new file mode 100644
index 0000000..5d4acb2
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-update-task
@@ -0,0 +1,46 @@
+> DELETE
/tasks/v1/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA/tasks/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjEyMjI3NTU4ODY
HTTP/1.1
+> Soup-Debug-Timestamp: 1411311989
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 17 (0xff2550), SoupSocket 10 (0x103a1a0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/LTIwNzYxNzMyMzM"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311990
+< Soup-Debug: SoupMessage 17 (0xff2550)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:30 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6OTk4ODExMTI4OjA HTTP/1.1
+> Soup-Debug-Timestamp: 1411311990
+> Soup-Debug: SoupSession 1 (0xcfb240), SoupMessage 18 (0xff2550), SoupSocket 9 (0x103a4e0)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBmb1VipGbRU4lS3f_ArcJ5AOMHpxH7USM_aSAwW9eA2csUF3cAbLzU
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/L6nOdn_S4OwYUP7IdjSGd7fk9Po"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411311990
+< Soup-Debug: SoupMessage 18 (0xff2550)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 15:06:30 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
diff --git a/gdata/tests/traces/tasks/teardown-update-tasklist
b/gdata/tests/traces/tasks/teardown-update-tasklist
new file mode 100644
index 0000000..a7df968
--- /dev/null
+++ b/gdata/tests/traces/tasks/teardown-update-tasklist
@@ -0,0 +1,23 @@
+> DELETE /tasks/v1/users/@me/lists/MTY4ODYzMjk0OTkzNDgxODY2Njk6MTI4MDgwMTc3Nzow HTTP/1.1
+> Soup-Debug-Timestamp: 1411306824
+> Soup-Debug: SoupSession 1 (0x17da240), SoupMessage 12 (0x1a990a0), SoupSocket 7 (0x199fc10)
+> Host: www.googleapis.com
+> Authorization: Bearer ya29.hwBNWh8HN9uE1GavhuMocWgGo8JMHW75_WeLz4IIH2wNrn0Vmb1onGuz
+> GData-Version: 2
+> If-Match: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/smzoungBBZODx_f27QgdqLglzOM"
+> Accept-Encoding: gzip, deflate
+> User-Agent: libgdata/0.17.0 - gzip
+> Connection: Keep-Alive
+
+< HTTP/1.1 204 No Content
+< Soup-Debug-Timestamp: 1411306825
+< Soup-Debug: SoupMessage 12 (0x1a990a0)
+< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
+< Pragma: no-cache
+< Expires: Fri, 01 Jan 1990 00:00:00 GMT
+< Date: Sun, 21 Sep 2014 13:40:25 GMT
+< ETag: "Lck7VNWFJuXdzMtOmrYPx0KFV2s/vyGp6PvFo4RvsFtPoIWeCReyIC8"
+< Server: GSE
+< Alternate-Protocol: 443:quic,p=0.002
+<
+
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]