From 3998a03ae925f47cd1ffcf31fca0a4701f8c75da Mon Sep 17 00:00:00 2001 From: Not Zed Date: Tue, 28 Nov 2000 13:13:23 +0000 Subject: Set the info size's properly, oops! 2000-11-28 Not Zed * providers/local/camel-maildir-summary.c (camel_maildir_summary_init): Set the info size's properly, oops! * tests/lib/folders.[ch]: Folder testing helpers. * tests/folder/test2.c: Test basic message ops on folders. * tests/folder/test1.c (main): Test basic folder ops on (local) stores. * providers/local/camel-local-provider.c (camel_provider_module_init): Removed some debug. * providers/local/camel-maildir-folder.c (camel_maildir_folder_class_init): fix parent class. * providers/local/camel-mh-folder.c (camel_mh_folder_class_init): Fix parent class (damn cut & paste). * providers/local/camel-maildir-store.c (get_folder): Call parent impl. (camel_maildir_store_class_init): Fix parent class setup. (delete_folder): Check the folder exists before trying to delete it. (delete_folder): Try and make the delete operation atomic/rollback failures. e.g. if one directory isn't empty, then create the other empty ones back. Also clear the tmp directory fully first. * providers/local/camel-mbox-store.c (get_folder): Call parent impl. (camel_mbox_store_class_init): parent class is camel_local_store, not camel_folder, oops. (delete_folder): Return an error if it doesn't exist, rather than covering it up. * providers/local/camel-mh-store.c (get_folder): Call parent impl. (camel_mh_store_class_init): fix parent class setup. (delete_folder): Error if it doesn't exist now. * camel-folder.c (camel_folder_move_message_to): (camel_folder_copy_message_to): Added warnings as these functions are going to be removed later. * camel-store.c (camel_store_get_root_folder): Fix for an early api change. We want CAMEL_STORE_FOLDER_CREATE, not TRUE, since its a flag. (camel_store_get_default_folder): And here too. * providers/local/camel-local-store.c (xrename): Handle renaming folders differently to renaming files. (get_default_folder_name): local stores dont have a default folder, so make it so. Or at least, it doesn't seem to make sense to have one. (get_root_folder_name): Same for root. (get_folder): Added parent implementation, that makes sure the service path exists, if we are creating a new folder (but doesn't create the folder). 2000-11-27 Not Zed * providers/local/camel-local-store.c (xrename): Fixed races. Use link/unlink, rather than rename, to properly detect overwriting another file. And allow some files to be missing. * providers/Makefile.am: Removed mh, mbox, added local, to the default. svn path=/trunk/; revision=6693 --- camel/tests/folder/test2.c | 241 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 camel/tests/folder/test2.c (limited to 'camel/tests/folder/test2.c') diff --git a/camel/tests/folder/test2.c b/camel/tests/folder/test2.c new file mode 100644 index 0000000000..c7a1af2c33 --- /dev/null +++ b/camel/tests/folder/test2.c @@ -0,0 +1,241 @@ +/* folder testing */ + +#include "camel-test.h" +#include "messages.h" +#include "folders.h" + +#include +#include +#include +#include + +#include +#include +#include + +/* god, who designed this horrid interface */ +static char *auth_callback(CamelAuthCallbackMode mode, + char *data, gboolean secret, + CamelService *service, char *item, + CamelException *ex) +{ + return NULL; +} + + +#define ARRAY_LEN(x) (sizeof(x)/sizeof(x[0])) + +static char *stores[] = { + "mbox:///tmp/camel-test/mbox", + "mh:///tmp/camel-test/mh", + "maildir:///tmp/camel-test/maildir" +}; + +int main(int argc, char **argv) +{ + CamelSession *session; + CamelStore *store; + CamelException *ex; + CamelFolder *folder; + CamelMimeMessage *msg; + int i, j; + int indexed; + GPtrArray *uids; + const CamelMessageInfo *info; + + ex = camel_exception_new(); + + camel_test_init(argc, argv); + + session = camel_session_new("/tmp/camel-test", auth_callback, NULL, NULL); + + /* todo: cross-check everything with folder_info checks as well */ + /* todo: work out how to do imap/pop/nntp tests */ + + /* we iterate over all stores we want to test, with indexing or indexing turned on or off */ + for (i=0;ilen == j+1); + test_folder_message(folder, uids->pdata[j]); + pull(); + + push("checking it is the right message (subject): %s", subject); + info = camel_folder_get_message_info(folder, uids->pdata[j]); + check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject); + camel_folder_free_uids(folder, uids); + pull(); + + test_free(subject); + + check_unref(msg, 1); + pull(); + } + + check_unref(folder, 1); + pull(); + + push("deleting test folder, with messages in it"); + camel_store_delete_folder(store, "testbox", ex); + check(camel_exception_is_set(ex)); + camel_exception_clear(ex); + pull(); + + push("re-opening folder"); + folder = camel_store_get_folder(store, "testbox", flags, ex); + check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex)); + check(folder != NULL); + + /* verify counts */ + test_folder_counts(folder, 10, 10); + + /* re-check uid's, after a reload */ + uids = camel_folder_get_uids(folder); + check(uids != NULL); + check(uids->len == 10); + for (j=0;j<10;j++) { + char *subject = g_strdup_printf("Test message %d", j); + + push("verify reload of %s", subject); + test_folder_message(folder, uids->pdata[j]); + + info = camel_folder_get_message_info(folder, uids->pdata[j]); + check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject); + test_free(subject); + pull(); + } + + push("deleting first message & expunging"); + camel_folder_delete_message(folder, uids->pdata[0]); + test_folder_counts(folder, 10, 10); + camel_folder_expunge(folder, ex); + check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex)); + test_folder_not_message(folder, uids->pdata[0]); + test_folder_counts(folder, 9, 9); + + camel_folder_free_uids(folder, uids); + + uids = camel_folder_get_uids(folder); + check(uids != NULL); + check(uids->len == 9); + for (j=0;j<9;j++) { + char *subject = g_strdup_printf("Test message %d", j+1); + + push("verify after expunge of %s", subject); + test_folder_message(folder, uids->pdata[j]); + + info = camel_folder_get_message_info(folder, uids->pdata[j]); + check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject); + test_free(subject); + pull(); + } + pull(); + + push("deleting last message & expunging"); + camel_folder_delete_message(folder, uids->pdata[8]); + /* sync? */ + test_folder_counts(folder, 9, 9); + camel_folder_expunge(folder, ex); + check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex)); + test_folder_not_message(folder, uids->pdata[8]); + test_folder_counts(folder, 8, 8); + + camel_folder_free_uids(folder, uids); + + uids = camel_folder_get_uids(folder); + check(uids != NULL); + check(uids->len == 8); + for (j=0;j<8;j++) { + char *subject = g_strdup_printf("Test message %d", j+1); + + push("verify after expunge of %s", subject); + test_folder_message(folder, uids->pdata[j]); + + info = camel_folder_get_message_info(folder, uids->pdata[j]); + check_msg(strcmp(info->subject, subject)==0, "info->subject %s", info->subject); + test_free(subject); + pull(); + } + pull(); + + push("deleting all messages & expunging"); + for (j=0;j<8;j++) { + camel_folder_delete_message(folder, uids->pdata[j]); + } + /* sync? */ + test_folder_counts(folder, 8, 8); + camel_folder_expunge(folder, ex); + check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex)); + for (j=0;j<8;j++) { + test_folder_not_message(folder, uids->pdata[j]); + } + test_folder_counts(folder, 0, 0); + + camel_folder_free_uids(folder, uids); + pull(); + + camel_object_unref((CamelObject *)folder); + pull(); /* re-opening folder */ + + push("deleting test folder, with no messages in it"); + camel_store_delete_folder(store, "testbox", ex); + check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex)); + pull(); + + camel_object_unref((CamelObject *)store); + camel_test_end(); + } + } + + camel_object_unref((CamelObject *)session); + camel_exception_free(ex); + + return 0; +} -- cgit v1.2.3