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