[libgdata] tests: Add networked tests for the Google Tasks service



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]