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