]> git.ipfire.org Git - thirdparty/systemd.git/blob - test/TEST-12-ISSUE-3171/test.sh
tests: add test for #3171 (#3206)
[thirdparty/systemd.git] / test / TEST-12-ISSUE-3171 / test.sh
1 #!/bin/bash
2 # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
3 # ex: ts=8 sw=4 sts=4 et filetype=sh
4 TEST_DESCRIPTION="https://github.com/systemd/systemd/issues/3171"
5
6 . $TEST_BASE_DIR/test-functions
7
8 test_run() {
9 run_nspawn || return 1
10 check_result_nspawn || return 1
11 return 0
12 }
13
14 test_setup() {
15 create_empty_image
16 mkdir -p $TESTDIR/root
17 mount ${LOOPDEV}p1 $TESTDIR/root
18
19 # Create what will eventually be our root filesystem onto an overlay
20 (
21 LOG_LEVEL=5
22 eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
23
24 setup_basic_environment
25 dracut_install cat mv stat nc
26
27 # setup the testsuite service
28 cat >$initdir/etc/systemd/system/testsuite.service <<EOF
29 [Unit]
30 Description=Testsuite service
31 After=multi-user.target
32
33 [Service]
34 ExecStart=/test-socket-group.sh
35 Type=oneshot
36 EOF
37
38
39 cat >$initdir/test-socket-group.sh <<'EOF'
40 #!/bin/bash
41 set -x
42 set -e
43 set -o pipefail
44
45 U=/run/systemd/system/test.socket
46 cat <<'EOL' >$U
47 [Unit]
48 Description=Test socket
49 [Socket]
50 Accept=yes
51 ListenStream=/run/test.socket
52 SocketGroup=adm
53 SocketMode=0660
54 EOL
55
56 cat <<'EOL' > /run/systemd/system/test@.service
57 [Unit]
58 Description=Test service
59 [Service]
60 StandardInput=socket
61 ExecStart=/bin/sh -x -c cat
62 EOL
63
64 systemctl start test.socket
65 systemctl is-active test.socket
66 [[ "$(stat --format='%G' /run/test.socket)" == adm ]]
67 echo A | nc -U /run/test.socket
68
69 mv $U ${U}.disabled
70 systemctl daemon-reload
71 systemctl is-active test.socket
72 [[ "$(stat --format='%G' /run/test.socket)" == adm ]]
73 echo B | nc -U /run/test.socket && exit 1
74
75 mv ${U}.disabled $U
76 systemctl daemon-reload
77 systemctl is-active test.socket
78 echo C | nc -U /run/test.socket && exit 1
79 [[ "$(stat --format='%G' /run/test.socket)" == adm ]]
80
81 systemctl restart test.socket
82 systemctl is-active test.socket
83 echo D | nc -U /run/test.socket
84 [[ "$(stat --format='%G' /run/test.socket)" == adm ]]
85
86
87 touch /testok
88 EOF
89
90 chmod 0755 $initdir/test-socket-group.sh
91 setup_testsuite
92 ) || return 1
93
94 setup_nspawn_root
95
96 ddebug "umount $TESTDIR/root"
97 umount $TESTDIR/root
98 }
99
100 test_cleanup() {
101 umount $TESTDIR/root 2>/dev/null
102 [[ $LOOPDEV ]] && losetup -d $LOOPDEV
103 return 0
104 }
105
106 do_test "$@"