bug-mcron
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[PATCH 3/3] tests: Check (mcron redirect)


From: Mathieu Lirzin
Subject: [PATCH 3/3] tests: Check (mcron redirect)
Date: Mon, 18 May 2020 12:54:52 +0200

* tests/redirect.scm: New file.
* Makefile.am (TESTS): Register it.
* src/mcron/redirect.scm (with-mail-out): Adapt to facilitate testing.
---
 Makefile.am            |  1 +
 src/mcron/redirect.scm | 12 ++++++----
 tests/redirect.scm     | 53 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 62 insertions(+), 4 deletions(-)
 create mode 100644 tests/redirect.scm

diff --git a/Makefile.am b/Makefile.am
index c7562c5..ddfad07 100755
--- a/Makefile.am
+++ b/Makefile.am
@@ -137,6 +137,7 @@ TESTS = \
   tests/base.scm \
   tests/environment.scm \
   tests/job-specifier.scm \
+  tests/redirect.scm \
   tests/utils.scm \
   tests/vixie-specification.scm \
   tests/vixie-time.scm
diff --git a/src/mcron/redirect.scm b/src/mcron/redirect.scm
index b7df42c..8374552 100644
--- a/src/mcron/redirect.scm
+++ b/src/mcron/redirect.scm
@@ -1,5 +1,6 @@
 ;;;; redirect.scm -- modify job outputs
 ;;; Copyright © 2003 Dale Mellor <address@hidden>
+;;; Copyright © 2020 Mathieu Lirzin <address@hidden>
 ;;; Copyright © 2018 宋文武 <address@hidden>
 ;;;
 ;;; This file is part of GNU Mcron.
@@ -63,7 +64,10 @@
 ;; the string, and output (including the error output) being sent to a pipe
 ;; opened on a mail transport.
 
-(define (with-mail-out action . user)
+(define* (with-mail-out action #:optional user #:key
+                        (hostname (gethostname))
+                        (out (lambda ()
+                               (open-output-pipe config-sendmail))))
 
   ;; Determine the name of the user who is to recieve the mail, looking for a
   ;; name in the optional user argument, then in the MAILTO environment
@@ -72,7 +76,7 @@
 
   (let* ((mailto (getenv "MAILTO"))
          (user (cond (mailto mailto)
-                     ((not (null? user)) (car user))
+                     (user user)
                      (else (getenv "LOGNAME"))))
          (parent->child (pipe))
          (child->parent (pipe))
@@ -173,11 +177,11 @@
                                        (open-output-file "/dev/null")
                                        ;; The sendmail command should read
                                        ;; recipients from the message header.
-                                       (open-output-pipe config-sendmail)))
+                                       (out)))
           (set-current-input-port (car child->parent))
           (display "To: ") (display user) (newline)
           (display "From: mcron") (newline)
-          (display (string-append "Subject: " user "@" (gethostname)))
+          (display (string-append "Subject: " user "@" hostname))
           (newline)
           (newline)
 
diff --git a/tests/redirect.scm b/tests/redirect.scm
new file mode 100644
index 0000000..700bfb4
--- /dev/null
+++ b/tests/redirect.scm
@@ -0,0 +1,53 @@
+;;;; redirect.scm -- tests for (mcron redirect) module
+;;; Copyright © 2020 Mathieu Lirzin <address@hidden>
+;;;
+;;; This file is part of GNU Mcron.
+;;;
+;;; GNU Mcron is free software: you can redistribute it and/or modify
+;;; it under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation, either version 3 of the License, or
+;;; (at your option) any later version.
+;;;
+;;; GNU Mcron is distributed in the hope that it will be useful,
+;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Mcron.  If not, see <http://www.gnu.org/licenses/>.
+
+(use-modules (ice-9 textual-ports)
+             (srfi srfi-1)
+             (srfi srfi-64)
+             (mcron redirect))
+
+(setenv "TZ" "UTC0")
+
+(test-begin "redirect")
+
+(define out (mkstemp! (string-copy "foo-XXXXXX")))
+
+(dynamic-wind
+  (const #t)
+  (lambda ()
+    (with-mail-out "echo 'foo'" "user0"
+                   #:out (lambda () out)
+                   #:hostname "localhost")
+
+    (flush-all-ports)
+
+    (test-equal "mail output"
+      "To: user0
+From: mcron
+Subject: user0@localhost
+
+foo
+"
+      (call-with-input-file (port-filename out) get-string-all)))
+
+  (lambda ()
+    (let ((fname (port-filename out)))
+      (close out)
+      (delete-file fname))))
+
+(test-end)
-- 
2.20.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]