From: Timo Sirainen Date: Wed, 27 May 2009 00:43:01 +0000 (-0400) Subject: mail-transaction-log-view unit testing is now also independent. X-Git-Tag: 2.0.alpha1~655 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=4f31ec91b85063c74c0f3129f173b0b45d3329dd;p=thirdparty%2Fdovecot%2Fcore.git mail-transaction-log-view unit testing is now also independent. --HG-- branch : HEAD --- diff --git a/src/lib-index/Makefile.am b/src/lib-index/Makefile.am index 42ae0fe817..3225dbe3cf 100644 --- a/src/lib-index/Makefile.am +++ b/src/lib-index/Makefile.am @@ -59,32 +59,23 @@ headers = \ mailbox-list-index-private.h test_programs = \ - test-index \ - test-mail-transaction-log-append + test-mail-transaction-log-append \ + test-mail-transaction-log-view noinst_PROGRAMS = $(test_programs) test_libs = \ - libindex.la \ + mail-index-util.o \ ../lib-test/libtest.la \ - ../lib-imap/libimap.la \ - ../lib-mail/libmail.la \ - ../lib-charset/libcharset.la \ ../lib/liblib.la -test_index_SOURCES = \ - test-index.c \ - test-transaction-log-view.c - -test_headers = \ - test-index.h - -test_index_LDADD = $(test_libs) $(LIBICONV) -test_index_DEPENDENCIES = $(test_libs) - test_mail_transaction_log_append_SOURCES = test-mail-transaction-log-append.c -test_mail_transaction_log_append_LDADD = mail-transaction-log-append.lo mail-index-util.lo ../lib-test/libtest.la ../lib/liblib.la -test_mail_transaction_log_append_DEPENDENCIES = mail-transaction-log-append.lo mail-index-util.lo ../lib-test/libtest.la ../lib/liblib.la +test_mail_transaction_log_append_LDADD = mail-transaction-log-append.o $(test_libs) +test_mail_transaction_log_append_DEPENDENCIES = mail-transaction-log-append.o $(test_libs) + +test_mail_transaction_log_view_SOURCES = test-mail-transaction-log-view.c +test_mail_transaction_log_view_LDADD = mail-transaction-log-view.o $(test_libs) +test_mail_transaction_log_view_DEPENDENCIES = mail-transaction-log-view.o $(test_libs) check: check-am check-test check-test: $(test_programs) @@ -94,7 +85,7 @@ check-test: $(test_programs) if INSTALL_HEADERS pkginc_libdir=$(pkgincludedir) - pkginc_lib_HEADERS = $(headers) $(test_headers) + pkginc_lib_HEADERS = $(headers) else - noinst_HEADERS = $(headers) $(test_headers) + noinst_HEADERS = $(headers) endif diff --git a/src/lib-index/test-index.c b/src/lib-index/test-index.c deleted file mode 100644 index b55a8a1176..0000000000 --- a/src/lib-index/test-index.c +++ /dev/null @@ -1,12 +0,0 @@ -/* Copyright (c) 2009 Dovecot authors, see the included COPYING file */ - -#include "test-index.h" - -int main(void) -{ - static void (*test_functions[])(void) = { - test_transaction_log_view, - NULL - }; - return test_run(test_functions); -} diff --git a/src/lib-index/test-index.h b/src/lib-index/test-index.h deleted file mode 100644 index b6d1ac0d55..0000000000 --- a/src/lib-index/test-index.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef TEST_INDEX_H -#define TEST_INDEX_H - -#include "lib.h" -#include "test-common.h" - -void test_transaction_log_view(void); - -#endif diff --git a/src/lib-index/test-transaction-log-view.c b/src/lib-index/test-mail-transaction-log-view.c similarity index 69% rename from src/lib-index/test-transaction-log-view.c rename to src/lib-index/test-mail-transaction-log-view.c index ab76866080..92cf963ef4 100644 --- a/src/lib-index/test-transaction-log-view.c +++ b/src/lib-index/test-mail-transaction-log-view.c @@ -8,6 +8,51 @@ static struct mail_transaction_log *log; static struct mail_transaction_log_view *view; +void mail_transaction_log_file_set_corrupted(struct mail_transaction_log_file *file ATTR_UNUSED, + const char *fmt ATTR_UNUSED, ...) +{ +} + +void mail_transaction_logs_clean(struct mail_transaction_log *log ATTR_UNUSED) +{ +} + +int mail_transaction_log_find_file(struct mail_transaction_log *log, + uint32_t file_seq, bool nfs_flush ATTR_UNUSED, + struct mail_transaction_log_file **file_r) +{ + struct mail_transaction_log_file *file; + + for (file = log->files; file != NULL; file = file->next) { + if (file->hdr.file_seq == file_seq) { + *file_r = file; + return 1; + } + } + return 0; +} + +int mail_transaction_log_file_map(struct mail_transaction_log_file *file ATTR_UNUSED, + uoff_t start_offset ATTR_UNUSED, uoff_t end_offset ATTR_UNUSED) +{ + return 1; +} + +int mail_transaction_log_file_get_highest_modseq_at( + struct mail_transaction_log_file *file ATTR_UNUSED, + uoff_t offset ATTR_UNUSED, uint64_t *highest_modseq_r) +{ + *highest_modseq_r = 0; + return 0; +} + +bool mail_transaction_header_has_modseq(const struct mail_transaction_header *hdr ATTR_UNUSED, + const void *data ATTR_UNUSED, + uint64_t cur_modseq ATTR_UNUSED) +{ + return TRUE; +} + static void test_transaction_log_file_add(uint32_t file_seq) { @@ -17,15 +62,15 @@ test_transaction_log_file_add(uint32_t file_seq) file->hdr.file_seq = file_seq; file->hdr.hdr_size = file->sync_offset = sizeof(file->hdr); file->hdr.prev_file_seq = file_seq - 1; - file->hdr.indexid = 1; file->log = log; file->fd = -1; + file->buffer = buffer_create_dynamic(default_pool, 256); + file->buffer_offset = file->hdr.hdr_size; /* files must be sorted by file_seq */ for (p = &log->files; *p != NULL; p = &(*p)->next) { if ((*p)->hdr.file_seq > file->hdr.file_seq) break; - i_assert((*p)->hdr.file_seq < file->hdr.file_seq); } *p = file; log->head = file; @@ -47,12 +92,30 @@ static bool view_is_file_refed(uint32_t file_seq) return ret; } +static size_t +add_append_record(struct mail_transaction_log_file *file, + const struct mail_index_record *rec) +{ + struct mail_transaction_header hdr; + size_t size; + + memset(&hdr, 0, sizeof(hdr)); + hdr.type = MAIL_TRANSACTION_APPEND | MAIL_TRANSACTION_EXTERNAL; + hdr.size = mail_index_uint32_to_offset(sizeof(hdr) + sizeof(*rec)); + + buffer_append(file->buffer, &hdr, sizeof(hdr)); + buffer_append(file->buffer, rec, sizeof(*rec)); + + size = sizeof(hdr) + sizeof(*rec); + file->sync_offset += size; + return size; +} + void test_transaction_log_view(void) { const struct mail_transaction_header *hdr; - struct mail_transaction_log_append_ctx *append_ctx; - struct mail_index_record append_rec; const struct mail_index_record *rec; + struct mail_index_record append_rec; const void *data; uint32_t seq; uoff_t offset, last_log_size; @@ -70,12 +133,9 @@ void test_transaction_log_view(void) /* add an append record to the 3rd log file */ memset(&append_rec, 0, sizeof(append_rec)); append_rec.uid = 1; - test_assert(mail_transaction_log_append_begin(log->index, TRUE, &append_ctx) == 0); - mail_transaction_log_append_add(append_ctx, MAIL_TRANSACTION_APPEND, - &append_rec, sizeof(append_rec)); - test_assert(mail_transaction_log_append_commit(&append_ctx) == 0); + last_log_size = sizeof(struct mail_transaction_log_header) + - sizeof(struct mail_transaction_header) + sizeof(append_rec); + add_append_record(log->head, &append_rec); view = mail_transaction_log_view_open(log); test_assert(view != NULL && log->views == view && @@ -123,15 +183,12 @@ void test_transaction_log_view(void) mail_transaction_log_view_clear(view, 2); test_assert(!view_is_file_refed(1) && view_is_file_refed(2) && view_is_file_refed(3)); + log->files = log->files->next; + test_assert(log->files->hdr.file_seq == 2); test_end(); /* --- first file has been removed --- */ - test_begin("removed first"); - mail_transaction_logs_clean(log); - test_assert(log->files->hdr.file_seq == 2); - test_end(); - test_begin("set 2-3"); test_assert(mail_transaction_log_view_set(view, 2, 0, (uint32_t)-1, (uoff_t)-1, &reset) == 1); test_end(); @@ -146,3 +203,12 @@ void test_transaction_log_view(void) view->log = log; test_end(); } + +int main(void) +{ + static void (*test_functions[])(void) = { + test_transaction_log_view, + NULL + }; + return test_run(test_functions); +}