From b750101eb236130cf056c675997decbac904cc49 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 17:35:18 +0200 Subject: Adding upstream version 252.22. Signed-off-by: Daniel Baumann --- test/test-sysusers.sh.in | 161 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100755 test/test-sysusers.sh.in (limited to 'test/test-sysusers.sh.in') diff --git a/test/test-sysusers.sh.in b/test/test-sysusers.sh.in new file mode 100755 index 0000000..aafba7d --- /dev/null +++ b/test/test-sysusers.sh.in @@ -0,0 +1,161 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: LGPL-2.1-or-later +set -e + +SYSUSERS="${1:-systemd-sysusers}" + +[ -e "$(dirname $0)/../systemd-runtest.env" ] && . "$(dirname $0)/../systemd-runtest.env" +SYSTEMD_TEST_DATA=${SYSTEMD_TEST_DATA:-@SYSTEMD_TEST_DATA@} +SOURCE=$SYSTEMD_TEST_DATA/test-sysusers + +TESTDIR=$(mktemp --tmpdir --directory "test-sysusers.XXXXXXXXXX") +trap "rm -rf '$TESTDIR'" EXIT INT QUIT PIPE + +prepare_testdir() { + mkdir -p $TESTDIR/etc/sysusers.d/ + mkdir -p $TESTDIR/usr/lib/sysusers.d/ + rm -f $TESTDIR/etc/*{passwd,group,shadow} + for i in $1.initial-{passwd,group,shadow}; do + test -f $i && cp $i $TESTDIR/etc/${i#*.initial-} + done + return 0 +} + +[ @SYSTEM_UID_MAX@ -lt @SYSTEM_GID_MAX@ ] && system_guid_max=@SYSTEM_UID_MAX@ || system_guid_max=@SYSTEM_GID_MAX@ + +preprocess() { + m=${2:-$system_guid_max} + + sed -e "s/SYSTEM_UGID_MAX/$m/g; + s#NOLOGIN#@NOLOGIN@#g" "$1" +} + +compare() { + if ! diff -u $TESTDIR/etc/passwd <(preprocess $1.expected-passwd $3); then + echo "**** Unexpected output for $f $2" + exit 1 + fi + + if ! diff -u $TESTDIR/etc/group <(preprocess $1.expected-group $3); then + echo "**** Unexpected output for $f $2" + exit 1 + fi +} + +rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/* + +# happy tests +for f in $(ls -1 $SOURCE/test-*.input | sort -V); do + echo "*** Running $f" + prepare_testdir ${f%.input} + cp $f $TESTDIR/usr/lib/sysusers.d/test.conf + $SYSUSERS --root=$TESTDIR + + compare ${f%.*} "" +done + +for f in $(ls -1 $SOURCE/test-*.input | sort -V); do + echo "*** Running $f on stdin" + prepare_testdir ${f%.input} + touch $TESTDIR/etc/sysusers.d/test.conf + cat $f | $SYSUSERS --root=$TESTDIR - + + compare ${f%.*} "on stdin" +done + +for f in $(ls -1 $SOURCE/test-*.input | sort -V); do + echo "*** Running $f on stdin with --replace" + prepare_testdir ${f%.input} + touch $TESTDIR/etc/sysusers.d/test.conf + # this overrides test.conf which is masked on disk + cat $f | $SYSUSERS --root=$TESTDIR --replace=/etc/sysusers.d/test.conf - + # this should be ignored + cat $SOURCE/test-1.input | $SYSUSERS --root=$TESTDIR --replace=/usr/lib/sysusers.d/test.conf - + + compare ${f%.*} "on stdin with --replace" +done + +# test --inline +echo "*** Testing --inline" +prepare_testdir $SOURCE/inline +# copy a random file to make sure it is ignored +cp $f $TESTDIR/etc/sysusers.d/confuse.conf +$SYSUSERS --root=$TESTDIR --inline \ + "u u1 222 - - /bin/zsh" \ + "g g1 111" + +compare $SOURCE/inline "(--inline)" + +# test --replace +echo "*** Testing --inline with --replace" +prepare_testdir $SOURCE/inline +# copy a random file to make sure it is ignored +cp $f $TESTDIR/etc/sysusers.d/confuse.conf +$SYSUSERS --root=$TESTDIR \ + --inline \ + --replace=/etc/sysusers.d/confuse.conf \ + "u u1 222 - - /bin/zsh" \ + "g g1 111" + +compare $SOURCE/inline "(--inline --replace=…)" + +rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/* + +cat >$TESTDIR/etc/login.defs <&1 | tail -n1 | sed -r 's/^[^:]+:[^:]+://' >$TESTDIR/err + if ! diff -u $TESTDIR/err ${f%.*}.expected-err; then + echo "**** Unexpected error output for $f" + cat $TESTDIR/err + exit 1 + fi +done -- cgit v1.2.3