diff --git a/Makefile.am b/Makefile.am index 3e0005334923fc5c9199721df4e8de205aeddfad..6c1b79827331ef362c41057cd23e51dedba9f3e2 100644 --- a/Makefile.am +++ b/Makefile.am @@ -37,6 +37,7 @@ test_cases = \ tests/execute/errors.svtest \ tests/execute/actions.svtest \ tests/execute/smtp.svtest \ + tests/execute/mailstore.svtest \ tests/exists.svtest \ tests/header.svtest \ tests/address.svtest \ diff --git a/TODO b/TODO index eaa307a8605358a94d84d2f29e76a2ea7f12457f..9e793c3d518979e2406792eb21fa17e21951aef3 100644 --- a/TODO +++ b/TODO @@ -6,9 +6,7 @@ Current activities: - Write manual page * Testsuite: - add support for testing binary load/save - - add support for testing messages stored into a mailbox by looping these back - as the tested mail message - - add execution tests for fileinto and imap4flags extensions. + - add execution tests for imap4flags extensions. Next (in order of descending priority/precedence): diff --git a/src/testsuite/cmd-test-message.c b/src/testsuite/cmd-test-message.c index c269d02622a9c2665f5d7fa78f97582c1757ded4..4a4d804d4216ea62f2f3d2eb5be6df1c6be77468 100644 --- a/src/testsuite/cmd-test-message.c +++ b/src/testsuite/cmd-test-message.c @@ -12,6 +12,7 @@ #include "testsuite-common.h" #include "testsuite-smtp.h" +#include "testsuite-mailstore.h" /* * Test_message command @@ -196,6 +197,9 @@ static bool cmd_test_message_validate_folder_tag (valdtr, cmd, tag, *arg, SAAT_STRING) ) { return FALSE; } + + /* Skip parameter */ + *arg = sieve_ast_argument_next(*arg); return TRUE; } @@ -346,7 +350,8 @@ static int cmd_test_message_mailbox_operation_execute { string_t *folder; sieve_number_t msg_index; - unsigned int is_test = -1; + unsigned int is_test = -1; + bool result; /* * Read operands @@ -377,7 +382,15 @@ static int cmd_test_message_mailbox_operation_execute sieve_runtime_trace(renv, "TEST_MESSAGE_MAILBOX (%s) \"%s\" [%d]", ( is_test ? "TEST" : "COMMAND" ), str_c(folder), msg_index); - /* FIXME: to be implemented */ + result = testsuite_mailstore_mail_index(renv, str_c(folder), msg_index); + + if ( is_test ) { + sieve_interpreter_set_test_result(renv->interp, result); + return SIEVE_EXEC_OK; + } + + if ( !result ) + testsuite_test_failf("no outgoing SMTP message with index %d", msg_index); return SIEVE_EXEC_OK; } diff --git a/src/testsuite/testsuite-mailstore.c b/src/testsuite/testsuite-mailstore.c index 4882a9f8808e88bb818439f3fc0c86ec44a7a9ad..91746e5c6ac9b72b42a85f8ff83c99e0c5b56773 100644 --- a/src/testsuite/testsuite-mailstore.c +++ b/src/testsuite/testsuite-mailstore.c @@ -194,7 +194,7 @@ bool testsuite_mailstore_mail_index if ( mail == NULL ) return FALSE; - mail_set_seq(mail, index); + mail_set_seq(mail, index+1); testsuite_message_set_mail(renv, mail); return TRUE; diff --git a/tests/execute/mailstore.svtest b/tests/execute/mailstore.svtest new file mode 100644 index 0000000000000000000000000000000000000000..5ecdaa8830546a666c783fc5d8bd9358068f192a --- /dev/null +++ b/tests/execute/mailstore.svtest @@ -0,0 +1,84 @@ +require "vnd.dovecot.testsuite"; +require "fileinto"; +require "variables"; +require "mailbox"; + +set "message1" text: +From: stephan@rename-it.nl +To: nico@vestingbar.nl +Subject: First message + +Frop +. +; + +set "message2" text: +From: stephan@rename-it.nl +To: nico@vestingbar.nl +Subject: Second message + +Frop +. +; + +set "message3" text: +From: stephan@rename-it.nl +To: nico@vestingbar.nl +Subject: Third message + +Frop +. +; + +test "Duplicates" { + test_set "message" "${message1}"; + + fileinto :create "Folder"; + fileinto :create "Folder"; + + if not test_result_execute { + test_fail "failed to execute first result"; + } + + test_result_reset; + + test_set "message" "${message2}"; + + fileinto :create "Folder"; + fileinto :create "Folder"; + + if not test_result_execute { + test_fail "failed to execute second result"; + } + + test_result_reset; + + test_set "message" "${message3}"; + + fileinto :create "Folder"; + fileinto :create "Folder"; + + if not test_result_execute { + test_fail "failed to execute third result"; + } + + test_message :folder "Folder" 0; + + if not header :is "subject" "First message" { + test_fail "first message incorrect"; + } + + test_message :folder "Folder" 1; + + if not header :is "subject" "Second message" { + test_fail "first message incorrect"; + } + + test_message :folder "Folder" 2; + + if not header :is "subject" "Third message" { + test_fail "first message incorrect"; + } +} + + diff --git a/tests/extensions/mailbox/execute.svtest b/tests/extensions/mailbox/execute.svtest index 22c0d0f2991ffccd8b7d939237239899b442dbcb..6bea193739253f650b62e339dfcb9a214341d219 100644 --- a/tests/extensions/mailbox/execute.svtest +++ b/tests/extensions/mailbox/execute.svtest @@ -36,6 +36,15 @@ test ":Create" { test_fail "mailbox exists already"; } + test_set "message" text: +From: stephan@rename-it.nl +To: nico@vestingbar.nl +Subject: Frop 1 + +Frop! +. + ; + fileinto :create "created"; if not test_result_execute { @@ -45,4 +54,27 @@ test ":Create" { if not mailboxexists "created" { test_fail "mailbox somehow not created"; } + + test_result_reset; + + test_set "message" text: +From: stephan@rename-it.nl +To: nico@vestingbar.nl +Subject: Frop 2 + +Frop! +. + ; + + fileinto "created"; + + if not test_result_execute { + test_fail "execution of result failed second time"; + } + + test_message :folder "created" 0; + + if not header :is "subject" "Frop 1" { + test_fail "incorrect message read back from mail store"; + } }