]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/geom/class/eli/online_resize_test.sh
Implement tests for online expansion:
[FreeBSD/FreeBSD.git] / tests / sys / geom / class / eli / online_resize_test.sh
1 #!/bin/sh
2 # $FreeBSD$
3
4 . $(atf_get_srcdir)/conf.sh
5
6 atf_test_case online_resize cleanup
7 online_resize_head()
8 {
9         atf_set "descr" "online resize of geli providers"
10         atf_set "require.user" "root"
11 }
12 online_resize_body()
13 {
14         geli_test_setup
15
16         (
17                 echo "m 512 none 10485248 1 1 20971008 1 1 31456768 1 1"
18                 echo "m 4096 none 10481664 1 1 20967424 1 1 31453184 1 1"
19                 echo "m 512 HMAC/SHA256 5242368 1 1 10485248 1 1 15728128 1 1"
20                 echo "m 4096 HMAC/SHA256 9318400 1 1 18640896 1 1 27959296 1 1"
21                 echo "p 512 none 11258999068425728 [0-9] 20971520 22517998136851968 [0-9] 41943040 33776997205278208 [0-9] 62914560"
22                 echo "p 4096 none 11258999068422144 [0-9] 2621440 22517998136848384 [0-9] 5242880 33776997205274624 [0-9] 7864320"
23                 echo "p 512 HMAC/SHA256 5629499534212608 [0-9] 20971520 11258999068425728 [0-9] 41943040 16888498602638848 [0-9] 62914560"
24                 echo "p 4096 HMAC/SHA256 10007999171932160 [0-9] 20971520 20015998343868416 [0-9] 41943040 30023997515800576 [0-9] 62914560"
25         ) | while read prefix sector auth esize10 ka10 kt10 esize20 ka20 kt20 esize30 ka30 kt30; do
26                 if [ "${auth}" = "none" ]; then
27                         aalgo=""
28                         eflags="0x200"
29                         dflags="0x0"
30                 else
31                         aalgo="-a ${auth}"
32                         eflags="0x210"
33                         dflags="0x10"
34                 fi
35
36                 if [ "${prefix}" = "m" ]; then
37                         psize10="10485760"
38                         psize20="20971520"
39                         psize30="31457280"
40                 else
41                         psize10="11258999068426240"
42                         psize20="22517998136852480"
43                         psize30="33776997205278720"
44                 fi
45
46                 md=$(attach_md -t malloc -s40${prefix})
47
48                 # Initialise
49                 atf_check -s exit:0 -o ignore gpart create -s GPT ${md}
50                 atf_check -s exit:0 -o ignore gpart add -t freebsd-ufs -s 10${prefix} ${md}
51
52                 echo secret >tmp.key
53
54                 atf_check geli init ${aalgo} -s ${sector} -Bnone -PKtmp.key ${md}p1
55                 # Autoresize is set by default.
56                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
57
58                 atf_check geli configure -R ${md}p1
59                 atf_check -s exit:0 -o match:"flags: ${dflags}$" geli dump ${md}p1
60                 atf_check geli configure -r ${md}p1
61                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
62
63                 atf_check geli init -R ${aalgo} -s ${sector} -Bnone -PKtmp.key ${md}p1
64                 atf_check -s exit:0 -o match:"flags: ${dflags}$" geli dump ${md}p1
65
66                 atf_check geli configure -r ${md}p1
67                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
68                 atf_check geli configure -R ${md}p1
69                 atf_check -s exit:0 -o match:"flags: ${dflags}$" geli dump ${md}p1
70
71                 atf_check geli init ${aalgo} -s ${sector} -Bnone -PKtmp.key ${md}p1
72                 atf_check geli attach -pk tmp.key ${md}p1
73                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
74                 atf_check geli configure -R ${md}p1
75                 atf_check -s exit:0 -o match:"flags: ${dflags}$" geli dump ${md}p1
76                 atf_check -o not-match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
77                 atf_check geli configure -r ${md}p1
78                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
79                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
80
81                 atf_check geli configure -R ${md}p1
82                 atf_check -s exit:0 -o match:"provsize: ${psize10}$" geli dump ${md}p1
83                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
84                 # Autoresize turned off - we lose metadata.
85                 atf_check -s exit:1 -o empty -e ignore geli dump ${md}p1
86                 atf_check geli detach ${md}p1.eli
87                 # When we recover previous size, the metadata should be there.
88                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 10${prefix} ${md}
89                 atf_check -s exit:0 -o match:"flags: ${dflags}$" geli dump ${md}p1
90
91                 atf_check geli configure -r ${md}p1
92                 atf_check geli attach -pk tmp.key ${md}p1
93                 atf_check -s exit:0 -o match:"^[[:space:]]${esize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
94                 atf_check -s exit:0 -o match:"^KeysAllocated: ${ka10}$" geli list ${md}p1.eli
95                 atf_check -s exit:0 -o match:"^KeysTotal: ${kt10}$" geli list ${md}p1.eli
96
97                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
98                 atf_check -s exit:0 -o match:"provsize: ${psize20}$" geli dump ${md}p1
99                 atf_check -s exit:0 -o match:"^[[:space:]]${esize20}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
100                 atf_check -s exit:0 -o match:"^KeysAllocated: ${ka20}$" geli list ${md}p1.eli
101                 atf_check -s exit:0 -o match:"^KeysTotal: ${kt20}$" geli list ${md}p1.eli
102                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
103                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
104                 if [ "${prefix}" = "m" ]; then
105                         atf_check -s exit:1 -o empty -e match:"^${esize20} bytes transferred " dd if=/dev/random of=/dev/${md}p1.eli bs=1m
106                         atf_check -s exit:0 -o empty -e match:"^${esize20} bytes transferred " dd if=/dev/${md}p1.eli of=/dev/null bs=1m
107                 fi
108
109                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 30${prefix} ${md}
110                 atf_check -s exit:0 -o match:"provsize: ${psize30}$" geli dump ${md}p1
111                 atf_check -s exit:0 -o match:"^[[:space:]]${esize30}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
112                 atf_check -s exit:0 -o match:"^KeysAllocated: ${ka30}$" geli list ${md}p1.eli
113                 atf_check -s exit:0 -o match:"^KeysTotal: ${kt30}$" geli list ${md}p1.eli
114                 atf_check -s exit:0 -o match:"flags: ${eflags}$" geli dump ${md}p1
115                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
116                 if [ "${prefix}" = "m" ]; then
117                         atf_check -s exit:1 -o empty -e match:"^${esize30} bytes transferred " dd if=/dev/random of=/dev/${md}p1.eli bs=1m
118                         atf_check -s exit:0 -o empty -e match:"^${esize30} bytes transferred " dd if=/dev/${md}p1.eli of=/dev/null bs=1m
119                 fi
120
121                 atf_check geli detach ${md}p1.eli
122
123                 # Make sure that the old metadata is removed.
124                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
125                 atf_check -s exit:1 -o empty -e ignore geli dump ${md}p1
126                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 10${prefix} ${md}
127                 atf_check -s exit:1 -o empty -e ignore geli dump ${md}p1
128
129                 # Test geli with onetime keys.
130                 if [ "${auth}" = "none" ]; then
131                         osize10="${psize10}"
132                         osize20="${psize20}"
133                         osize30="${psize30}"
134                 else
135                         osize10="${esize10}"
136                         osize20="${esize20}"
137                         osize30="${esize30}"
138                         if [ "${sector}" -eq 512 ]; then
139                                 osize10=$((osize10+sector))
140                                 osize20=$((osize20+sector))
141                                 osize30=$((osize30+sector))
142                         fi
143                 fi
144                 atf_check geli onetime ${aalgo} -s ${sector} ${md}p1
145                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
146                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
147                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
148                 atf_check -s exit:0 -o match:"^[[:space:]]${osize20}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
149                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 30${prefix} ${md}
150                 atf_check -s exit:0 -o match:"^[[:space:]]${osize30}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
151                 atf_check geli detach ${md}p1.eli
152
153                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 10${prefix} ${md}
154                 atf_check geli onetime -R ${aalgo} -s ${sector} ${md}p1
155                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
156                 atf_check -o not-match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
157                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
158                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
159                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 30${prefix} ${md}
160                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
161                 atf_check geli detach ${md}p1.eli
162
163                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 10${prefix} ${md}
164                 atf_check geli onetime ${aalgo} -s ${sector} ${md}p1
165                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
166                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
167                 atf_check geli configure -R ${md}p1
168                 atf_check -o not-match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
169                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 20${prefix} ${md}
170                 atf_check -s exit:0 -o match:"^[[:space:]]${osize10}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
171                 atf_check geli configure -r ${md}p1
172                 atf_check -s exit:0 -o match:'^Flags: .*AUTORESIZE' geli list ${md}p1.eli
173                 atf_check -s exit:0 -o match:resized gpart resize -i 1 -s 30${prefix} ${md}
174                 atf_check -s exit:0 -o match:"^[[:space:]]${osize30}[[:space:]]+# mediasize in bytes" diskinfo -v ${md}p1.eli
175                 atf_check geli detach ${md}p1.eli
176
177                 # Cleanup.
178                 atf_check -s exit:0 -o match:deleted gpart delete -i 1 ${md}
179                 atf_check -s exit:0 -o match:destroyed gpart destroy ${md}
180                 atf_check -s exit:0 -o ignore mdconfig -d -u ${md}
181         done
182 }
183 online_resize_cleanup()
184 {
185         if [ -f "$TEST_MDS_FILE" ]; then
186                 while read md; do
187                         [ -c /dev/${md}p1.eli ] && geli detach ${md}p1.eli
188                         mdconfig -d -u ${md} 2>/dev/null
189                 done < $TEST_MDS_FILE
190         fi
191 }
192
193 atf_init_test_cases()
194 {
195         atf_add_test_case online_resize
196 }