]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test/TEST-21-SYSUSERS: add tests for new functionality
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 2 Feb 2018 07:53:47 +0000 (08:53 +0100)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 2 Feb 2018 09:40:24 +0000 (10:40 +0100)
test/TEST-21-SYSUSERS/inline.expected-group [new file with mode: 0644]
test/TEST-21-SYSUSERS/inline.expected-passwd [new file with mode: 0644]
test/TEST-21-SYSUSERS/test-2.expected-group
test/TEST-21-SYSUSERS/test-2.expected-passwd
test/TEST-21-SYSUSERS/test-2.input
test/TEST-21-SYSUSERS/test.sh

diff --git a/test/TEST-21-SYSUSERS/inline.expected-group b/test/TEST-21-SYSUSERS/inline.expected-group
new file mode 100644 (file)
index 0000000..cc9093f
--- /dev/null
@@ -0,0 +1,2 @@
+g1:x:111:
+u1:x:222:
diff --git a/test/TEST-21-SYSUSERS/inline.expected-passwd b/test/TEST-21-SYSUSERS/inline.expected-passwd
new file mode 100644 (file)
index 0000000..f50f25c
--- /dev/null
@@ -0,0 +1 @@
+u1:x:222:222::/:/bin/zsh
index 4d90426075c858eacf71e82af75ae88bef234363..8fcc03f4e9fd36113ad6c8a53936a47410779dc4 100644 (file)
@@ -1 +1,4 @@
 u1:x:SYSTEM_UID_MAX:
+u2:x:777:
+u3:x:778:
+u4:x:779:
index f438ed137ca351ad0c02e96953b508ba881c223b..9eeee5d38777246ffb80281aac3091fde35e48c1 100644 (file)
@@ -1 +1,4 @@
 u1:x:SYSTEM_UID_MAX:SYSTEM_UID_MAX:some gecos:/random/dir:/sbin/nologin
+u2:x:777:777:some gecos:/random/dir:/bin/zsh
+u3:x:778:778::/random/dir2:/bin/bash
+u4:x:779:779::/:/bin/csh
index bc3e182227bb15fe3d496f0058b430bbfb010d6f..cedea9e401946b0a7358144e960e7dc4aa013412 100644 (file)
@@ -1,4 +1,8 @@
-# Trivial smoke test that generate the ID dynamically based on SYSTEM_UID_MAX
+# Test generation of ID dynamically based on SYSTEM_UID_MAX and
+# replacement of all fields up to the login shell.
 #
-#Type Name ID  GECOS        HOMEDIR
-u     u1   -   "some gecos" /random/dir
+#Type Name ID  GECOS        homedir      shell
+u     u1   -   "some gecos" /random/dir  -
+u     u2   777 "some gecos" /random/dir  /bin/zsh
+u     u3   778 -            /random/dir2 /bin/bash
+u     u4   779 -            -            /bin/csh
index f69d27748d11bf6d5ca978437c7ba070df75cd88..bebbab9d2377c1273ab6244fd276d87e403fa79f 100755 (executable)
@@ -7,7 +7,7 @@ TEST_DESCRIPTION="Sysuser-related tests"
 . $TEST_BASE_DIR/test-functions
 
 test_setup() {
-        mkdir -p $TESTDIR/etc  $TESTDIR/usr/lib/sysusers.d $TESTDIR/tmp
+        mkdir -p $TESTDIR/etc/sysusers.d $TESTDIR/usr/lib/sysusers.d $TESTDIR/tmp
 }
 
 preprocess() {
@@ -20,31 +20,85 @@ preprocess() {
     sed "s/SYSTEM_UID_MAX/${SYSTEM_UID_MAX}/g" "$in"
 }
 
+compare() {
+    if ! diff -u $TESTDIR/etc/passwd <(preprocess ${1%.*}.expected-passwd); then
+            echo "**** Unexpected output for $f"
+            exit 1
+    fi
+
+    if ! diff -u $TESTDIR/etc/group <(preprocess ${1%.*}.expected-group); then
+            echo "**** Unexpected output for $f $2"
+            exit 1
+    fi
+}
+
 test_run() {
         # ensure our build of systemd-sysusers is run
         PATH=${BUILD_DIR}:$PATH
 
+        rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
+
         # happy tests
         for f in test-*.input; do
                 echo "*** Running $f"
-                rm -f $TESTDIR/etc/*
+                rm -f $TESTDIR/etc/*{passwd,group,shadow}
                 cp $f $TESTDIR/usr/lib/sysusers.d/test.conf
                 systemd-sysusers --root=$TESTDIR
 
-                if ! diff -u $TESTDIR/etc/passwd <(preprocess ${f%.*}.expected-passwd); then
-                        echo "**** Unexpected output for $f"
-                        exit 1
-                fi
-                if ! diff -u $TESTDIR/etc/group <(preprocess ${f%.*}.expected-group); then
-                        echo "**** Unexpected output for $f"
-                        exit 1
-                fi
+                compare $f ""
         done
 
+        for f in test-*.input; do
+                echo "*** Running $f on stdin"
+                rm -f $TESTDIR/etc/*{passwd,group,shadow}
+                touch $TESTDIR/etc/sysusers.d/test.conf
+                cat $f | systemd-sysusers --root=$TESTDIR -
+
+                compare $f "on stdin"
+        done
+
+        for f in test-*.input; do
+                echo "*** Running $f on stdin with --replace"
+                rm -f $TESTDIR/etc/*{passwd,group,shadow}
+                touch $TESTDIR/etc/sysusers.d/test.conf
+                # this overrides test.conf which is masked on disk
+                cat $f | systemd-sysusers --root=$TESTDIR --replace=/etc/sysusers.d/test.conf -
+                # this should be ignored
+                cat test-1.input | systemd-sysusers --root=$TESTDIR --replace=/usr/lib/sysusers.d/test.conf -
+
+                compare $f "on stdin with --replace"
+        done
+
+        # test --inline
+        echo "*** Testing --inline"
+        rm -f $TESTDIR/etc/*{passwd,group,shadow}
+        # copy a random file to make sure it is ignored
+        cp $f $TESTDIR/etc/sysusers.d/confuse.conf
+        systemd-sysusers --root=$TESTDIR --inline \
+                         "u     u1   222 -     - /bin/zsh" \
+                         "g     g1   111"
+
+        compare inline "(--inline)"
+
+        # test --replace
+        echo "*** Testing --inline with --replace"
+        rm -f $TESTDIR/etc/*{passwd,group,shadow}
+        # copy a random file to make sure it is ignored
+        cp $f $TESTDIR/etc/sysusers.d/confuse.conf
+        systemd-sysusers --root=$TESTDIR \
+                         --inline \
+                         --replace=/etc/sysusers.d/confuse.conf \
+                         "u     u1   222 -     - /bin/zsh" \
+                         "g     g1   111"
+
+        compare inline "(--inline --replace=…)"
+
+        rm -f $TESTDIR/etc/sysusers.d/* $TESTDIR/usr/lib/sysusers.d/*
+
         # tests for error conditions
         for f in unhappy-*.input; do
                 echo "*** Running test $f"
-                rm -f $TESTDIR/etc/*
+                rm -f $TESTDIR/etc/*{passwd,group,shadow}
                 cp $f $TESTDIR/usr/lib/sysusers.d/test.conf
                 systemd-sysusers --root=$TESTDIR 2> /dev/null
                 journalctl -t systemd-sysusers -o cat | tail -n1 > $TESTDIR/tmp/err