xref: /freebsd/tests/sys/geom/class/eli/kill_test.sh (revision 5e3190f700637fcfc1a52daeaa4a031fdd2557c7)
1
2. $(atf_get_srcdir)/conf.sh
3
4atf_test_case kill cleanup
5kill_head()
6{
7	atf_set "descr" "geli kill will wipe a provider's metadata"
8	atf_set "require.user" "root"
9}
10kill_body()
11{
12	geli_test_setup
13
14	sectors=100
15	md=$(attach_md -t malloc -s `expr $sectors + 1`)
16
17	atf_check dd if=/dev/random of=keyfile1 bs=512 count=16 status=none
18	atf_check dd if=/dev/random of=keyfile2 bs=512 count=16 status=none
19
20	atf_check geli init -B none -P -K keyfile1 ${md}
21	atf_check geli attach -p -k keyfile1 ${md}
22	atf_check -s exit:0 -o ignore geli setkey -n 1 -P -K keyfile2 ${md}
23
24	# Kill attached provider.
25	atf_check geli kill ${md}
26	sleep 1
27	# Provider should be automatically detached.
28	if [ -c /dev/${md}.eli ]; then
29		atf_fail "Provider did not detach when killed"
30	fi
31
32	# We cannot use keyfile1 anymore.
33	atf_check -s not-exit:0 -e match:"Cannot read metadata" \
34		geli attach -p -k keyfile1 ${md}
35
36	# We cannot use keyfile2 anymore.
37	atf_check -s not-exit:0 -e match:"Cannot read metadata" \
38		geli attach -p -k keyfile2 ${md}
39
40	atf_check geli init -B none -P -K keyfile1 ${md}
41	atf_check -s exit:0 -o ignore \
42		geli setkey -n 1 -p -k keyfile1 -P -K keyfile2 ${md}
43
44	# Should be possible to attach with keyfile1.
45	atf_check geli attach -p -k keyfile1 ${md}
46	atf_check geli detach ${md}
47
48	# Should be possible to attach with keyfile2.
49	atf_check geli attach -p -k keyfile2 ${md}
50	atf_check geli detach ${md}
51
52	# Kill detached provider.
53	atf_check geli kill ${md}
54
55	# We cannot use keyfile1 anymore.
56	atf_check -s not-exit:0 -e match:"Cannot read metadata" \
57		geli attach -p -k keyfile1 ${md}
58
59	# We cannot use keyfile2 anymore.
60	atf_check -s not-exit:0 -e match:"Cannot read metadata" \
61		geli attach -p -k keyfile2 ${md}
62}
63kill_cleanup()
64{
65	geli_test_cleanup
66}
67
68atf_test_case kill_readonly cleanup
69kill_readonly_head()
70{
71	atf_set "descr" "geli kill will not destroy the keys of a readonly provider"
72	atf_set "require.user" "root"
73}
74kill_readonly_body()
75{
76	geli_test_setup
77
78	sectors=100
79	md=$(attach_md -t malloc -s `expr $sectors + 1`)
80	atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none
81
82	atf_check geli init -B none -P -K keyfile ${md}
83	# Attach read-only
84	atf_check geli attach -r -p -k keyfile ${md}
85
86	atf_check geli kill ${md}
87	# The provider will be detached
88	atf_check [ ! -c /dev/${md}.eli ]
89	# But its keys should not be destroyed
90	atf_check geli attach -p -k keyfile ${md}
91}
92kill_readonly_cleanup()
93{
94	geli_test_cleanup
95}
96
97atf_init_test_cases()
98{
99	atf_add_test_case kill
100	atf_add_test_case kill_readonly
101}
102