From: Oleg Pykhalov <go.wigust@gmail.com>
To: 30744@debbugs.gnu.org, "Clément Lassieur" <clement@lassieur.org>
Subject: [bug#30744] [PATCH] tests: mail: Add test for dovecot.
Date: Thu, 8 Mar 2018 11:28:55 +0300 [thread overview]
Message-ID: <20180308082855.7113-1-go.wigust@gmail.com> (raw)
In-Reply-To: <87po4fug8i.fsf@gmail.com>
* 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
next prev parent reply other threads:[~2018-03-08 8:30 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-03-07 21:30 [bug#30744] [PATCH 1/2] services: dovecot: Copy dovecot.conf to /etc/dovecot Oleg Pykhalov
2018-03-07 21:32 ` [bug#30744] [PATCH] tests: mail: Add test for dovecot Oleg Pykhalov
2018-03-07 23:34 ` Clément Lassieur
2018-03-08 8:24 ` Oleg Pykhalov
2018-03-08 8:28 ` Oleg Pykhalov [this message]
2018-03-08 9:41 ` Clément Lassieur
2018-03-09 9:31 ` Oleg Pykhalov
2018-03-09 10:16 ` Clément Lassieur
2018-03-09 14:30 ` Oleg Pykhalov
2018-03-07 23:34 ` [bug#30744] [PATCH 1/2] services: dovecot: Copy dovecot.conf to /etc/dovecot Clément Lassieur
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180308082855.7113-1-go.wigust@gmail.com \
--to=go.wigust@gmail.com \
--cc=30744@debbugs.gnu.org \
--cc=clement@lassieur.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.