]> git.ipfire.org Git - thirdparty/dracut.git/blame - test/TEST-35-ISCSI-MULTI/test.sh
fix(TEST NBD): shellcheck
[thirdparty/dracut.git] / test / TEST-35-ISCSI-MULTI / test.sh
CommitLineData
66a3d405 1#!/bin/bash
a3f73298
HH
2
3if [[ $NM ]]; then
4 USE_NETWORK="network-manager"
5 OMIT_NETWORK="network-legacy"
6else
7 USE_NETWORK="network-legacy"
8 OMIT_NETWORK="network-manager"
9fi
10
11TEST_DESCRIPTION="root filesystem over multiple iSCSI with $USE_NETWORK"
66a3d405
HH
12
13KVERSION=${KVERSION-$(uname -r)}
14
0f294d90 15#DEBUGFAIL="loglevel=1"
66a3d405 16#DEBUGFAIL="rd.shell rd.break rd.debug loglevel=7 "
0f294d90 17DEBUGFAIL="rd.debug loglevel=7 "
66a3d405
HH
18#SERVER_DEBUG="rd.debug loglevel=7"
19#SERIAL="tcp:127.0.0.1:9999"
20
21run_server() {
22 # Start server first
23 echo "iSCSI TEST SETUP: Starting DHCP/iSCSI server"
24
25 $testdir/run-qemu \
26 -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \
27 -drive format=raw,index=1,media=disk,file=$TESTDIR/root.ext3 \
28 -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \
29 -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \
66a3d405
HH
30 ${SERIAL:+-serial "$SERIAL"} \
31 ${SERIAL:--serial file:"$TESTDIR"/server.log} \
32 -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
33 -net nic,macaddr=52:54:00:12:34:57,model=e1000 \
ffbd37d7 34 -net socket,listen=127.0.0.1:12331 \
0f62da04 35 -append "panic=1 systemd.crash_reboot root=/dev/sda2 rootfstype=ext3 rw console=ttyS0,115200n81 selinux=0 $SERVER_DEBUG" \
66a3d405
HH
36 -initrd $TESTDIR/initramfs.server \
37 -pidfile $TESTDIR/server.pid -daemonize || return 1
4bd0ab61 38 chmod 644 $TESTDIR/server.pid || return 1
66a3d405
HH
39
40 # Cleanup the terminal if we have one
41 tty -s && stty sane
42
3aae122c 43 if ! [[ $SERIAL ]]; then
9a52c3fd 44 while :; do
3aae122c 45 grep Serving "$TESTDIR"/server.log && break
a3f73298
HH
46 echo "Waiting for the server to startup"
47 tail "$TESTDIR"/server.log
3aae122c
HH
48 sleep 1
49 done
50 else
51 echo Sleeping 10 seconds to give the server a head start
52 sleep 10
53 fi
66a3d405
HH
54}
55
56run_client() {
9a52c3fd
HH
57 local test_name=$1
58 shift
66a3d405
HH
59 echo "CLIENT TEST START: $test_name"
60
61 dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1
62
63 $testdir/run-qemu \
64 -drive format=raw,index=0,media=disk,file=$TESTDIR/client.img \
66a3d405
HH
65 -net nic,macaddr=52:54:00:12:34:00,model=e1000 \
66 -net nic,macaddr=52:54:00:12:34:01,model=e1000 \
ffbd37d7 67 -net socket,connect=127.0.0.1:12331 \
7934c6f9 68 -append "panic=1 systemd.crash_reboot rw rd.auto rd.retry=50 console=ttyS0,115200n81 selinux=0 rd.debug=0 rd.shell=0 $DEBUGFAIL $*" \
66a3d405 69 -initrd $TESTDIR/initramfs.testing
d85c71fb 70 if ! grep -U --binary-files=binary -F -m 1 -q iscsi-OK $TESTDIR/client.img; then
2f78bafa
HH
71 echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
72 return 1
66a3d405
HH
73 fi
74
75 echo "CLIENT TEST END: $test_name [OK]"
76 return 0
77}
78
79do_test_run() {
80 initiator=$(iscsi-iname)
81 run_client "netroot=iscsi target1 target2" \
9a52c3fd
HH
82 "root=LABEL=sysroot" \
83 "ip=192.168.50.101:::255.255.255.0::ens2:off" \
84 "ip=192.168.51.101:::255.255.255.0::ens3:off" \
85 "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
86 "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
87 "rd.iscsi.initiator=$initiator" \
66a3d405
HH
88 || return 1
89
28a68f1f 90 run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0" \
9a52c3fd
HH
91 "root=LABEL=sysroot" \
92 "ip=192.168.50.101:::255.255.255.0::ens2:off" \
93 "ip=192.168.51.101:::255.255.255.0::ens3:off" \
94 "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
95 "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
96 "rd.iscsi.firmware" \
97 "rd.iscsi.initiator=$initiator" \
98 "rd.iscsi.waitnet=0" \
28a68f1f
HH
99 || return 1
100
101 run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
9a52c3fd
HH
102 "root=LABEL=sysroot" \
103 "ip=192.168.50.101:::255.255.255.0::ens2:off" \
104 "ip=192.168.51.101:::255.255.255.0::ens3:off" \
105 "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
106 "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
107 "rd.iscsi.firmware" \
108 "rd.iscsi.initiator=$initiator" \
109 "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
28a68f1f
HH
110 || return 1
111
112 run_client "netroot=iscsi target1 target2 rd.iscsi.waitnet=0 rd.iscsi.testroute=0 default GW" \
9a52c3fd
HH
113 "root=LABEL=sysroot" \
114 "ip=192.168.50.101::192.168.50.1:255.255.255.0::ens2:off" \
115 "ip=192.168.51.101::192.168.51.1:255.255.255.0::ens3:off" \
116 "netroot=iscsi:192.168.51.1::::iqn.2009-06.dracut:target1" \
117 "netroot=iscsi:192.168.50.1::::iqn.2009-06.dracut:target2" \
118 "rd.iscsi.firmware" \
119 "rd.iscsi.initiator=$initiator" \
120 "rd.iscsi.waitnet=0 rd.iscsi.testroute=0" \
28a68f1f 121 || return 1
66a3d405
HH
122
123 echo "All tests passed [OK]"
124 return 0
125}
126
127test_run() {
128 if ! run_server; then
129 echo "Failed to start server" 1>&2
130 return 1
131 fi
132 do_test_run
133 ret=$?
134 if [[ -s $TESTDIR/server.pid ]]; then
4bd0ab61 135 kill -TERM $(cat $TESTDIR/server.pid)
66a3d405
HH
136 rm -f -- $TESTDIR/server.pid
137 fi
138 return $ret
139}
140
141test_setup() {
9a52c3fd 142 if ! command -v tgtd &> /dev/null || ! command -v tgtadm &> /dev/null; then
66a3d405
HH
143 echo "Need tgtd and tgtadm from scsi-target-utils"
144 return 1
145 fi
146
147 # Create the blank file to use as a root filesystem
1149ed2a 148 dd if=/dev/zero of=$TESTDIR/root.ext3 bs=1M count=180
a22ab24d
HH
149 dd if=/dev/zero of=$TESTDIR/iscsidisk2.img bs=1M count=90
150 dd if=/dev/zero of=$TESTDIR/iscsidisk3.img bs=1M count=90
66a3d405
HH
151
152 kernel=$KVERSION
153 # Create what will eventually be our root filesystem onto an overlay
a3f73298 154 rm -rf -- $TESTDIR/overlay
66a3d405
HH
155 (
156 export initdir=$TESTDIR/overlay/source
157 . $basedir/dracut-init.sh
158 (
159 cd "$initdir"
160 mkdir -p -- dev sys proc etc var/run tmp
161 mkdir -p root usr/bin usr/lib usr/lib64 usr/sbin
162 for i in bin sbin lib lib64; do
163 ln -sfnr usr/$i $i
164 done
165 mkdir -p -- var/lib/nfs/rpc_pipefs
166 )
167 inst_multiple sh shutdown poweroff stty cat ps ln ip \
9a52c3fd 168 mount dmesg mkdir cp ping grep setsid dd
66a3d405
HH
169 for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
170 [ -f ${_terminfodir}/l/linux ] && break
171 done
172 inst_multiple -o ${_terminfodir}/l/linux
173 inst_simple /etc/os-release
174 inst ./client-init.sh /sbin/init
175 cp -a /etc/ld.so.conf* $initdir/etc
4bd0ab61 176 ldconfig -r "$initdir"
66a3d405
HH
177 )
178
179 # second, install the files needed to make the root filesystem
180 (
181 export initdir=$TESTDIR/overlay
182 . $basedir/dracut-init.sh
9ca53063 183 inst_multiple sfdisk mkfs.ext3 poweroff cp umount setsid dd
0f62da04 184 inst_hook initqueue 01 ./create-client-root.sh
66a3d405
HH
185 inst_hook initqueue/finished 01 ./finished-false.sh
186 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
187 )
188
189 # create an initramfs that will create the target root filesystem.
190 # We do it this way so that we do not risk trashing the host mdraid
191 # devices, volume groups, encrypted partitions, etc.
192 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
9a52c3fd
HH
193 -m "dash crypt lvm mdraid udev-rules base rootfs-block fs-lib kernel-modules qemu" \
194 -d "piix ide-gd_mod ata_piix ext3 sd_mod" \
195 --no-hostonly-cmdline -N \
196 -f $TESTDIR/initramfs.makeroot $KVERSION || return 1
66a3d405
HH
197 rm -rf -- $TESTDIR/overlay
198
66a3d405 199 # Need this so kvm-qemu will boot (needs non-/dev/zero local disk)
a22ab24d 200 if ! dd if=/dev/zero of=$TESTDIR/client.img bs=1M count=1; then
66a3d405
HH
201 echo "Unable to make client sdb image" 1>&2
202 return 1
203 fi
204 # Invoke KVM and/or QEMU to actually create the target filesystem.
205 $testdir/run-qemu \
206 -drive format=raw,index=0,media=disk,file=$TESTDIR/root.ext3 \
207 -drive format=raw,index=1,media=disk,file=$TESTDIR/client.img \
208 -drive format=raw,index=2,media=disk,file=$TESTDIR/iscsidisk2.img \
209 -drive format=raw,index=3,media=disk,file=$TESTDIR/iscsidisk3.img \
66a3d405 210 -append "root=/dev/fakeroot rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
9a52c3fd 211 -initrd $TESTDIR/initramfs.makeroot || return 1
d85c71fb 212 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/client.img || return 1
66a3d405 213 rm -- $TESTDIR/client.img
66a3d405
HH
214
215 # Make server root
0f62da04
HH
216 echo "MAKE SERVER ROOT"
217
a22ab24d 218 dd if=/dev/zero of=$TESTDIR/server.ext3 bs=1M count=60
66a3d405
HH
219
220 kernel=$KVERSION
a3f73298 221 rm -rf -- $TESTDIR/overlay
66a3d405 222 (
0f62da04
HH
223 mkdir -p $TESTDIR/overlay/source
224 export initdir=$TESTDIR/overlay/source
66a3d405
HH
225 . $basedir/dracut-init.sh
226 (
9a52c3fd 227 cd "$initdir"
66a3d405
HH
228 mkdir -p dev sys proc etc var/run tmp var/lib/dhcpd /etc/iscsi
229 )
230 inst /etc/passwd /etc/passwd
231 inst_multiple sh ls shutdown poweroff stty cat ps ln ip \
9a52c3fd
HH
232 dmesg mkdir cp ping \
233 modprobe tcpdump setsid \
234 /etc/services sleep mount chmod
66a3d405
HH
235 inst_multiple tgtd tgtadm
236 for _terminfodir in /lib/terminfo /etc/terminfo /usr/share/terminfo; do
237 [ -f ${_terminfodir}/l/linux ] && break
238 done
239 inst_multiple -o ${_terminfodir}/l/linux
240 instmods iscsi_tcp crc32c ipv6
241 [ -f /etc/netconfig ] && inst_multiple /etc/netconfig
9a52c3fd 242 type -P dhcpd > /dev/null && inst_multiple dhcpd
66a3d405
HH
243 [ -x /usr/sbin/dhcpd3 ] && inst /usr/sbin/dhcpd3 /usr/sbin/dhcpd
244 inst_simple /etc/os-release
245 inst ./server-init.sh /sbin/init
246 inst ./hosts /etc/hosts
247 inst ./dhcpd.conf /etc/dhcpd.conf
248 inst_multiple /etc/nsswitch.conf /etc/rpc /etc/protocols
249 inst /etc/group /etc/group
250
251 cp -a /etc/ld.so.conf* $initdir/etc
4bd0ab61 252 ldconfig -r "$initdir"
66a3d405
HH
253 dracut_kernel_post
254 )
0f62da04
HH
255 # second, install the files needed to make the root filesystem
256 (
257 export initdir=$TESTDIR/overlay
258 . $basedir/dracut-init.sh
259 inst_multiple sfdisk mkfs.ext3 poweroff cp umount sync dd
260 inst_hook initqueue 01 ./create-server-root.sh
261 inst_hook initqueue/finished 01 ./finished-false.sh
262 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
263 )
66a3d405 264
0f62da04
HH
265 # create an initramfs that will create the target root filesystem.
266 # We do it this way so that we do not risk trashing the host mdraid
267 # devices, volume groups, encrypted partitions, etc.
66a3d405 268 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
9a52c3fd
HH
269 -m "dash udev-rules base rootfs-block fs-lib kernel-modules fs-lib qemu" \
270 -d "piix ide-gd_mod ata_piix ext3 sd_mod" \
271 --nomdadmconf \
272 --no-hostonly-cmdline -N \
273 -f $TESTDIR/initramfs.makeroot $KVERSION || return 1
a3f73298 274
0f62da04
HH
275 # Invoke KVM and/or QEMU to actually create the target filesystem.
276 $testdir/run-qemu \
277 -drive format=raw,index=0,media=disk,file=$TESTDIR/server.ext3 \
278 -append "root=/dev/dracut/root rw rootfstype=ext3 quiet console=ttyS0,115200n81 selinux=0" \
9a52c3fd 279 -initrd $TESTDIR/initramfs.makeroot || return 1
d85c71fb 280 grep -U --binary-files=binary -F -m 1 -q dracut-root-block-created $TESTDIR/server.ext3 || return 1
a3f73298 281 rm -rf -- $TESTDIR/overlay
0f62da04
HH
282
283 # Make an overlay with needed tools for the test harness
a3f73298
HH
284 (
285 export initdir=$TESTDIR/overlay
286 . $basedir/dracut-init.sh
287 inst_multiple poweroff shutdown
288 inst_hook shutdown-emergency 000 ./hard-off.sh
289 inst_hook emergency 000 ./hard-off.sh
290 inst_simple ./99-idesymlinks.rules /etc/udev/rules.d/99-idesymlinks.rules
291 )
0f62da04
HH
292
293 # Make server's dracut image
294 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
9a52c3fd
HH
295 -a "dash udev-rules base rootfs-block fs-lib debug kernel-modules" \
296 -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod e1000 drbg" \
297 --no-hostonly-cmdline -N \
298 -f $TESTDIR/initramfs.server $KVERSION || return 1
0f62da04
HH
299
300 # Make client's dracut image
a3f73298 301 $basedir/dracut.sh -l -i $TESTDIR/overlay / \
9a52c3fd
HH
302 -o "dash plymouth dmraid nfs ${OMIT_NETWORK}" \
303 -a "debug ${USE_NETWORK}" \
304 -d "af_packet piix ide-gd_mod ata_piix ext3 sd_mod" \
305 --no-hostonly-cmdline -N \
306 -f $TESTDIR/initramfs.testing $KVERSION || return 1
a3f73298
HH
307
308 rm -rf -- $TESTDIR/overlay
66a3d405
HH
309}
310
311test_cleanup() {
312 if [[ -s $TESTDIR/server.pid ]]; then
4bd0ab61 313 kill -TERM $(cat $TESTDIR/server.pid)
66a3d405
HH
314 rm -f -- $TESTDIR/server.pid
315 fi
316}
317
318. $testdir/test-functions