]> git.ipfire.org Git - thirdparty/systemd.git/blob - test/TEST-08-ISSUE-2730/test.sh
Merge pull request #2471 from michaelolbrich/transient-mounts
[thirdparty/systemd.git] / test / TEST-08-ISSUE-2730 / 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/2730"
5
6 . $TEST_BASE_DIR/test-functions
7 SKIP_INITRD=yes
8 QEMU_TIMEOUT=180
9 FSTYPE=ext4
10
11 check_result_qemu() {
12 ret=1
13 mkdir -p $TESTDIR/root
14 mount ${LOOPDEV}p1 $TESTDIR/root
15 [[ -e $TESTDIR/root/testok ]] && ret=0
16 [[ -f $TESTDIR/root/failed ]] && cp -a $TESTDIR/root/failed $TESTDIR
17 cp -a $TESTDIR/root/var/log/journal $TESTDIR
18 umount $TESTDIR/root
19 [[ -f $TESTDIR/failed ]] && cat $TESTDIR/failed
20 ls -l $TESTDIR/journal/*/*.journal
21 test -s $TESTDIR/failed && ret=$(($ret+1))
22 [ -n "$TIMED_OUT" ] && ret=$(($ret+1))
23 return $ret
24 }
25
26 test_run() {
27 if run_qemu; then
28 check_result_qemu || return 1
29 else
30 dwarn "can't run QEMU, skipping"
31 fi
32 return 0
33 }
34
35 test_setup() {
36 create_empty_image
37 mkdir -p $TESTDIR/root
38 mount ${LOOPDEV}p1 $TESTDIR/root
39
40 # Create what will eventually be our root filesystem onto an overlay
41 (
42 LOG_LEVEL=5
43 eval $(udevadm info --export --query=env --name=${LOOPDEV}p2)
44
45 setup_basic_environment
46
47 # setup the testsuite service
48 cat >$initdir/etc/systemd/system/testsuite.service <<EOF
49 [Unit]
50 Description=Testsuite service
51 After=multi-user.target
52
53 [Service]
54 ExecStart=/bin/sh -x -c 'mount -o remount,rw /dev/sda1 && echo OK > /testok; systemctl poweroff'
55 Type=oneshot
56 EOF
57
58 rm $initdir/etc/fstab
59 cat >$initdir/etc/systemd/system/-.mount <<EOF
60 [Unit]
61 Before=local-fs.target
62
63 [Mount]
64 What=/dev/sda1
65 Where=/
66 Type=ext4
67 Options=errors=remount-ro,noatime
68
69 [Install]
70 WantedBy=local-fs.target
71 Alias=root.mount
72 EOF
73
74 cat >$initdir/etc/systemd/system/systemd-remount-fs.service <<EOF
75 [Unit]
76 DefaultDependencies=no
77 Conflicts=shutdown.target
78 After=systemd-fsck-root.service
79 Before=local-fs-pre.target local-fs.target shutdown.target
80 Wants=local-fs-pre.target
81
82 [Service]
83 Type=oneshot
84 RemainAfterExit=yes
85 ExecStart=/bin/systemctl reload /
86 EOF
87
88 setup_testsuite
89 ) || return 1
90
91 ln -s /etc/systemd/system/-.mount $initdir/etc/systemd/system/root.mount
92 mkdir -p $initdir/etc/systemd/system/local-fs.target.wants
93 ln -s /etc/systemd/system/-.mount $initdir/etc/systemd/system/local-fs.target.wants/-.mount
94
95 # mask some services that we do not want to run in these tests
96 ln -s /dev/null $initdir/etc/systemd/system/systemd-hwdb-update.service
97 ln -s /dev/null $initdir/etc/systemd/system/systemd-journal-catalog-update.service
98 ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.service
99 ln -s /dev/null $initdir/etc/systemd/system/systemd-networkd.socket
100 ln -s /dev/null $initdir/etc/systemd/system/systemd-resolved.service
101
102 ddebug "umount $TESTDIR/root"
103 umount $TESTDIR/root
104 }
105
106 test_cleanup() {
107 umount $TESTDIR/root 2>/dev/null
108 [[ $LOOPDEV ]] && losetup -d $LOOPDEV
109 return 0
110 }
111
112 do_test "$@"