Annotation of src/tests/sbin/gpt/t_gpt.sh, Revision 1.15.4.1
1.15.4.1! bouyer 1: # $NetBSD: t_gpt.sh,v 1.16 2017/03/22 19:13:40 martin Exp $
1.1 christos 2: #
1.2 christos 3: # Copyright (c) 2015 The NetBSD Foundation, Inc.
1.1 christos 4: # All rights reserved.
5: #
6: # This code is derived from software contributed to The NetBSD Foundation
1.2 christos 7: # by Christos Zoulas
1.1 christos 8: #
9: # Redistribution and use in source and binary forms, with or without
10: # modification, are permitted provided that the following conditions
11: # are met:
12: # 1. Redistributions of source code must retain the above copyright
13: # notice, this list of conditions and the following disclaimer.
14: # 2. Redistributions in binary form must reproduce the above copyright
15: # notice, this list of conditions and the following disclaimer in the
16: # documentation and/or other materials provided with the distribution.
17: #
18: # THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
19: # ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
20: # TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21: # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
22: # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23: # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24: # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25: # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26: # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27: # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28: # POSSIBILITY OF SUCH DAMAGE.
29: #
30:
1.7 christos 31: bootblk=/usr/mdec/gptmbr.bin
1.1 christos 32: size=10240
1.5 christos 33: newsize=20480
1.1 christos 34: shdr=34
35: disk=gpt.disk
36: uuid="........-....-....-....-............"
37: zero="00000000-0000-0000-0000-000000000000"
1.4 christos 38: src=$(atf_get_srcdir)
1.1 christos 39:
1.8 christos 40: silence() {
41: atf_check -s exit:0 -o empty -e empty "$@"
42: }
43:
1.11 christos 44: inline() {
45: local inline="$1"
46: shift
47: atf_check -s exit:0 -e empty -o inline:"$inline" "$@"
48: }
49:
1.8 christos 50: match() {
51: local match="$1"
52: shift
53: atf_check -s exit:0 -e empty -o match:"$match" "$@"
54: }
55:
56: matcherr() {
57: local match="$1"
58: shift
59: atf_check -s exit:0 -o empty -e match:"$match" "$@"
60: }
61:
62: file() {
63: local file="$1"
64: shift
65: atf_check -s exit:0 -e empty -o file:"$file" "$@"
66: }
67:
68: save() {
69: local save="$1"
70: shift
71: atf_check -s exit:0 -e empty -o save:"$save" "$@"
72: }
73:
74: zerodd() {
75: silence dd conv=notrunc msgfmt=quiet if=/dev/zero of="$disk" "$@"
76: }
77:
1.1 christos 78: prepare() {
1.7 christos 79: rm -f "$disk"
1.8 christos 80: zerodd seek="$size" count=1
1.1 christos 81: }
82:
83: prepare_2part() {
84: prepare
1.8 christos 85: silence gpt create "$disk"
86: match "$(partaddmsg 1 34 1024)" gpt add -t efi -s 1024 "$disk"
87: match "$(partaddmsg 2 1058 9150)" gpt add "$disk"
1.1 christos 88: }
89:
1.3 christos 90: # Calling this from tests does not work. BUG!
1.1 christos 91: check_2part() {
1.8 christos 92: file "$src/gpt.2part.show.normal" gpt show "$disk"
93: file "$src/gpt.2part.show.uuid" gpt show -u "$disk"
1.1 christos 94: }
95:
1.5 christos 96: partaddmsg() {
1.1 christos 97: echo "^$disk: Partition $1 added: $uuid $2 $3\$"
98: }
99:
1.5 christos 100: partresmsg() {
101: echo "^$disk: Partition $1 resized: $2 $3\$"
102: }
103:
1.6 christos 104: partremmsg() {
105: echo "^$disk: Partition $1 removed\$"
106: }
107:
108: partlblmsg() {
109: echo "^$disk: Partition $1 label changed\$"
110: }
111:
1.7 christos 112: partbootmsg() {
113: echo "^$disk: Partition $1 marked as bootable\$"
114: }
115:
1.1 christos 116: recovermsg() {
117: echo "^$disk: Recovered $1 GPT [a-z]* from $2\$"
118: }
119:
1.8 christos 120: migratemsg() {
121: echo -n "^gpt: $disk: Partition $1 unknown type MSDOS, "
122: echo 'using "Microsoft Basic Data"$'
123: }
124:
1.11 christos 125: attrmsg() {
126: echo "^$disk: Partition $1 attributes updated\$"
127: }
128:
129: typemsg() {
130: echo "^$disk: Partition $1 type changed\$"
131: }
132:
1.1 christos 133: atf_test_case create_empty
134: create_empty_head() {
135: atf_set "descr" "Create empty disk"
136: }
137:
138: create_empty_body() {
139: prepare
1.8 christos 140: silence gpt create "$disk"
141: file "$src/gpt.empty.show.normal" gpt show "$disk"
1.1 christos 142: }
143:
144: atf_test_case create_2part
145: create_2part_head() {
146: atf_set "descr" "Create 2 partition disk"
147: }
148:
149: create_2part_body() {
150: prepare_2part
151: check_2part
152: }
153:
1.11 christos 154: atf_test_case change_attr_2part
155: change_attr_2part_head() {
156: atf_set "descr" "Change the attribute of 2 partition disk"
157: }
158:
159: change_attr_2part_body() {
160: prepare_2part
161: match "$(attrmsg 1)" gpt set -i 1 -a biosboot,bootme "$disk"
162: save attr gpt show -i 1 "$disk"
1.14 pgoyette 163: match "^Attributes: biosboot, bootme\$" tail -1 attr
1.11 christos 164: match "$(attrmsg 1)" gpt unset -i 1 -a biosboot,bootme "$disk"
165: save attr gpt show -i 1 "$disk"
166: match "^Attributes: None\$" tail -1 attr
167: }
168:
169: atf_test_case change_type_2part
170: change_type_2part_head() {
171: atf_set "descr" "Change the partition type type of 2 partition disk"
172: }
173:
174: change_type_2part_body() {
175: prepare_2part
176: match "$(typemsg 1)" gpt type -i 1 -T apple "$disk"
177: save type gpt show -i 1 "$disk"
178: inline "Type: apple (48465300-0000-11aa-aa11-00306543ecac)\n" \
179: grep "^Type:" type
180: match "$(typemsg 1)" gpt type -i 1 -T efi "$disk"
181: save type gpt show -i 1 "$disk"
182: inline "Type: efi (c12a7328-f81f-11d2-ba4b-00a0c93ec93b)\n" \
183: grep "^Type:" type
184: }
185:
1.1 christos 186: atf_test_case backup_2part
187: backup_2part_head() {
188: atf_set "descr" "Backup 2 partition disk"
189: }
190:
191: backup_2part_body() {
192: prepare_2part
1.8 christos 193: save test.backup gpt backup "$disk"
194: file "$src/gpt.backup" sed -e "s/$uuid/$zero/g" "test.backup"
1.1 christos 195: }
196:
197: atf_test_case restore_2part
198: restore_2part_head() {
199: atf_set "descr" "Restore 2 partition disk"
200: }
201:
202: restore_2part_body() {
203: prepare_2part
1.8 christos 204: save test.backup gpt backup "$disk"
1.1 christos 205: prepare
1.8 christos 206: silence gpt restore -i test.backup "$disk"
1.1 christos 207: check_2part
208: }
209:
210: atf_test_case recover_backup
211: recover_backup_head() {
212: atf_set "descr" "Recover the backup GPT header and table"
213: }
214:
215: recover_backup_body() {
216: prepare_2part
1.8 christos 217: zerodd seek="$((size - shdr))" count="$shdr"
218: match "$(recovermsg secondary primary)" gpt recover "$disk"
1.1 christos 219: check_2part
220: }
221:
222: atf_test_case recover_primary
223: recover_primary_head() {
224: atf_set "descr" "Recover the primary GPT header and table"
225: }
226:
227: recover_primary_body() {
228: prepare_2part
1.8 christos 229: zerodd seek=1 count="$shdr"
230: match "$(recovermsg primary secondary)" gpt recover "$disk"
1.1 christos 231: check_2part
232: }
233:
1.5 christos 234: atf_test_case resize_2part
235: resize_2part_head() {
236: atf_set "descr" "Resize a 2 partition disk and partition"
237: }
238:
239: resize_2part_body() {
240: prepare_2part
1.8 christos 241: zerodd seek="$newsize" count=1
242: silence gpt resizedisk "$disk"
243: file "$src/gpt.resizedisk.show.normal" gpt show "$disk"
244: match "$(partresmsg 2 1058 19390)" gpt resize -i 2 "$disk"
245: file "$src/gpt.resizepart.show.normal" gpt show "$disk"
1.5 christos 246: }
247:
1.6 christos 248: atf_test_case remove_2part
249: remove_2part_head() {
250: atf_set "descr" "Remove a partition from a 2 partition disk"
251: }
252:
253: remove_2part_body() {
254: prepare_2part
1.8 christos 255: match "$(partremmsg 1)" -e empty gpt remove \
1.7 christos 256: -i 1 "$disk"
1.8 christos 257: file "$src/gpt.removepart.show.normal" \
1.7 christos 258: gpt show "$disk"
1.6 christos 259: }
260:
261: atf_test_case label_2part
262: label_2part_head() {
1.7 christos 263: atf_set "descr" "Label partitions in a 2 partition disk"
1.6 christos 264: }
265:
266: label_2part_body() {
267: prepare_2part
1.8 christos 268: match "$(partlblmsg 1)" gpt label -i 1 -l potato "$disk"
269: match "$(partlblmsg 2)" gpt label -i 2 -l tomato "$disk"
270: file "$src/gpt.2part.show.label" \
1.7 christos 271: gpt show -l "$disk"
272: }
273:
274: atf_test_case bootable_2part
275: bootable_2part_head() {
276: atf_set "descr" "Make partition 2 bootable in a 2 partition disk"
1.15 joerg 277: atf_set "require.files" "$bootblk"
1.7 christos 278: }
279:
280: bootable_2part_body() {
281: prepare_2part
1.8 christos 282: match "$(partbootmsg 2)" gpt biosboot -i 2 "$disk"
1.7 christos 283: local bootsz="$(ls -l "$bootblk" | awk '{ print $5 }')"
1.8 christos 284: silence dd msgfmt=quiet if="$disk" of=bootblk bs=1 count="$bootsz"
285: silence cmp "$bootblk" bootblk
286: save bootattr gpt show -i 2 "$disk"
1.11 christos 287: match "^Attributes: biosboot\$" tail -1 bootattr
1.8 christos 288: }
289:
290: atf_test_case migrate_disklabel
291: migrate_disklabel_head() {
292: atf_set "descr" "Migrate an MBR+disklabel disk to GPT"
293: }
294:
295: migrate_disklabel_body() {
1.15.4.1! bouyer 296: if [ $( sysctl -n kern.rawpartition ) -ne 3 ]; then
! 297: atf_skip "This test is specific to architectures using MBR"
! 298: fi
! 299:
1.8 christos 300: prepare
1.10 christos 301: silence fdisk -fi "$disk"
302: silence fdisk -fu0s "169/63/$((size / 10))" "$disk"
303: silence disklabel -R "$disk" "$src/gpt.disklabel"
1.8 christos 304: matcherr "$(migratemsg 5)" gpt migrate "$disk"
1.9 christos 305: file "$src/gpt.disklabel.show.normal" gpt show "$disk"
1.6 christos 306: }
307:
1.1 christos 308: atf_init_test_cases() {
309: atf_add_test_case create_empty
310: atf_add_test_case create_2part
1.11 christos 311: atf_add_test_case change_attr_2part
312: atf_add_test_case change_type_2part
1.1 christos 313: atf_add_test_case backup_2part
1.6 christos 314: atf_add_test_case remove_2part
1.1 christos 315: atf_add_test_case restore_2part
316: atf_add_test_case recover_backup
317: atf_add_test_case recover_primary
1.5 christos 318: atf_add_test_case resize_2part
1.6 christos 319: atf_add_test_case label_2part
1.7 christos 320: atf_add_test_case bootable_2part
1.8 christos 321: atf_add_test_case migrate_disklabel
1.1 christos 322: }
CVSweb <webmaster@jp.NetBSD.org>