From 055ade7b750dc9f037f550505d0cbd757a12b6f5 Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sun, 2 Aug 2009 00:58:47 +0200 Subject: [PATCH] Testsuite: added support for testing delivered messages by looping these back as the evaluated message. Added tests for the fileinto command. --- Makefile.am | 1 + TODO | 4 +- src/testsuite/cmd-test-message.c | 17 ++++- src/testsuite/testsuite-mailstore.c | 2 +- tests/execute/mailstore.svtest | 84 +++++++++++++++++++++++++ tests/extensions/mailbox/execute.svtest | 32 ++++++++++ 6 files changed, 134 insertions(+), 6 deletions(-) create mode 100644 tests/execute/mailstore.svtest diff --git a/Makefile.am b/Makefile.am index 3e0005334..6c1b79827 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 eaa307a86..9e793c3d5 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 c269d0262..4a4d804d4 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 4882a9f88..91746e5c6 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 000000000..5ecdaa883 --- /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 22c0d0f29..6bea19373 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"; + } } -- GitLab