]> git.ipfire.org Git - thirdparty/dracut.git/blame - test/TEST-40-NBD/test.sh
NBD: add test suite
[thirdparty/dracut.git] / test / TEST-40-NBD / test.sh
CommitLineData
9ecbe2e4
DD
1#!/bin/bash
2TEST_DESCRIPTION="root filesystem on NBD"
3
4KVERSION=${KVERSION-$(uname -r)}
5
6# Uncomment this to debug failures
7#DEBUGFAIL="rdinitdebug rdnetdebug rdbreak"
8
9run_server() {
10 # Start server first
11 echo "NBD TEST SETUP: Starting DHCP/NFS server"
12
13 $testdir/run-qemu -hda server.ext2 -hdb nbd.ext2 -m 512M -nographic \
14 -net nic,macaddr=52:54:00:12:34:56,model=e1000 \
15 -net socket,mcast=230.0.0.1:1234 \
16 -serial udp:127.0.0.1:9999 \
17 -kernel /boot/vmlinuz-$KVERSION \
18 -append "root=/dev/sda rw quiet console=ttyS0,115200n81" \
19 -initrd initramfs.server -pidfile server.pid -daemonize || return 1
20 sudo chmod 644 server.pid || return 1
21
22 # Cleanup the terminal if we have one
23 tty -s && stty sane
24
25 echo Sleeping 10 seconds to give the server a head start
26 sleep 10
27}
28
29client_test() {
30 local test_name="$1"
31 local mac=$2
32 local cmdline="$3"
33
34 echo "CLIENT TEST START: $test_name"
35
36 # Clear out the flags for each test
37 if ! dd if=/dev/zero of=flag.img bs=1M count=1; then
38 echo "Unable to make client sda image" 1>&2
39 return 1
40 fi
41
42 $testdir/run-qemu -hda flag.img -m 512M -nographic \
43 -net nic,macaddr=$mac,model=e1000 \
44 -net socket,mcast=230.0.0.1:1234 \
45 -kernel /boot/vmlinuz-$KVERSION \
46 -append "$cmdline $DEBUGFAIL ro quiet console=ttyS0,115200n81" \
47 -initrd initramfs.testing
48
49 if [[ $? -ne 0 ]] || ! grep -m 1 -q nbd-OK flag.img; then
50 echo "CLIENT TEST END: $test_name [FAILED - BAD EXIT]"
51 return 1
52 fi
53
54 echo "CLIENT TEST END: $test_name [OK]"
55}
56
57test_run() {
58 if ! run_server; then
59 echo "Failed to start server" 1>&2
60 return 1
61 fi
62
63 client_test "NBD root=nbd:..." 52:54:00:12:34:00 \
64 "root=nbd:192.168.50.1:2000" || return 1
65
66 client_test "NBD root=nbd nbdroot=srv:port" 52:54:00:12:34:00 \
67 "root=nbd nbdroot=192.168.50.1:2000" || return 1
68
69 client_test "NBD root=dhcp nbdroot=srv:port" 52:54:00:12:34:00 \
70 "root=dhcp nbdroot=192.168.50.1:2000" || return 1
71
72 client_test "NBD root=nbd nbdroot=srv,port" 52:54:00:12:34:00 \
73 "root=nbd nbdroot=192.168.50.1,2000" || return 1
74
75 client_test "NBD root=dhcp nbdroot=srv,port" 52:54:00:12:34:00 \
76 "root=dhcp nbdroot=192.168.50.1,2000" || return 1
77
78 client_test "NBD root=dhcp DHCP root-path nbd:srv:port" 52:54:00:12:34:01 \
79 "root=dhcp" || return 1
80}
81
82make_client_root() {
83 dd if=/dev/zero of=nbd.ext2 bs=1M count=30
84 mke2fs -F nbd.ext2
85 mkdir mnt
86 sudo mount -o loop nbd.ext2 mnt
87
88 kernel=$KVERSION
89 (
90 initdir=mnt
91 . $basedir/dracut-functions
92 dracut_install sh ls shutdown poweroff stty cat ps ln ip \
93 /lib/terminfo/l/linux dmesg mkdir cp ping
94 inst ./client-init /sbin/init
95 (
96 cd "$initdir";
97 mkdir -p dev sys proc etc var/run tmp
98 )
99 inst /etc/nsswitch.conf /etc/nsswitch.conf
100 inst /etc/passwd /etc/passwd
101 inst /etc/group /etc/group
102 for i in /lib*/libnss_files**;do
103 inst_library $i
104 done
105
106 ldconfig -n -r "$initdir" /lib* /usr/lib*
107 )
108
109 sudo umount mnt
110 rm -fr mnt
111}
112
113make_server_root() {
114 dd if=/dev/zero of=server.ext2 bs=1M count=30
115 mke2fs -F server.ext2
116 mkdir mnt
117 sudo mount -o loop server.ext2 mnt
118
119 kernel=$KVERSION
120 (
121 initdir=mnt
122 . $basedir/dracut-functions
123 dracut_install sh ls shutdown poweroff stty cat ps ln ip \
124 /lib/terminfo/l/linux dmesg mkdir cp ping grep dhcpd \
125 sleep nbd-server
126 inst ./server-init /sbin/init
127 inst ./hosts /etc/hosts
128 inst ./dhcpd.conf /etc/dhcpd.conf
129 (
130 cd "$initdir";
131 mkdir -p dev sys proc etc var/run var/lib/dhcpd tmp
132 )
133 inst /etc/nsswitch.conf /etc/nsswitch.conf
134 inst /etc/passwd /etc/passwd
135 inst /etc/group /etc/group
136 for i in /lib*/libnss_files**;do
137 inst_library $i
138 done
139
140 ldconfig -n -r "$initdir" /lib* /usr/lib*
141 )
142
143 sudo umount mnt
144 rm -fr mnt
145}
146
147test_setup() {
148 make_client_root || return 1
149 make_server_root || return 1
150
151 # Make the test image
152 (
153 initdir=overlay
154 . $basedir/dracut-functions
155 dracut_install poweroff shutdown
156 inst_simple ./hard-off.sh /emergency/01hard-off.sh
157 )
158
159 sudo $basedir/dracut -l -i overlay / \
160 -m "dash crypt lvm mdraid udev-rules rootfs-block base debug" \
161 -d "ata_piix ext2 sd_mod e1000" \
162 -f initramfs.server $KVERSION || return 1
163
164 sudo $basedir/dracut -l -i overlay / \
165 -m "dash crypt lvm mdraid udev-rules base rootfs-block nbd debug" \
166 -d "ata_piix ext2 sd_mod e1000" \
167 -f initramfs.testing $KVERSION || return 1
168}
169
170test_cleanup() {
171 if [[ -s server.pid ]]; then
172 sudo kill -TERM $(cat server.pid)
173 rm -f server.pid
174 fi
175 rm -fr overlay mnt
176 rm -f flag.img server.ext2 nbd.ext2 initramfs.server initramfs.testing
177}
178
179. $testdir/test-functions