xref: /freebsd-src/contrib/netbsd-tests/dev/cgd/t_cgd.sh (revision 9268022b74279434ed6300244e3f977e56a8ceb5)
1*57718be8SEnji Cooper#	$NetBSD: t_cgd.sh,v 1.11 2013/02/19 21:08:24 joerg Exp $
2*57718be8SEnji Cooper#
3*57718be8SEnji Cooper# Copyright (c) 2010 The NetBSD Foundation, Inc.
4*57718be8SEnji Cooper# All rights reserved.
5*57718be8SEnji Cooper#
6*57718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
7*57718be8SEnji Cooper# modification, are permitted provided that the following conditions
8*57718be8SEnji Cooper# are met:
9*57718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
10*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
11*57718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
12*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
13*57718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
14*57718be8SEnji Cooper#
15*57718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16*57718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17*57718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18*57718be8SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19*57718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20*57718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21*57718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22*57718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23*57718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24*57718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25*57718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
26*57718be8SEnji Cooper#
27*57718be8SEnji Cooper
28*57718be8SEnji Cooperrawpart=`sysctl -n kern.rawpartition | tr '01234' 'abcde'`
29*57718be8SEnji Cooperrawcgd=/dev/rcgd0${rawpart}
30*57718be8SEnji Coopercgdserver=\
31*57718be8SEnji Cooper"rump_server -lrumpvfs -lrumpkern_crypto -lrumpdev -lrumpdev_disk -lrumpdev_cgd"
32*57718be8SEnji Cooper
33*57718be8SEnji Cooperatf_test_case basic cleanup
34*57718be8SEnji Cooperbasic_head()
35*57718be8SEnji Cooper{
36*57718be8SEnji Cooper
37*57718be8SEnji Cooper	atf_set "descr" "Tests that encrypt/decrypt works"
38*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
39*57718be8SEnji Cooper}
40*57718be8SEnji Cooper
41*57718be8SEnji Cooperbasic_body()
42*57718be8SEnji Cooper{
43*57718be8SEnji Cooper
44*57718be8SEnji Cooper	d=$(atf_get_srcdir)
45*57718be8SEnji Cooper	atf_check -s exit:0 \
46*57718be8SEnji Cooper	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
47*57718be8SEnji Cooper
48*57718be8SEnji Cooper	export RUMP_SERVER=unix://csock
49*57718be8SEnji Cooper	atf_check -s exit:0 -x "echo 12345 | \
50*57718be8SEnji Cooper	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
51*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -x \
52*57718be8SEnji Cooper	    "dd if=${d}/t_cgd count=2 | rump.dd of=${rawcgd}"
53*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2
54*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -o file:testfile \
55*57718be8SEnji Cooper	    rump.dd if=${rawcgd} count=2
56*57718be8SEnji Cooper}
57*57718be8SEnji Cooper
58*57718be8SEnji Cooperbasic_cleanup()
59*57718be8SEnji Cooper{
60*57718be8SEnji Cooper
61*57718be8SEnji Cooper	env RUMP_SERVER=unix://csock rump.halt || true
62*57718be8SEnji Cooper}
63*57718be8SEnji Cooper
64*57718be8SEnji Cooperatf_test_case wrongpass cleanup
65*57718be8SEnji Cooperwrongpass_head()
66*57718be8SEnji Cooper{
67*57718be8SEnji Cooper
68*57718be8SEnji Cooper	atf_set "descr" "Tests that wrong password does not give original " \
69*57718be8SEnji Cooper	    "plaintext"
70*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
71*57718be8SEnji Cooper}
72*57718be8SEnji Cooper
73*57718be8SEnji Cooperwrongpass_body()
74*57718be8SEnji Cooper{
75*57718be8SEnji Cooper
76*57718be8SEnji Cooper	d=$(atf_get_srcdir)
77*57718be8SEnji Cooper	atf_check -s exit:0 \
78*57718be8SEnji Cooper	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
79*57718be8SEnji Cooper
80*57718be8SEnji Cooper	export RUMP_SERVER=unix://csock
81*57718be8SEnji Cooper	atf_check -s exit:0 -x "echo 12345 | \
82*57718be8SEnji Cooper	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
83*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -x \
84*57718be8SEnji Cooper	    "dd if=${d}/t_cgd | rump.dd of=${rawcgd} count=2"
85*57718be8SEnji Cooper
86*57718be8SEnji Cooper	# unconfig and reconfig cgd
87*57718be8SEnji Cooper	atf_check -s exit:0 rump.cgdconfig -u cgd0
88*57718be8SEnji Cooper	atf_check -s exit:0 -x "echo 54321 | \
89*57718be8SEnji Cooper	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
90*57718be8SEnji Cooper
91*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2
92*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -o not-file:testfile \
93*57718be8SEnji Cooper	    rump.dd if=${rawcgd} count=2
94*57718be8SEnji Cooper}
95*57718be8SEnji Cooper
96*57718be8SEnji Cooperwrongpass_cleanup()
97*57718be8SEnji Cooper{
98*57718be8SEnji Cooper
99*57718be8SEnji Cooper	env RUMP_SERVER=unix://csock rump.halt || true
100*57718be8SEnji Cooper}
101*57718be8SEnji Cooper
102*57718be8SEnji Cooper
103*57718be8SEnji Cooperatf_test_case unaligned_write cleanup
104*57718be8SEnji Cooperunaligned_write_head()
105*57718be8SEnji Cooper{
106*57718be8SEnji Cooper
107*57718be8SEnji Cooper	atf_set "descr" "Attempt unaligned writes to a raw cgd device"
108*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
109*57718be8SEnji Cooper}
110*57718be8SEnji Cooper
111*57718be8SEnji Cooperunaligned_write_body()
112*57718be8SEnji Cooper{
113*57718be8SEnji Cooper	d=$(atf_get_srcdir)
114*57718be8SEnji Cooper	atf_check -s exit:0 \
115*57718be8SEnji Cooper	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
116*57718be8SEnji Cooper
117*57718be8SEnji Cooper	export RUMP_SERVER=unix://csock
118*57718be8SEnji Cooper	atf_check -s exit:0 -x "echo 12345 | \
119*57718be8SEnji Cooper	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
120*57718be8SEnji Cooper
121*57718be8SEnji Cooper	# Check that cgd rejects writes of totally bogus lengths.
122*57718be8SEnji Cooper	atf_check -s not-exit:0 -e ignore -x \
123*57718be8SEnji Cooper	    "echo die hard | rump.dd of=${rawcgd} bs=123 conv=sync"
124*57718be8SEnji Cooper
125*57718be8SEnji Cooper	# Check that cgd rejects non-sector-length writes even if they
126*57718be8SEnji Cooper	# are integral multiples of the block size.
127*57718be8SEnji Cooper	atf_check -s not-exit:0 -e ignore -x \
128*57718be8SEnji Cooper	    "echo die hard | rump.dd of=${rawcgd} bs=64 conv=sync"
129*57718be8SEnji Cooper	atf_check -s not-exit:0 -e ignore -x \
130*57718be8SEnji Cooper	    "echo die hard | rump.dd of=${rawcgd} bs=256 conv=sync"
131*57718be8SEnji Cooper
132*57718be8SEnji Cooper	# Check that cgd rejects misaligned buffers, produced by
133*57718be8SEnji Cooper	# packetizing the input on bogus boundaries and using the
134*57718be8SEnji Cooper	# bizarre behaviour of `bs=N' in dd.
135*57718be8SEnji Cooper	atf_check -s not-exit:0 -e ignore -x \
136*57718be8SEnji Cooper	    "(echo -n x && sleep 1 && head -c 511 </dev/zero) \
137*57718be8SEnji Cooper		| rump.dd of=${rawcgd} bs=512"
138*57718be8SEnji Cooper
139*57718be8SEnji Cooper	# Check that cgd rejects sector-length writes if they are not
140*57718be8SEnji Cooper	# on sector boundaries.  Doesn't work because dd can't be
141*57718be8SEnji Cooper	# persuaded to seek a non-integral multiple of the output
142*57718be8SEnji Cooper	# buffer size and I can't be arsed to find the another way to
143*57718be8SEnji Cooper	# do that.
144*57718be8SEnji Cooper	#atf_check -s not-exit:0 -e ignore -x \
145*57718be8SEnji Cooper	#    "echo die hard | rump.dd of=${rawcgd} seek=1 bs=512 conv=sync"
146*57718be8SEnji Cooper}
147*57718be8SEnji Cooper
148*57718be8SEnji Cooperunaligned_write_cleanup()
149*57718be8SEnji Cooper{
150*57718be8SEnji Cooper	env RUMP_SERVER=unix://csock rump.halt || true
151*57718be8SEnji Cooper}
152*57718be8SEnji Cooper
153*57718be8SEnji Cooperatf_init_test_cases()
154*57718be8SEnji Cooper{
155*57718be8SEnji Cooper
156*57718be8SEnji Cooper	atf_add_test_case basic
157*57718be8SEnji Cooper	atf_add_test_case wrongpass
158*57718be8SEnji Cooper	atf_add_test_case unaligned_write
159*57718be8SEnji Cooper}
160