tests: Rename capitests -> tests/c-api.
[libguestfs.git] / regressions / test-mdadm.sh
1 #!/bin/bash -
2 # libguestfs
3 # Copyright (C) 2011 Red Hat Inc.
4 #
5 # This program is free software; you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation; either version 2 of the License, or
8 # (at your option) any later version.
9 #
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 # GNU General Public License for more details.
14 #
15 # You should have received a copy of the GNU General Public License
16 # along with this program; if not, write to the Free Software
17 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18
19 # Test guestfish md-create and md-detail commands.
20
21 set -e
22
23 rm -f md-test1.img md-test2.img md-test3.img md-test4.img
24
25 ../fish/guestfish <<EOF
26 # Add four empty disks
27 sparse md-test1.img 100M
28 sparse md-test2.img 100M
29 sparse md-test3.img 100M
30 sparse md-test4.img 100M
31 run
32
33 # Create lots of test partitions.
34 part-init /dev/sda mbr
35 part-add /dev/sda p 4096 8191
36 part-add /dev/sda p 8192 12287
37 part-add /dev/sda p 12288 16383
38 part-add /dev/sda p 16384 20479
39 part-init /dev/sdb mbr
40 part-add /dev/sdb p 4096 8191
41 part-add /dev/sdb p 8192 12287
42 part-add /dev/sdb p 12288 16383
43 part-add /dev/sdb p 16384 20479
44 part-init /dev/sdc mbr
45 part-add /dev/sdc p 4096 8191
46 part-add /dev/sdc p 8192 12287
47 part-add /dev/sdc p 12288 16383
48 part-add /dev/sdc p 16384 20479
49 part-init /dev/sdd mbr
50 part-add /dev/sdd p 4096 8191
51 part-add /dev/sdd p 8192 12287
52 part-add /dev/sdd p 12288 16383
53 part-add /dev/sdd p 16384 20479
54
55 # RAID 1.
56 md-create r1t1 "/dev/sda1 /dev/sdb1"
57 md-create r1t2 "/dev/sdc1 /dev/sdd1" chunk:65536
58
59 # RAID 5.
60 md-create r5t1 "/dev/sda2 /dev/sdb2 /dev/sdc2 /dev/sdd2" \
61   missingbitmap:0x10 nrdevices:4 spare:1 level:5
62
63 md-create r5t2 "/dev/sda3 /dev/sdb3" missingbitmap:0x1 level:5
64
65 md-create r5t3 "/dev/sdc3 /dev/sdd3" \
66   missingbitmap:0x6 nrdevices:2 spare:2 level:5
67
68 # Make some filesystems and put some content on the
69 # new RAID devices to see if they work.
70 mkfs ext2 /dev/md/r1t1
71 mkfs ext2 /dev/md/r1t2
72 mkfs ext2 /dev/md/r5t1
73 mkfs ext2 /dev/md/r5t2
74 mkfs ext2 /dev/md/r5t3
75
76 mkmountpoint /r1t1
77 mount /dev/md/r1t1 /r1t1
78 mkmountpoint /r1t2
79 mount /dev/md/r1t2 /r1t2
80 mkmountpoint /r5t1
81 mount /dev/md/r5t1 /r5t1
82 mkmountpoint /r5t2
83 mount /dev/md/r5t2 /r5t2
84 mkmountpoint /r5t3
85 mount /dev/md/r5t3 /r5t3
86
87 touch /r1t1/foo
88 mkdir /r1t2/bar
89 write /r5t1/foo "hello"
90 write /r5t2/bar "goodbye"
91 write /r5t3/baz "testing"
92
93 EOF
94
95 eval `../fish/guestfish --listen`
96 ../fish/guestfish --remote add-ro md-test1.img
97 ../fish/guestfish --remote add-ro md-test2.img
98 ../fish/guestfish --remote add-ro md-test3.img
99 ../fish/guestfish --remote add-ro md-test4.img
100 ../fish/guestfish --remote run
101
102 for md in `../fish/guestfish --remote list-md-devices`; do
103   ../fish/guestfish --remote md-detail "${md}" > md-detail.out
104
105   sed 's/:\s*/=/' md-detail.out > md-detail.out.sh
106   . md-detail.out.sh
107   rm -f md-detail.out.sh
108
109   error=0
110   case "$name" in
111     *:r1t1)
112       [ "$level" == "raid1" ] || error=1
113       [ "$devices" == "2" ] || error=1
114       ;;
115
116     *:r1t2)
117       [ "$level" == "raid1" ] || error=1
118       [ "$devices" == "2" ] || error=1
119       ;;
120
121     *:r5t1)
122       [ "$level" == "raid5" ] || error=1
123       [ "$devices" == "4" ] || error=1
124       ;;
125
126     *:r5t2)
127       [ "$level" == "raid5" ] || error=1
128       [ "$devices" == "3" ] || error=1
129       ;;
130
131     *:r5t3)
132       [ "$level" == "raid5" ] || error=1
133       [ "$devices" == "2" ] || error=1
134       ;;
135
136     *)
137       error=1
138   esac
139
140   [[ "$uuid" =~ ([0-9a-f]{8}:){3}[0-9a-f]{8} ]] || error=1
141   [ ! -z "$metadata" ] || error=1
142
143   if [ "$error" == "1" ]; then
144     echo "$0: Unexpected output from md-detail for device $md"
145     cat md-detail.out
146     ../fish/guestfish --remote exit
147     exit 1
148   fi
149 done
150
151 ../fish/guestfish --remote exit
152
153 eval `../fish/guestfish --listen`
154 ../fish/guestfish --remote add-ro md-test1.img
155 ../fish/guestfish --remote add-ro md-test2.img
156 ../fish/guestfish --remote add-ro md-test3.img
157 ../fish/guestfish --remote add-ro md-test4.img
158 ../fish/guestfish --remote run
159
160 for md in `../fish/guestfish --remote list-md-devices`; do
161   ../fish/guestfish --remote md-stop "${md}"
162 done
163
164 ../fish/guestfish --remote exit
165
166 rm -f md-detail.out md-test1.img md-test2.img md-test3.img md-test4.img