test/test-lib.sh: take the --background feature in smtp-dummy into use
authorTomi Ollila <too@iki.fi>
Tue, 18 Sep 2012 14:23:02 +0000 (17:23 +0300)
committerDavid Bremner <bremner@debian.org>
Sat, 20 Oct 2012 20:46:11 +0000 (17:46 -0300)
The use of --background option (instead of shell '&') ensures that
smtp-dummy is listening its server socket until execution of shell
script can continue, thus the client will always have socket where
to connect.

smtp-dummy outputs smtp_dummy_pid variable in shell assignment format;
eval'ing that output makes that variable available for the shell.

As the smtp-dummy instance is no longer child process of the script
the SIGKILL signal sent to it will ensure it is going away in case
the mail sender fails to connect to smtp-dummy.

test/test-lib.sh

index 568e89f18024cc8e4350236e8ca0eb3dad3dd4c9..2f7d6cd181c82e4ec5df559b7046171e5f23ad8d 100644 (file)
@@ -403,8 +403,11 @@ emacs_deliver_message ()
     shift 2
     # before we can send a message, we have to prepare the FCC maildir
     mkdir -p "$MAIL_DIR"/sent/{cur,new,tmp}
-    $TEST_DIRECTORY/smtp-dummy sent_message &
-    smtp_dummy_pid=$!
+    # eval'ing smtp-dummy --background will set smtp_dummy_pid
+    smtp_dummy_pid=
+    eval `$TEST_DIRECTORY/smtp-dummy --background sent_message`
+    test -n "$smtp_dummy_pid" || return 1
+
     test_emacs \
        "(let ((message-send-mail-function 'message-smtpmail-send-it)
               (smtpmail-smtp-server \"localhost\")
@@ -419,9 +422,11 @@ emacs_deliver_message ()
           (insert \"${body}\")
           $@
           (message-send-and-exit))"
-    # opportunistically quit smtp-dummy in case above fails.
-    { echo QUIT > /dev/tcp/localhost/25025; } 2>/dev/null
-    wait ${smtp_dummy_pid}
+
+    # In case message was sent properly, client waits for confirmation
+    # before exiting and resuming control here; therefore making sure
+    # that server exits by sending (KILL) signal to it is safe.
+    kill -9 $smtp_dummy_pid
     notmuch new >/dev/null
 }