test-mail-storage.c revision 596c4623489792be08d7af072caf0950facaeadb
2e37d45867d081db150ab78dad303b9077aea24fTimo Sirainen/* Copyright (c) 2017 Dovecot authors, see the included COPYING file */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen#include "lib.h"
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen#include "test-common.h"
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen#include "mail-storage-private.h"
472369cba85d9f7c995dda60e7cd01d78b4a960aTimo Sirainen
e28fa207d1a097fa6e4a867f74ee0761472ef1ceTimo Sirainenstatic void test_mail_storage_errors(void)
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen{
bd4e36a8cd7257cca7d1434c49a1e343ed7c5100Timo Sirainen struct mail_storage storage;
adb6413686e52e00dded4932babcc08ff041876bTimo Sirainen enum mail_error mail_error;
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen const char *errstr;
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen test_begin("mail storage errors");
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen i_zero(&storage);
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen
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);
e28fa207d1a097fa6e4a867f74ee0761472ef1ceTimo Sirainen test_assert(mail_error == MAIL_ERROR_PERM);
37847ec8eaec9ad55c9df10ae109efe7b37ac573Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "error1") == 0);
ef50336eefcb9ba99f73c6af37420eaf8857a39bTimo Sirainen test_assert(mail_error == MAIL_ERROR_PERM);
91b203fd2132510a47a4b34252c0ae0efd688a19Timo Sirainen test_assert(!storage.last_error_is_internal);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
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);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
5694eeb99b69dea8033ca77ad69743c6b4871370Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "error1") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(!storage.last_error_is_internal);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* clear the error - asking for it afterwards is a bug */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_clear_error(&storage);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen test_assert(!storage.last_error_is_internal);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen /* internal error without specifying what it is */
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen mail_storage_set_internal_error(&storage);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
de4d9f77d6378a416c9963963eac5ac18b75ec0bTimo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
de4d9f77d6378a416c9963963eac5ac18b75ec0bTimo Sirainen test_assert(strstr(mail_storage_get_last_internal_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
de486b59018016977015ef42e6071155b60e82e1Timo Sirainen test_assert(!storage.last_error_is_internal);
8e371a3ce32bd64288786855b8ce0cb63f19f7d1Timo Sirainen
220e21750948941dc6e33b8f11b552fa21d7f81eTimo Sirainen /* proper internal error */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_expect_error_string("critical1");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_critical(&storage, "critical1");
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_expect_no_more_errors();
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical1") == 0);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(storage.last_error_is_internal);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen
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_expect_no_more_errors();
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical2: critical1") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(storage.last_error_is_internal);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
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_expect_no_more_errors();
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
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 test_assert(mail_error == MAIL_ERROR_TEMP);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen test_assert(storage.last_error_is_internal);
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen
8a0ad174adb1eb5108511b90e97f4e5f9089b0eeTimo Sirainen /* clear the error again and check that all is as expected */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_clear_error(&storage);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "BUG: Unknown internal error") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(!storage.last_error_is_internal);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* use internal error as a regular error (although that really
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen shouldn't be done) */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_expect_error_string("critical4");
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_expect_no_more_errors();
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "critical4") == 0);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical4") == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(!storage.last_error_is_internal);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen mail_storage_clear_error(&storage);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen i_assert(array_count(&storage.error_stack) == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen array_free(&storage.error_stack);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_end();
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen}
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainenstatic void test_mail_storage_last_error_push_pop(void)
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen{
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen struct mail_storage storage;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen enum mail_error mail_error;
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen test_begin("mail_storage_last_error_push/pop()");
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen i_zero(&storage);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* regular error 1 */
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PERM, "regular error 1");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_last_error_push(&storage);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen /* critical error 1 */
db8b0a3f74a20528d66a3c4be7df920e5c4554c2Timo Sirainen test_expect_error_string("critical error 1");
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen mail_storage_set_critical(&storage, "critical error 1");
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_expect_no_more_errors();
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen mail_storage_last_error_push(&storage);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* regular error 2 */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_set_error(&storage, MAIL_ERROR_PARAMS, "regular error 2");
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen mail_storage_last_error_push(&storage);
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen
a27e065f1a1f91c7fbdf7c2ea1c387441af0cbb3Timo Sirainen /* critical error 2 */
1701e3f91107051b1704721bf1dc1e32491faaf9Timo Sirainen test_expect_error_string("critical error 2");
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_set_critical(&storage, "critical error 2");
6600c05e2ab38e9f662582b63c56b0c980a03748Timo Sirainen test_expect_no_more_errors();
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_last_error_push(&storage);
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen /* -- clear all errors -- */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_clear_error(&storage);
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen /* critical error 2 pop */
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_last_error_pop(&storage);
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical error 2") == 0);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
a24519c36d5f8fa22f58b2c693ba547e8d175a54Timo Sirainen test_assert(storage.last_error_is_internal);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
1701e3f91107051b1704721bf1dc1e32491faaf9Timo Sirainen /* regular error 2 pop */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen mail_storage_last_error_pop(&storage);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "regular error 2") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "regular error 2") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(mail_error == MAIL_ERROR_PARAMS);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(!storage.last_error_is_internal);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
3fe67ec75ccae1230bb9eb9f16affc48377f6441Timo Sirainen /* critical error 1 pop */
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen mail_storage_last_error_pop(&storage);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strstr(mail_storage_get_last_error(&storage, &mail_error), MAIL_ERRSTR_CRITICAL_MSG) != NULL);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "critical error 1") == 0);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(mail_error == MAIL_ERROR_TEMP);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(storage.last_error_is_internal);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen /* regular error 1 pop */
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen mail_storage_last_error_pop(&storage);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(strcmp(mail_storage_get_last_error(&storage, &mail_error), "regular error 1") == 0);
2a6dcd984104fed84bed8795ccdfabb20e41ce52Timo Sirainen test_assert(mail_error == MAIL_ERROR_PERM);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(strcmp(mail_storage_get_last_internal_error(&storage, &mail_error), "regular error 1") == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(mail_error == MAIL_ERROR_PERM);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_assert(!storage.last_error_is_internal);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
2649b237dd4690575e75a30b2bf3b39ebd37b835Timo Sirainen mail_storage_clear_error(&storage);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen i_assert(array_count(&storage.error_stack) == 0);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen array_free(&storage.error_stack);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_end();
27586e4785d56aeb76e1fd96af8db799688dc64aTimo Sirainen}
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainenint main(void)
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen{
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen static void (*const test_functions[])(void) = {
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_mail_storage_errors,
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen test_mail_storage_last_error_push_pop,
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen NULL
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen };
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen return test_run(test_functions);
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen}
2615df45a8027948a474abe5e817b34b0499c171Timo Sirainen