test-mail-transaction-log-view.c revision 02c335c23bf5fa225a467c19f2c063fb0dc7b8c3
c77a61a72b5ecdc507d6cf104142edd371a16c84yz/* Copyright (c) 2009-2016 Dovecot authors, see the included COPYING file */
c77a61a72b5ecdc507d6cf104142edd371a16c84yzvoid mail_transaction_log_file_set_corrupted(struct mail_transaction_log_file *file ATTR_UNUSED,
c77a61a72b5ecdc507d6cf104142edd371a16c84yzvoid mail_transaction_logs_clean(struct mail_transaction_log *log ATTR_UNUSED)
c77a61a72b5ecdc507d6cf104142edd371a16c84yzint mail_transaction_log_find_file(struct mail_transaction_log *log,
c77a61a72b5ecdc507d6cf104142edd371a16c84yz for (file = log->files; file != NULL; file = file->next) {
c77a61a72b5ecdc507d6cf104142edd371a16c84yzint mail_transaction_log_file_map(struct mail_transaction_log_file *file ATTR_UNUSED,
c77a61a72b5ecdc507d6cf104142edd371a16c84yz uoff_t start_offset ATTR_UNUSED, uoff_t end_offset ATTR_UNUSED)
c77a61a72b5ecdc507d6cf104142edd371a16c84yzvoid mail_transaction_update_modseq(const struct mail_transaction_header *hdr ATTR_UNUSED,
c77a61a72b5ecdc507d6cf104142edd371a16c84yzstatic void
c77a61a72b5ecdc507d6cf104142edd371a16c84yz file->hdr.hdr_size = file->sync_offset = sizeof(file->hdr);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz /* files must be sorted by file_seq */
c77a61a72b5ecdc507d6cf104142edd371a16c84yz unsigned int i, count;
c77a61a72b5ecdc507d6cf104142edd371a16c84yz for (i = 0; i < count; i++) {
c77a61a72b5ecdc507d6cf104142edd371a16c84yz hdr.type = MAIL_TRANSACTION_APPEND | MAIL_TRANSACTION_EXTERNAL;
c77a61a72b5ecdc507d6cf104142edd371a16c84yz hdr.size = mail_index_uint32_to_offset(sizeof(hdr) + sizeof(*rec));
c77a61a72b5ecdc507d6cf104142edd371a16c84yzstatic void test_mail_transaction_log_view(void)
c77a61a72b5ecdc507d6cf104142edd371a16c84yz const void *data;
c77a61a72b5ecdc507d6cf104142edd371a16c84yz const char *reason;
c77a61a72b5ecdc507d6cf104142edd371a16c84yz /* add an append record to the 3rd log file */
c77a61a72b5ecdc507d6cf104142edd371a16c84yz last_log_size = sizeof(struct mail_transaction_log_header) +
c77a61a72b5ecdc507d6cf104142edd371a16c84yz /* we have files 1-3 opened */
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 0, 0, (uint32_t)-1, (uoff_t)-1, &reset, &reason) == 1 &&
c77a61a72b5ecdc507d6cf104142edd371a16c84yz reset && view_is_file_refed(1) && view_is_file_refed(2) &&
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(seq == 1 && offset == sizeof(struct mail_transaction_log_header));
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_next(view, &hdr, &data) == 1);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(hdr->type == (MAIL_TRANSACTION_APPEND | MAIL_TRANSACTION_EXTERNAL));
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(memcmp(rec, &append_rec, sizeof(*rec)) == 0);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_next(view, &hdr, &data) == 0);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 0, 0, 0, 0, &reset, &reason) == 1);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(seq == 1 && offset == sizeof(struct mail_transaction_log_header));
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_next(view, &hdr, &data) == 0);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(seq == 1 && offset == sizeof(struct mail_transaction_log_header));
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 3, last_log_size, (uint32_t)-1, (uoff_t)-1, &reset, &reason) == 1);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_next(view, &hdr, &data) == 0);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz mail_transaction_log_view_get_prev_pos(view, &seq, &offset);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(!view_is_file_refed(1) && view_is_file_refed(2) &&
c77a61a72b5ecdc507d6cf104142edd371a16c84yz /* --- first file has been removed --- */
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 2, 0, (uint32_t)-1, (uoff_t)-1, &reset, &reason) == 1);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 0, 0, (uint32_t)-1, (uoff_t)-1, &reset, &reason) == 0);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz test_assert(mail_transaction_log_view_set(view, 0, 0, (uint32_t)-1, (uoff_t)-1, &reset, &reason) == -1);
c77a61a72b5ecdc507d6cf104142edd371a16c84yz static void (*test_functions[])(void) = {