4 . $(atf_get_srcdir)/conf.sh
6 atf_test_case online_resize cleanup
9 atf_set "descr" "online resize of geli providers"
10 atf_set "require.user" "root"
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
36 if [ "${prefix}" = "m" ]; then
41 psize10="11258999068426240"
42 psize20="22517998136852480"
43 psize30="33776997205278720"
46 md=$(attach_md -t malloc -s40${prefix})
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}
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
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
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
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
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
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
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
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
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
121 atf_check geli detach ${md}p1.eli
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
129 # Test geli with onetime keys.
130 if [ "${auth}" = "none" ]; then
138 if [ "${sector}" -eq 512 ]; then
139 osize10=$((osize10+sector))
140 osize20=$((osize20+sector))
141 osize30=$((osize30+sector))
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
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
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
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}
183 online_resize_cleanup()
185 if [ -f "$TEST_MDS_FILE" ]; then
187 [ -c /dev/${md}p1.eli ] && geli detach ${md}p1.eli
188 mdconfig -d -u ${md} 2>/dev/null
189 done < $TEST_MDS_FILE
193 atf_init_test_cases()
195 atf_add_test_case online_resize