From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37536) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1etqwE-0008A1-21 for guix-patches@gnu.org; Thu, 08 Mar 2018 03:30:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1etqw7-00070M-Ks for guix-patches@gnu.org; Thu, 08 Mar 2018 03:30:10 -0500 Received: from debbugs.gnu.org ([208.118.235.43]:42251) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1etqw7-0006zZ-FQ for guix-patches@gnu.org; Thu, 08 Mar 2018 03:30:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1etqw7-0006Vt-3S for guix-patches@gnu.org; Thu, 08 Mar 2018 03:30:03 -0500 Subject: [bug#30744] [PATCH] tests: mail: Add test for dovecot. Resent-Message-ID: From: Oleg Pykhalov Date: Thu, 8 Mar 2018 11:28:55 +0300 Message-Id: <20180308082855.7113-1-go.wigust@gmail.com> In-Reply-To: <87po4fug8i.fsf@gmail.com> References: <87po4fug8i.fsf@gmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-patches-bounces+kyle=kyleam.com@gnu.org Sender: "Guix-patches" To: 30744@debbugs.gnu.org, =?UTF-8?Q?Cl=C3=A9ment?= Lassieur * gnu/tests/mail.scm (%dovecot-os, %test-dovecot): New variables. (run-dovecot-test): New procedure. --- gnu/tests/mail.scm | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 113 insertions(+), 1 deletion(-) diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm index 312df9b1c..77f273f8b 100644 --- a/gnu/tests/mail.scm +++ b/gnu/tests/mail.scm @@ -29,7 +29,8 @@ #:use-module (guix store) #:use-module (ice-9 ftw) #:export (%test-opensmtpd - %test-exim)) + %test-exim + %test-dovecot)) (define %opensmtpd-os (simple-operating-system @@ -279,3 +280,114 @@ acl_check_data: (name "exim") (description "Send an email to a running an Exim server.") (value (run-exim-test)))) + +(define %dovecot-os + (simple-operating-system + (dhcp-client-service) + (dovecot-service #:config + (dovecot-configuration + (disable-plaintext-auth? #f) + (ssl? "no") + (auth-mechanisms '("anonymous")) + (auth-anonymous-username "alice") + (mail-location + (string-append "maildir:~/Maildir" + ":INBOX=~/Maildir/INBOX" + ":LAYOUT=fs")))))) + +(define (run-dovecot-test) + "Return a test of an OS running Dovecot service." + (define vm + (virtual-machine + (operating-system (marionette-operating-system + %dovecot-os + #:imported-modules '((gnu services herd)))) + (port-forwardings '((8143 . 143))))) + + (define test + (with-imported-modules '((gnu build marionette)) + #~(begin + (use-modules (gnu build marionette) + (ice-9 iconv) + (ice-9 rdelim) + (rnrs base) + (rnrs bytevectors) + (srfi srfi-64)) + + (define marionette + (make-marionette '(#$vm))) + + (define* (message-length message #:key (encoding "iso-8859-1")) + (bytevector-length (string->bytevector message encoding))) + + (define message "From: test@example.com\n\ +Subject: Hello Nice to meet you!") + + (mkdir #$output) + (chdir #$output) + + (test-begin "dovecot") + + ;; Wait for dovecot to be up and running. + (test-eq "dovecot running" + 'running! + (marionette-eval + '(begin + (use-modules (gnu services herd)) + (start-service 'dovecot) + 'running!) + marionette)) + + ;; Give the service time to start talking. + (wait-for-file "/var/run/dovecot/master.pid" marionette) + + (test-assert "accept an email" + (let ((imap (socket AF_INET SOCK_STREAM 0)) + (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143))) + (connect imap addr) + ;; Be greeted. + (read-line imap) ;OK + ;; Authenticate + (write-line "a AUTHENTICATE ANONYMOUS" imap) + (read-line imap) ;+ + (write-line "c2lyaGM=" imap) + (read-line imap) ;OK + ;; Create a TESTBOX mailbox + (write-line "a CREATE TESTBOX" imap) + (read-line imap) ;OK + ;; Append a message to a TESTBOX mailbox + (write-line (format #f "a APPEND TESTBOX {~a}" + (number->string (message-length message))) + imap) + (read-line imap) ;+ + (write-line message imap) + (read-line imap) ;OK + ;; Logout + (write-line "a LOGOUT" imap) + (close imap) + #t)) + + (test-equal "mail arrived" + message + (marionette-eval + '(begin + (use-modules (ice-9 ftw) + (ice-9 match)) + (let ((TESTBOX/new "/home/alice/Maildir/TESTBOX/new/")) + (match (scandir TESTBOX/new) + ((cwd .. message-file) + (call-with-input-file + (string-append TESTBOX/new message-file) + get-string-all))))) + marionette)) + + (test-end) + (exit (= (test-runner-fail-count (test-runner-current)) 0))))) + + (gexp->derivation "dovecot-test" test)) + +(define %test-dovecot + (system-test + (name "dovecot") + (description "Connect to a running Dovecot server.") + (value (run-dovecot-test)))) -- 2.16.2