Hi Pierre, Pierre Langlois <pierre.langl...@gmx.com> writes:
> Hi all! > > As suggested by mirai off-list, it would be nice to have a test that > would have caught the issue. How do people feel about something along > the following patch? The idea is to use namespaces in the dovecot config > to declare the INBOX and another additional mailbox. > > The bug is quite obscure and not really about dovecot itself, so I don't > think adding such a test is strictly necessary, maybe more tests for the > configuration macro would be good instead. But I figured expanding the > dovecot system test can't hurt. Let me know if you agree and I'll format > it properly. Thanks for the diff! I've turned it into a patch and was ready to apply it, but 2 tests are always failing, even after addressing this issue; could you look into why? It looks good otherwise.
>From 149790c4bd264d81938596cdbfa3376f31f9182f Mon Sep 17 00:00:00 2001 From: Pierre Langlois <pierre.langl...@gmx.com> Date: Fri, 2 Dec 2022 14:17:25 -0500 Subject: [PATCH] tests: Expound Dovecot test suite. Relates to <https://issues.guix.gnu.org/59423>. * gnu/tests/mail.scm (%dovecot-os) [services] <dovecot-configuration>: Add two namespaces. (run-dovecot-test) <with-imap-connection>: New syntax. <marionette-read-new-mail>: New test. <accept an email>: Use with-imap-connection. <mail arrived in fresh mailbox>: New test. <mail arrived>: Adjust test. <mailbox exists>: New test. Signed-off-by: Maxim Cournoyer <maxim.courno...@gmail.com> --- gnu/tests/mail.scm | 79 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 60 insertions(+), 19 deletions(-) diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm index f13751b72f..8a2dbd798f 100644 --- a/gnu/tests/mail.scm +++ b/gnu/tests/mail.scm @@ -301,8 +301,19 @@ (define %dovecot-os (auth-anonymous-username "alice") (mail-location (string-append "maildir:~/Maildir" - ":INBOX=~/Maildir/INBOX" - ":LAYOUT=fs")))))) + ":LAYOUT=fs")) + (namespaces + (list + (namespace-configuration + (name "INBOX") + (inbox? #t) + (separator "/") + (location "maildir:~/Maildir/INBOX")) + (namespace-configuration + (name "guix-devel") + (separator "/") + (prefix "guix-devel/") + (location "maildir:~/Maildir/guix-devel")))))))) (define (run-dovecot-test) "Return a test of an OS running Dovecot service." @@ -351,9 +362,10 @@ (define message "From: t...@example.com\n\ (marionette-eval `(file-exists? (string-append "/proc/" ,pid)) marionette))) - (test-assert "accept an email" + (define-syntax-rule (with-imap-connection imap exp ...) (let ((imap (socket AF_INET SOCK_STREAM 0)) - (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143))) + (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143)) + (body (lambda (imap) exp ...))) (connect imap addr) ;; Be greeted. (read-line imap) ;OK @@ -362,6 +374,43 @@ (define message "From: t...@example.com\n\ (read-line imap) ;+ (write-line "c2lyaGM=" imap) (read-line imap) ;OK + + (let ((ok (body imap))) + ;; Logout + (write-line "a LOGOUT" imap) + (close imap) + ok))) + + (define (marionette-read-new-mail mailbox marionette) + (marionette-eval + `(begin + (use-modules (ice-9 ftw) + (ice-9 match)) + (match (scandir ,mailbox) + (("." ".." message-file) + (call-with-input-file + (string-append ,mailbox message-file) + get-string-all)))) + marionette)) + + (test-assert "accept an email" + (with-imap-connection imap + ;; Append a message to the INBOX mailbox + (write-line (format #f "a APPEND INBOX {~a}" + (number->string (message-length message))) + imap) + (read-line imap) ;+ + (write-line message imap) + (read-line imap) ;OK + #t)) + + (test-equal "mail arrived" + message + (marionette-read-new-mail "/home/alice/Maildir/INBOX/new/" + marionette)) + + (test-assert "accept an email in fresh mailbox" + (with-imap-connection imap ;; Create a TESTBOX mailbox (write-line "a CREATE TESTBOX" imap) (read-line imap) ;OK @@ -372,24 +421,16 @@ (define message "From: t...@example.com\n\ (read-line imap) ;+ (write-line message imap) (read-line imap) ;OK - ;; Logout - (write-line "a LOGOUT" imap) - (close imap) #t)) - (test-equal "mail arrived" + (test-equal "mail arrived in fresh mailbox" message - (marionette-eval - '(begin - (use-modules (ice-9 ftw) - (ice-9 match)) - (let ((TESTBOX/new "/home/alice/Maildir/TESTBOX/new/")) - (match (scandir TESTBOX/new) - (("." ".." message-file) - (call-with-input-file - (string-append TESTBOX/new message-file) - get-string-all))))) - marionette)) + (marionette-read-new-mail "/home/alice/Maildir/TESTBOX/new/" + marionette)) + + (test-assert "mailbox exists" + (marionette-eval `(file-exists? "/home/alice/Maildir/guix-devel") + marionette)) (test-end)))) base-commit: 83350bf56b20f3106cd9eeab80b70a9eaf810a48 -- 2.38.1
-- Thanks, Maxim