aboutsummaryrefslogtreecommitdiffstats
path: root/camel/tests/folder/test2.c
diff options
context:
space:
mode:
authorNot Zed <NotZed@HelixCode.com>2000-11-28 21:13:23 +0800
committerMichael Zucci <zucchi@src.gnome.org>2000-11-28 21:13:23 +0800
commit3998a03ae925f47cd1ffcf31fca0a4701f8c75da (patch)
tree2e4abfb292e1e76da06af4ce5676fd7ae79d2c75 /camel/tests/folder/test2.c
parentf306b8b912a19e1a0321af66a29faf23664f2077 (diff)
downloadgsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar.gz
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar.bz2
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar.lz
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar.xz
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.tar.zst
gsoc2013-evolution-3998a03ae925f47cd1ffcf31fca0a4701f8c75da.zip
Set the info size's properly, oops!
2000-11-28 Not Zed <NotZed@HelixCode.com> * 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 <NotZed@HelixCode.com> * 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
Diffstat (limited to 'camel/tests/folder/test2.c')
-rw-r--r--camel/tests/folder/test2.c241
1 files changed, 241 insertions, 0 deletions
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 <camel/camel-exception.h>
+#include <camel/camel-service.h>
+#include <camel/camel-session.h>
+#include <camel/camel-store.h>
+
+#include <camel/camel-folder.h>
+#include <camel/camel-folder-summary.h>
+#include <camel/camel-mime-message.h>
+
+/* 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;i<ARRAY_LEN(stores);i++) {
+ char *name = stores[i];
+ for (indexed = 0;indexed<2;indexed++) {
+ char *what = g_strdup_printf("folder ops: %s (%sindexed)", name, indexed?"":"non-");
+ int flags;
+
+ camel_test_start(what);
+ test_free(what);
+
+ push("getting store");
+ store = camel_session_get_store(session, stores[i], ex);
+ check_msg(!camel_exception_is_set(ex), "getting store: %s", camel_exception_get_description(ex));
+ check(store != NULL);
+ pull();
+
+ push("creating %sindexed folder", indexed?"":"non-");
+ if (indexed)
+ flags = CAMEL_STORE_FOLDER_CREATE|CAMEL_STORE_FOLDER_BODY_INDEX;
+ else
+ flags = CAMEL_STORE_FOLDER_CREATE;
+ 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 empty/can't get nonexistant stuff */
+ test_folder_counts(folder, 0, 0);
+ test_folder_not_message(folder, "0");
+ test_folder_not_message(folder, "");
+
+ for (j=0;j<10;j++) {
+ char *content, *subject;
+
+ push("creating test message");
+ msg = test_message_create_simple();
+ content = g_strdup_printf("Test message %d contents\n\n", j);
+ test_message_set_content_simple((CamelMimePart *)msg, 0, "text/plain",
+ content, strlen(content));
+ test_free(content);
+ subject = g_strdup_printf("Test message %d", j);
+ camel_mime_message_set_subject(msg, subject);
+ pull();
+
+ push("appending simple message %d", j);
+ camel_folder_append_message(folder, msg, NULL, ex);
+ check_msg(!camel_exception_is_set(ex), "%s", camel_exception_get_description(ex));
+ test_folder_counts(folder, j+1, j+1);
+
+ push("checking it is in the right uid slot & exists");
+ uids = camel_folder_get_uids(folder);
+ check(uids != NULL);
+ check(uids->len == 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;
+}