1#!/bin/sh
2# $FreeBSD: stable/11/tests/sys/geom/class/eli/resize_test.sh 345394 2019-03-21 22:23:52Z asomers $
3
4. $(atf_get_srcdir)/conf.sh
5
6atf_test_case resize cleanup
7resize_head()
8{
9	atf_set "descr" "geli resize will resize a geli provider"
10	atf_set "require.user" "root"
11}
12resize_body()
13{
14	geli_test_setup
15
16	BLK=512
17	BLKS_PER_MB=2048
18
19	md=$(attach_md -t malloc -s40m)
20
21	# Initialise
22	atf_check -s exit:0 -o ignore gpart create -s BSD ${md}
23	atf_check -s exit:0 -o ignore gpart add -t freebsd-ufs -s 10m ${md}
24
25	echo secret >tmp.key
26	atf_check geli init -Bnone -PKtmp.key ${md}a
27	atf_check geli attach -pk tmp.key ${md}a
28
29	atf_check -s exit:0 -o ignore newfs -U ${md}a.eli
30	atf_check -s exit:7 -o ignore fsck_ffs -Ffy ${md}a.eli
31
32	# Doing a backup, resize & restore must be forced (with -f) as geli
33	# verifies that the provider size in the metadata matches the consumer.
34
35	atf_check geli backup ${md}a tmp.meta
36	atf_check geli detach ${md}a.eli
37	atf_check -s exit:0 -o match:resized gpart resize -i1 -s 20m ${md}
38	atf_check -s not-exit:0 -e ignore geli attach -pktmp.key ${md}a
39	atf_check -s not-exit:0 -e ignore geli restore tmp.meta ${md}a
40	atf_check geli restore -f tmp.meta ${md}a
41	atf_check geli attach -pktmp.key ${md}a
42	atf_check -s exit:0 -o ignore growfs -y ${md}a.eli
43	atf_check -s exit:7 -o ignore fsck_ffs -Ffy ${md}a.eli
44
45	# Now do the resize properly
46
47	atf_check geli detach ${md}a.eli
48	atf_check -s exit:0 -o match:resized gpart resize -i1 -s 30m ${md}
49	atf_check geli resize -s20m ${md}a
50	atf_check -s not-exit:0 -e match:"Inconsistent provider.*metadata" \
51		geli resize -s20m ${md}a
52	atf_check geli attach -pktmp.key ${md}a
53	atf_check -s exit:0 -o ignore growfs -y ${md}a.eli
54	atf_check -s exit:7 -o ignore fsck_ffs -Ffy ${md}a.eli
55
56	atf_check geli detach ${md}a.eli
57	atf_check -s exit:0 -o ignore gpart destroy -F $md
58
59
60	# Verify that the man page example works, changing ada0 to $md,
61	# 1g to 20m, 2g to 30m and keyfile to tmp.key, and adding -B none
62	# to geli init.
63
64	atf_check -s exit:0 -o ignore gpart create -s GPT $md
65	atf_check -s exit:0 -o ignore gpart add -s 20m -t freebsd-ufs -i 1 $md
66	atf_check geli init -B none -K tmp.key -P ${md}p1
67	atf_check -s exit:0 -o match:resized gpart resize -s 30m -i 1 $md
68	atf_check geli resize -s 20m ${md}p1
69	atf_check geli attach -k tmp.key -p ${md}p1
70}
71resize_cleanup()
72{
73	if [ -f "$TEST_MDS_FILE" ]; then
74		while read md; do
75			[ -c /dev/${md}a.eli ] && \
76				geli detach ${md}a.eli 2>/dev/null
77			[ -c /dev/${md}p1.eli ] && \
78				geli detach ${md}p1.eli
79			[ -c /dev/${md}.eli ] && \
80				geli detach ${md}.eli 2>/dev/null
81			mdconfig -d -u $md 2>/dev/null
82		done < $TEST_MDS_FILE
83	fi
84}
85
86atf_init_test_cases()
87{
88	atf_add_test_case resize
89}
90