[libgdata] documents: Make the document upload tests individually idempotent
- From: Philip Withnall <pwithnall src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgdata] documents: Make the document upload tests individually idempotent
- Date: Sun, 3 Jul 2011 12:08:09 +0000 (UTC)
commit 90719b6d0492f41d90a00aa815aefec6b340257c
Author: Philip Withnall <philip tecnocode co uk>
Date: Sun Jul 3 09:21:28 2011 +0100
documents: Make the document upload tests individually idempotent
Helps: bgo#633359
gdata/tests/documents.c | 161 +++++++++++++++++++++++++++++++----------------
1 files changed, 106 insertions(+), 55 deletions(-)
---
diff --git a/gdata/tests/documents.c b/gdata/tests/documents.c
index 9692eb3..458d91c 100644
--- a/gdata/tests/documents.c
+++ b/gdata/tests/documents.c
@@ -256,44 +256,115 @@ test_query_all_documents_async_progress_closure (gconstpointer service)
g_slice_free (GDataAsyncProgressClosure, data);
}
+typedef struct {
+ GDataDocumentsFolder *folder;
+ GDataDocumentsDocument *new_document;
+} UploadDocumentData;
+
static void
-test_upload_metadata (gconstpointer service)
+set_up_upload_document (UploadDocumentData *data, gconstpointer service)
{
- GDataDocumentsEntry *document, *new_document;
- GError *error = NULL;
+ data->folder = NULL;
+ data->new_document = NULL;
+}
+
+static void
+set_up_upload_document_with_folder (UploadDocumentData *data, gconstpointer service)
+{
+ GDataDocumentsFolder *folder;
gchar *upload_uri;
- g_assert (service != NULL);
+ /* Set up the structure */
+ set_up_upload_document (data, service);
+
+ /* Create a folder */
+ folder = gdata_documents_folder_new (NULL);
+ gdata_entry_set_title (GDATA_ENTRY (folder), "Temporary Folder for Uploading Documents");
+
+ /* Insert the folder */
+ upload_uri = gdata_documents_service_get_upload_uri (NULL);
+ data->folder = GDATA_DOCUMENTS_FOLDER (gdata_service_insert_entry (GDATA_SERVICE (service),
+ gdata_documents_service_get_primary_authorization_domain (),
+ upload_uri, GDATA_ENTRY (folder), NULL, NULL));
+ g_assert (GDATA_IS_DOCUMENTS_FOLDER (data->folder));
+ g_free (upload_uri);
+ g_object_unref (folder);
+}
+
+static void
+tear_down_upload_document (UploadDocumentData *data, gconstpointer service)
+{
+ /* Delete the new file */
+ if (data->new_document != NULL) {
+ GDataEntry *new_document;
+
+ /* HACK: Query for the new document, as Google's servers appear to modify it behind our back if we don't upload both metadata and data
+ * when creating the document: http://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=2337. We have to wait a few
+ * seconds before trying this to allow the various Google servers to catch up with each other. */
+ g_usleep (5 * G_USEC_PER_SEC);
+ new_document = GDATA_ENTRY (gdata_service_query_single_entry (GDATA_SERVICE (service),
+ gdata_documents_service_get_primary_authorization_domain (),
+ gdata_entry_get_id (GDATA_ENTRY (data->new_document)), NULL,
+ G_OBJECT_TYPE (data->new_document), NULL, NULL));
+ g_assert (GDATA_IS_DOCUMENTS_DOCUMENT (new_document));
+ g_object_unref (data->new_document);
+
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_documents_service_get_primary_authorization_domain (),
+ new_document, NULL, NULL) == TRUE);
+ g_object_unref (new_document);
+ }
+
+ /* Delete the folder */
+ if (data->folder != NULL) {
+ GDataEntry *new_folder;
+
+ /* Re-query for the folder because its ETag will have changed as a result of adding/removing documents to it */
+ new_folder = GDATA_ENTRY (gdata_service_query_single_entry (GDATA_SERVICE (service),
+ gdata_documents_service_get_primary_authorization_domain (),
+ gdata_entry_get_id (GDATA_ENTRY (data->folder)), NULL,
+ GDATA_TYPE_DOCUMENTS_FOLDER, NULL, NULL));
+ g_assert (GDATA_IS_DOCUMENTS_FOLDER (new_folder));
+ g_object_unref (data->folder);
+
+ g_assert (gdata_service_delete_entry (GDATA_SERVICE (service), gdata_documents_service_get_primary_authorization_domain (),
+ new_folder, NULL, NULL) == TRUE);
+ g_object_unref (new_folder);
+ }
+}
+
+static void
+test_upload_metadata (UploadDocumentData *data, gconstpointer service)
+{
+ GDataDocumentsEntry *document;
+ GError *error = NULL;
+ gchar *upload_uri;
document = GDATA_DOCUMENTS_ENTRY (gdata_documents_spreadsheet_new (NULL));
gdata_entry_set_title (GDATA_ENTRY (document), "myNewSpreadsheet");
/* Insert the document */
upload_uri = gdata_documents_service_get_upload_uri (NULL);
- new_document = GDATA_DOCUMENTS_ENTRY (gdata_service_insert_entry (GDATA_SERVICE (service),
- gdata_documents_service_get_primary_authorization_domain (),
- upload_uri, GDATA_ENTRY (document), NULL, &error));
+ data->new_document = GDATA_DOCUMENTS_DOCUMENT (gdata_service_insert_entry (GDATA_SERVICE (service),
+ gdata_documents_service_get_primary_authorization_domain (),
+ upload_uri, GDATA_ENTRY (document), NULL, &error));
g_free (upload_uri);
g_assert_no_error (error);
- g_assert (GDATA_IS_DOCUMENTS_SPREADSHEET (new_document));
+ g_assert (GDATA_IS_DOCUMENTS_SPREADSHEET (data->new_document));
g_clear_error (&error);
g_object_unref (document);
- g_object_unref (new_document);
}
static void
-test_upload_metadata_file (gconstpointer service)
+test_upload_metadata_file (UploadDocumentData *data, gconstpointer service)
{
- GDataDocumentsDocument *document, *new_document;
+ GDataDocumentsDocument *document;
GFile *document_file;
GFileInfo *file_info;
GDataUploadStream *upload_stream;
GFileInputStream *file_stream;
GError *error = NULL;
- g_assert (service != NULL);
-
document_file = g_file_new_for_path (TEST_FILE_DIR "test.odt");
file_info = g_file_query_info (document_file, G_FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME "," G_FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE,
G_FILE_QUERY_INFO_NONE, NULL, &error);
@@ -320,25 +391,23 @@ test_upload_metadata_file (gconstpointer service)
g_assert_no_error (error);
/* Finish the upload */
- new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
+ data->new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
g_assert_no_error (error);
- g_assert (GDATA_IS_DOCUMENTS_TEXT (new_document));
+ g_assert (GDATA_IS_DOCUMENTS_TEXT (data->new_document));
/* Verify the uploaded document is the same as the original */
- g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (document)), ==, gdata_entry_get_title (GDATA_ENTRY (new_document)));
+ g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (document)), ==, gdata_entry_get_title (GDATA_ENTRY (data->new_document)));
g_clear_error (&error);
g_object_unref (upload_stream);
g_object_unref (file_stream);
g_object_unref (document_file);
g_object_unref (document);
- g_object_unref (new_document);
}
static void
-test_upload_file_get_entry (gconstpointer service)
+test_upload_file_get_entry (UploadDocumentData *data, gconstpointer service)
{
- GDataDocumentsDocument *new_document;
GDataEntry *new_presentation;
GDataUploadStream *upload_stream;
GFileInputStream *file_stream;
@@ -373,16 +442,16 @@ test_upload_file_get_entry (gconstpointer service)
g_assert_no_error (error);
/* Finish the upload */
- new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
+ data->new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
g_assert_no_error (error);
- g_assert (GDATA_IS_DOCUMENTS_PRESENTATION (new_document));
+ g_assert (GDATA_IS_DOCUMENTS_PRESENTATION (data->new_document));
g_object_unref (file_stream);
g_object_unref (upload_stream);
/* Get the entry on the server */
new_presentation = gdata_service_query_single_entry (GDATA_SERVICE (service), gdata_documents_service_get_primary_authorization_domain (),
- gdata_entry_get_id (GDATA_ENTRY (new_document)), NULL,
+ gdata_entry_get_id (GDATA_ENTRY (data->new_document)), NULL,
GDATA_TYPE_DOCUMENTS_PRESENTATION, NULL, &error);
g_assert_no_error (error);
g_assert (GDATA_IS_DOCUMENTS_PRESENTATION (new_presentation));
@@ -391,7 +460,6 @@ test_upload_file_get_entry (gconstpointer service)
g_assert_cmpstr (gdata_entry_get_title (new_presentation), ==, "test");
g_clear_error (&error);
- g_object_unref (new_document);
g_object_unref (new_presentation);
}
@@ -720,34 +788,15 @@ test_folders_remove_from_folder_cancellation (FoldersAsyncData *data, gconstpoin
}
static void
-test_upload_file_metadata_in_new_folder (gconstpointer service)
+test_upload_file_metadata_in_new_folder (UploadDocumentData *data, gconstpointer service)
{
- GDataDocumentsDocument *document, *new_document;
- GDataDocumentsFolder *folder, *new_folder;
+ GDataDocumentsDocument *document;
GDataUploadStream *upload_stream;
GFileInputStream *file_stream;
GFile *document_file;
GFileInfo *file_info;
- gchar *upload_uri;
GError *error = NULL;
- g_assert (service != NULL);
-
- folder = gdata_documents_folder_new (NULL);
- gdata_entry_set_title (GDATA_ENTRY (folder), "upload_file_metadata_in_new_folder_folder");
-
- /* Insert the folder */
- upload_uri = gdata_documents_service_get_upload_uri (NULL);
- new_folder = GDATA_DOCUMENTS_FOLDER (gdata_service_insert_entry (GDATA_SERVICE (service),
- gdata_documents_service_get_primary_authorization_domain (),
- upload_uri, GDATA_ENTRY (folder), NULL, &error));
- g_free (upload_uri);
-
- g_assert_no_error (error);
- g_assert (GDATA_IS_DOCUMENTS_FOLDER (new_folder));
-
- g_object_unref (folder);
-
/* Prepare the file */
document_file = g_file_new_for_path (TEST_FILE_DIR "test.odt");
document = GDATA_DOCUMENTS_DOCUMENT (gdata_documents_text_new (NULL));
@@ -759,7 +808,7 @@ test_upload_file_metadata_in_new_folder (gconstpointer service)
/* Prepare the upload stream */
upload_stream = gdata_documents_service_upload_document (GDATA_DOCUMENTS_SERVICE (service), document, g_file_info_get_display_name (file_info),
- g_file_info_get_content_type (file_info), new_folder, NULL, &error);
+ g_file_info_get_content_type (file_info), data->folder, NULL, &error);
g_assert_no_error (error);
g_assert (GDATA_IS_UPLOAD_STREAM (upload_stream));
@@ -777,21 +826,19 @@ test_upload_file_metadata_in_new_folder (gconstpointer service)
g_assert_no_error (error);
/* Finish the upload */
- new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
+ data->new_document = gdata_documents_service_finish_upload (GDATA_DOCUMENTS_SERVICE (service), upload_stream, &error);
g_assert_no_error (error);
- g_assert (GDATA_IS_DOCUMENTS_TEXT (new_document));
+ g_assert (GDATA_IS_DOCUMENTS_TEXT (data->new_document));
g_object_unref (upload_stream);
g_object_unref (file_stream);
/* Check for success */
- g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (new_document)), ==, gdata_entry_get_title (GDATA_ENTRY (document)));
- g_assert (check_document_is_in_folder (new_document, new_folder) == TRUE);
+ g_assert_cmpstr (gdata_entry_get_title (GDATA_ENTRY (data->new_document)), ==, gdata_entry_get_title (GDATA_ENTRY (document)));
+ g_assert (check_document_is_in_folder (data->new_document, data->folder) == TRUE);
g_clear_error (&error);
g_object_unref (document);
- g_object_unref (new_document);
- g_object_unref (new_folder);
}
static void
@@ -1474,10 +1521,14 @@ main (int argc, char *argv[])
g_test_add_data_func ("/documents/remove/all", service, test_remove_all_documents_and_folders);
- g_test_add_data_func ("/documents/upload/only_file_get_entry", service, test_upload_file_get_entry);
- g_test_add_data_func ("/documents/upload/metadata_file", service, test_upload_metadata_file);
- g_test_add_data_func ("/documents/upload/only_metadata", service, test_upload_metadata);
- g_test_add_data_func ("/documents/upload/metadata_file_in_new_folder", service, test_upload_file_metadata_in_new_folder);
+ g_test_add ("/documents/upload/only_file_get_entry", UploadDocumentData, service, set_up_upload_document, test_upload_file_get_entry,
+ tear_down_upload_document);
+ g_test_add ("/documents/upload/metadata_file", UploadDocumentData, service, set_up_upload_document, test_upload_metadata_file,
+ tear_down_upload_document);
+ g_test_add ("/documents/upload/only_metadata", UploadDocumentData, service, set_up_upload_document, test_upload_metadata,
+ tear_down_upload_document);
+ g_test_add ("/documents/upload/metadata_file_in_new_folder", UploadDocumentData, service, set_up_upload_document_with_folder,
+ test_upload_file_metadata_in_new_folder, tear_down_upload_document);
g_test_add_data_func ("/documents/download/download_all_documents", service, test_download_all_documents);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]