test-mail-storage.c revision 596c4623489792be08d7af072caf0950facaeadb
2e37d45867d081db150ab78dad303b9077aea24fTimo Sirainen/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */
b039dabf4c53f72454e795930e7643b6e0e625f9Timo Sirainen /* try a regular error */
94d8e51119003d2bc5a100c663f90141f297385dTimo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PERM, "error1");
ef50336eefcb9ba99f73c6af37420eaf8857a39bTimo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "error1") == 0);
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "error1") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* set the error to itself */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PARAMS,
dc5606fb66d30a659459446b6ca1a8b4f1146052Timo Sirainen mail_storage_get_last_error(&storage, &mail_error));
5694eeb99b69dea8033ca77ad69743c6b4871370Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "error1") == 0);
5694eeb99b69dea8033ca77ad69743c6b4871370Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "error1") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* clear the error - asking for it afterwards is a bug */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen /* internal error without specifying what it is */
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
de4d9f77d6378a416c9963963eac5ac18b75ec0bTimo Sirainen test_assert(strstr(mail_storage_get_last_internal_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
220e21750948941dc6e33b8f11b552fa21d7f81eTimo Sirainen /* proper internal error */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_critical(&storage, "critical1");
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical1") == 0);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen /* use it in the following internal error */
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_expect_error_string("critical2: critical1");
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen mail_storage_set_critical(&storage, "critical2: %s",
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_get_last_internal_error(&storage, &mail_error));
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical2: critical1") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* use the previous non-internal error as part of the internal error */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_expect_error_string("critical3: "MAIL_ERRSTR_CRITICAL_MSG);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_critical(&storage, "critical3: %s",
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_get_last_error(&storage, &mail_error));
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen errstr = mail_storage_get_last_internal_error(&storage, &mail_error);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strncmp(errstr, "critical3: ", 11) == 0);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(strstr(errstr+11, MAIL_ERRSTR_CRITICAL_MSG) != NULL);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen /* clear the error again and check that all is as expected */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* use internal error as a regular error (although that really
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen shouldn't be done) */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_critical(&storage, "critical4");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PARAMS,
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_get_last_internal_error(&storage, &mail_error));
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "critical4") == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical4") == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen i_assert(array_count(&storage.error_stack) == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainenstatic void test_mail_storage_last_error_push_pop(void)
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen test_begin("mail_storage_last_error_push/pop()");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* regular error 1 */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PERM, "regular error 1");
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen /* critical error 1 */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen mail_storage_set_critical(&storage, "critical error 1");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* regular error 2 */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PARAMS, "regular error 2");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* critical error 2 */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_set_critical(&storage, "critical error 2");
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen /* -- clear all errors -- */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen /* critical error 2 pop */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical error 2") == 0);
1701e3f91107051b1704721bf1dc1e32491faaf9Timo Sirainen /* regular error 2 pop */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "regular error 2") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "regular error 2") == 0);
3fe67ec75ccae1230bb9eb9f16affc48377f6441Timo Sirainen /* critical error 1 pop */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical error 1") == 0);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen /* regular error 1 pop */
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "regular error 1") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "regular error 1") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen i_assert(array_count(&storage.error_stack) == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen static void (*const test_functions[])(void) = {