GNU bug report logs - #30744
[PATCH 1/2] services: dovecot: Copy dovecot.conf to /etc/dovecot.

Previous Next

Package: guix-patches;

Reported by: Oleg Pykhalov <go.wigust <at> gmail.com>

Date: Wed, 7 Mar 2018 21:32:02 UTC

Severity: normal

Tags: patch

Done: Oleg Pykhalov <go.wigust <at> gmail.com>

Bug is archived. No further changes may be made.

Full log


Message #11 received at 30744 <at> debbugs.gnu.org (full text, mbox):

From: Clément Lassieur <clement <at> lassieur.org>
To: Oleg Pykhalov <go.wigust <at> gmail.com>
Cc: 30744 <at> debbugs.gnu.org
Subject: Re: [bug#30744] [PATCH] tests: mail: Add test for dovecot.
Date: Thu, 08 Mar 2018 00:34:13 +0100
Hi Oleg,

Oleg Pykhalov <go.wigust <at> gmail.com> writes:

> * gnu/tests/mail.scm (%dovecot-os, %test-dovecot): New variables.
> (run-dovecot-test): New procedure.
> ---
>  gnu/tests/mail.scm | 113 ++++++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 112 insertions(+), 1 deletion(-)

Thank you for these patches!

> diff --git a/gnu/tests/mail.scm b/gnu/tests/mail.scm
> index 312df9b1c..69fe016e7 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,113 @@ 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)
> +                       (ice-9 regex)
> +                       (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)))
> +
> +          (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))
> +
> +          (sleep 1) ; give the service time to start talking

Here, it would probably be safer to wait for the PID file to arrive.
You could use 'wait-for-file' for this, there are examples in other
tests.  Dovecot's PID file is /var/run/dovecot/master.pid.

> +          (test-eq "accept an email"
> +            #t

Could you use 'test-assert' here?

> +            (let ((imap (socket AF_INET SOCK_STREAM 0))
> +                  (addr (make-socket-address AF_INET INADDR_LOOPBACK 8143))
> +                  (message "From: test <at> example.com\n\
> +Subject: Hello Nice to meet you!"))
> +              (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-assert "mail arrived"
> +            (marionette-eval
> +             '(begin
> +                (use-modules (ice-9 ftw)
> +                             (ice-9 match))
> +                ;; Get a message ID
> +                (string->number
> +                 (match (scandir "/home/alice/Maildir/TESTBOX/new/")
> +                   ((_ _ message)

Could you write "." ".." here instead of _ _?  It makes it easier to
understand the code.

> +                    (match (string-split message #\.)
> +                      ((message-id _ _) message-id))))))

Here I think it would be great to compare the arrived message and the
sent message to check that they are the same.  If they are the same,
then the test succeeds.  WDYT?

> +             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))))





This bug report was last modified 7 years and 75 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.