]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-index: Add unit test for log rotation during commit
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Mon, 27 Jan 2020 10:35:10 +0000 (12:35 +0200)
committeraki.tuomi <aki.tuomi@open-xchange.com>
Fri, 31 Jan 2020 12:36:10 +0000 (12:36 +0000)
src/lib-index/Makefile.am
src/lib-index/test-mail-index.c [new file with mode: 0644]

index e7856e602be127d64b494e76cd896a45214c1da8..40fefb5b2f6fc2770ffa973d64de186b919055b4 100644 (file)
@@ -61,6 +61,7 @@ headers = \
         mailbox-log.h
 
 test_programs = \
+       test-mail-index \
        test-mail-index-map \
        test-mail-index-modseq \
        test-mail-index-sync-ext \
@@ -79,6 +80,10 @@ test_libs = \
 
 test_deps = $(noinst_LTLIBRARIES) $(test_libs)
 
+test_mail_index_SOURCES = test-mail-index.c
+test_mail_index_LDADD = $(noinst_LTLIBRARIES) $(test_libs)
+test_mail_index_DEPENDENCIES = $(test_deps)
+
 test_mail_index_map_SOURCES = test-mail-index-map.c
 test_mail_index_map_LDADD = $(noinst_LTLIBRARIES) $(test_libs)
 test_mail_index_map_DEPENDENCIES = $(test_deps)
diff --git a/src/lib-index/test-mail-index.c b/src/lib-index/test-mail-index.c
new file mode 100644 (file)
index 0000000..c18f42b
--- /dev/null
@@ -0,0 +1,42 @@
+/* Copyright (c) 2019 Dovecot authors, see the included COPYING file */
+
+#include "lib.h"
+#include "array.h"
+#include "test-common.h"
+#include "test-mail-index.h"
+#include "mail-transaction-log-private.h"
+
+static void test_mail_index_rotate(void)
+{
+       struct mail_index *index;
+       struct mail_index_view *view;
+       struct mail_index_transaction *trans;
+
+       test_begin("mail index rotate");
+       index = test_mail_index_init();
+       view = mail_index_view_open(index);
+
+       /* First rotation of the index. The view will point to the old index. */
+       trans = mail_index_transaction_begin(view, 0);
+       mail_index_reset(trans);
+       test_assert(mail_index_transaction_commit(&trans) == 0);
+
+       /* Second rotation of the index. The log head doesn't have any extra
+          references. */
+       trans = mail_index_transaction_begin(view, 0);
+       mail_index_reset(trans);
+       test_assert(mail_index_transaction_commit(&trans) == 0);
+
+       mail_index_view_close(&view);
+       test_mail_index_deinit(&index);
+       test_end();
+}
+
+int main(void)
+{
+       static void (*const test_functions[])(void) = {
+               test_mail_index_rotate,
+               NULL
+       };
+       return test_run(test_functions);
+}