resize_test.sh revision 213231
1163953Srrs#! /bin/sh
2169382Srrs#
3218319Srrs# $FreeBSD: head/tools/regression/geom_eli/resize.t 213231 2010-09-27 21:10:37Z pjd $
4218319Srrs
5163953Srrsecho 1..27
6163953Srrs
7163953SrrsBLK=512
8163953SrrsBLKS_PER_MB=2048
9163953Srrs
10163953Srrsmd=$(mdconfig -s40m) || exit 1
11163953Srrsunit=${md#md}
12163953Srrsi=1
13163953Srrs
14163953Srrssetsize() {
15163953Srrs    partszMB=$1 unitszMB=$2
16163953Srrs
17163953Srrs    {
18163953Srrs	echo a: $(($partszMB * $BLKS_PER_MB)) 0 4.2BSD 1024 8192
19163953Srrs	echo c: $(($unitszMB * $BLKS_PER_MB)) 0 unused 0 0
20163953Srrs    } | disklabel -R $md /dev/stdin
21163953Srrs}
22163953Srrs
23163953Srrs# Initialise
24163953Srrs
25163953Srrskldload geom_eli >/dev/null 2>&1
26163953Srrs
27163953Srrssetsize 10 40 || echo -n "not "
28163953Srrsecho ok $i - "Sized ${md}a to 10m"
29163953Srrsi=$((i + 1))
30163953Srrs
31163953Srrsecho secret >tmp.key
32163953Srrsgeli init -Bnone -PKtmp.key ${md}a || echo -n "not "
33163953Srrsecho ok $i - "Initialised geli on ${md}a"
34163953Srrsi=$((i + 1))
35163953Srrsgeli attach -pk tmp.key ${md}a || echo -n "not "
36163953Srrsecho ok $i - "Attached ${md}a as ${md}a.eli"
37163953Srrsi=$((i + 1))
38163953Srrs
39163953Srrsnewfs -U ${md}a.eli >/dev/null || echo -n "not "
40180387Srrsecho ok $i - "Initialised the filesystem on ${md}a.eli"
41163953Srrsi=$((i + 1))
42170428Srrsout=$(fsck -tufs -y ${md}a.eli)
43170428Srrsecho "$out" | fgrep -q MODIFIED && echo -n "not "
44170428Srrsecho ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \
45163953Srrs    "lines of output"
46163953Srrsi=$((i + 1))
47163953Srrs
48163953Srrs
49163953Srrs# Doing a backup, resize & restore must be forced (with -f) as geli
50163953Srrs# verifies that the provider size in the metadata matches the consumer.
51171440Srrs
52163953Srrsgeli backup ${md}a tmp.meta || echo -n "not "
53163953Srrsecho ok $i - "Backed up ${md}a metadata"
54163953Srrsi=$((i + 1))
55163953Srrs
56163953Srrsgeli detach ${md}a.eli || echo -n "not "
57163953Srrsecho ok $i - "Detached ${md}a.eli"
58163953Srrsi=$((i + 1))
59163953Srrs
60163953Srrssetsize 20 40 || echo -n "not "
61163953Srrsecho ok $i - "Sized ${md}a to 20m"
62163953Srrsi=$((i + 1))
63163953Srrsgeli attach -pktmp.key ${md}a && echo -n "not "
64163953Srrsecho ok $i - "Attaching ${md}a fails after resizing the consumer"
65163953Srrsi=$((i + 1))
66163953Srrs
67163953Srrsgeli restore tmp.meta ${md}a && echo -n "not "
68163953Srrsecho ok $i - "Restoring metadata on ${md}a.eli fails without -f"
69163953Srrsi=$((i + 1))
70163953Srrsgeli restore -f tmp.meta ${md}a || echo -n "not "
71163953Srrsecho ok $i - "Restoring metadata on ${md}a.eli can be forced"
72163953Srrsi=$((i + 1))
73163953Srrs
74163953Srrsgeli attach -pktmp.key ${md}a || echo -n "not "
75163953Srrsecho ok $i - "Attaching ${md}a is now possible"
76163953Srrsi=$((i + 1))
77163953Srrs
78163953Srrsgrowfs -y ${md}a.eli >/dev/null || echo -n "not "
79163953Srrsecho ok $i - "Extended the filesystem on ${md}a.eli"
80163953Srrsi=$((i + 1))
81163953Srrs
82163953Srrsout=$(fsck -tufs -y ${md}a.eli)
83163953Srrsecho "$out" | fgrep -q MODIFIED && echo -n "not "
84163953Srrsecho ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \
85163953Srrs    "lines of output"
86163953Srrsi=$((i + 1))
87163953Srrs
88163953Srrs
89172156Srrs# Now do the resize properly
90172091Srrs
91172091Srrsgeli detach ${md}a.eli || echo -n "not "
92172091Srrsecho ok $i - "Detached ${md}a.eli"
93163953Srrsi=$((i + 1))
94163953Srrs
95163953Srrssetsize 30 40 || echo -n "not "
96163953Srrsecho ok $i - "Sized ${md}a to 30m"
97163953Srrsi=$((i + 1))
98163953Srrs
99163953Srrsgeli resize -s20m ${md}a || echo -n "not "
100163953Srrsecho ok $i - "Resizing works ok"
101163953Srrsi=$((i + 1))
102163953Srrsgeli resize -s20m ${md}a && echo -n "not "
103163953Srrsecho ok $i - "Resizing doesn't work a 2nd time (no old metadata)"
104i=$((i + 1))
105
106geli attach -pktmp.key ${md}a || echo -n "not "
107echo ok $i - "Attaching ${md}a works ok"
108i=$((i + 1))
109
110growfs -y ${md}a.eli >/dev/null || echo -n "not "
111echo ok $i - "Extended the filesystem on ${md}a.eli"
112i=$((i + 1))
113
114out=$(fsck -tufs -y ${md}a.eli)
115echo "$out" | fgrep -q MODIFIED && echo -n "not "
116echo ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \
117    "lines of output"
118i=$((i + 1))
119
120geli detach ${md}a.eli
121
122
123# Verify that the man page example works, changing ada0 to $md,
124# 1g to 20m, 2g to 30m and keyfile to tmp.key, and adding -B none
125# to geli init.
126
127gpart create -s GPT $md || echo -n "not "
128echo ok $i - "Installed a GPT on ${md}"
129i=$((i + 1))
130gpart add -s 20m -t freebsd-ufs -i 1 $md || echo -n "not "
131echo ok $i - "Added a 20m partition in slot 1"
132i=$((i + 1))
133geli init -B none -K tmp.key -P ${md}p1 || echo -n "not "
134echo ok $i - "Initialised geli on ${md}p1"
135i=$((i + 1))
136gpart resize -s 30m -i 1 $md || echo -n "not "
137echo ok $i - "Resized partition ${md}p1 to 30m"
138i=$((i + 1))
139geli resize -s 20m ${md}p1 || echo -n "not "
140echo ok $i - "Resized geli on ${md}p1 to 30m"
141i=$((i + 1))
142geli attach -k tmp.key -p ${md}p1 || echo -n "not "
143echo ok $i - "Attached ${md}p1.eli"
144i=$((i + 1))
145
146geli detach ${md}p1.eli
147mdconfig -du$unit
148
149rm tmp.*
150