From 2e7a0795b3a7080376238ab604c50d2c180f8730 Mon Sep 17 00:00:00 2001 From: Diego Nicola Barbato Date: Mon, 27 Apr 2020 16:57:36 +0200 Subject: [PATCH] tests: Test #:file-creation-mask option of 'make-forkexec-constructor'. * tests/file-creation-mask.sh: New file. --- tests/file-creation-mask.sh | 79 +++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 tests/file-creation-mask.sh diff --git a/tests/file-creation-mask.sh b/tests/file-creation-mask.sh new file mode 100644 index 0000000..9f5f10a --- /dev/null +++ b/tests/file-creation-mask.sh @@ -0,0 +1,79 @@ +# GNU Shepherd --- Test the #:file-creation-mask option of 'make-forkexec-constructor'. +# Copyright © 2020 Diego N. Barbato +# +# This file is part of the GNU Shepherd. +# +# The GNU Shepherd 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. +# +# The GNU Shepherd 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 the GNU Shepherd. If not, see . + +shepherd --version +herd --version + +socket="t-socket-$$" +conf="t-conf-$$" +log="t-log-$$" +pid="t-pid-$$" +service_log="t-service-log-$$" +service_new_file="t-service-new-file-$$" + +herd="herd -s $socket" + +trap "cat $log || true; + rm -f $socket $conf $log $service_log $service_new_file; + test -f $pid && kill \`cat $pid\` || true; rm -f $pid" EXIT + +function wait_for_file +{ + i=0 + while ! test -f "$1" && test $i -lt 20 + do + sleep 0.3 + i=`expr $i + 1` + done + test -f "$1" +} + +cat > "$conf"< + #:provides '(test) + #:start (make-forkexec-constructor %command + #:log-file "$PWD/$service_log" + ;; Set the umask such that file + ;; permissions are #o600. + #:file-creation-mask #o177) + #:stop (make-kill-destructor) + #:respawn? #f)) +EOF + +rm -f "$pid" +shepherd -I -s "$socket" -c "$conf" -l "$log" --pid="$pid" & + +# Wait till it's ready. +wait_for_file "$pid" + +# Start the service. +$herd start test + +# Make sure the log file is created with the right permissions independently +# of the value of #:file-creation-mask. +wait_for_file "$service_log" +test `stat -c %a "$service_log"` -eq 640 + +# Make sure the service creates files with the right permissions as determined +# by the value of #:file-creation-mask. +wait_for_file "$service_new_file" +test `stat -c %a "$service_new_file"` -eq 600 -- 2.26.0