From 765bfbf4d9e4cd22371313f653cd6431034798f0 Mon Sep 17 00:00:00 2001 From: Mathieu Lirzin Date: Mon, 18 May 2020 12:54:52 +0200 Subject: tests: Check (mcron redirect) * 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 +;;; Copyright © 2020 Mathieu Lirzin ;;; Copyright © 2018 宋文武 ;;; ;;; 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 +;;; +;;; 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 . + +(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) -- cgit v1.2.3