t_cgd.sh revision 272458
1250323Sdteske#	$NetBSD: t_cgd.sh,v 1.11 2013/02/19 21:08:24 joerg Exp $
2250323Sdteske#
3250323Sdteske# Copyright (c) 2010 The NetBSD Foundation, Inc.
4250323Sdteske# All rights reserved.
5250323Sdteske#
6250323Sdteske# Redistribution and use in source and binary forms, with or without
7250323Sdteske# modification, are permitted provided that the following conditions
8250323Sdteske# are met:
9250323Sdteske# 1. Redistributions of source code must retain the above copyright
10250323Sdteske#    notice, this list of conditions and the following disclaimer.
11250323Sdteske# 2. Redistributions in binary form must reproduce the above copyright
12250323Sdteske#    notice, this list of conditions and the following disclaimer in the
13250323Sdteske#    documentation and/or other materials provided with the distribution.
14250323Sdteske#
15250323Sdteske# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
16250323Sdteske# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
17250323Sdteske# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
18250323Sdteske# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
19250323Sdteske# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
20250323Sdteske# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
21250323Sdteske# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
22250323Sdteske# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
23250323Sdteske# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
24250323Sdteske# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
25250323Sdteske# POSSIBILITY OF SUCH DAMAGE.
26250323Sdteske#
27250323Sdteske
28250323Sdteskerawpart=`sysctl -n kern.rawpartition | tr '01234' 'abcde'`
29250323Sdteskerawcgd=/dev/rcgd0${rawpart}
30250323Sdteskecgdserver=\
31250323Sdteske"rump_server -lrumpvfs -lrumpkern_crypto -lrumpdev -lrumpdev_disk -lrumpdev_cgd"
32250323Sdteske
33250323Sdteskeatf_test_case basic cleanup
34250323Sdteskebasic_head()
35250323Sdteske{
36250323Sdteske
37250323Sdteske	atf_set "descr" "Tests that encrypt/decrypt works"
38250323Sdteske	atf_set "require.progs" "rump_server"
39250323Sdteske}
40250323Sdteske
41250323Sdteskebasic_body()
42250323Sdteske{
43250323Sdteske
44250323Sdteske	d=$(atf_get_srcdir)
45250323Sdteske	atf_check -s exit:0 \
46250323Sdteske	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
47250323Sdteske
48250323Sdteske	export RUMP_SERVER=unix://csock
49250323Sdteske	atf_check -s exit:0 -x "echo 12345 | \
50250323Sdteske	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
51250323Sdteske	atf_check -s exit:0 -e ignore -x \
52250323Sdteske	    "dd if=${d}/t_cgd count=2 | rump.dd of=${rawcgd}"
53250323Sdteske	atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2
54250323Sdteske	atf_check -s exit:0 -e ignore -o file:testfile \
55250323Sdteske	    rump.dd if=${rawcgd} count=2
56250323Sdteske}
57250323Sdteske
58250323Sdteskebasic_cleanup()
59250323Sdteske{
60250323Sdteske
61250323Sdteske	env RUMP_SERVER=unix://csock rump.halt || true
62250323Sdteske}
63250323Sdteske
64250323Sdteskeatf_test_case wrongpass cleanup
65250323Sdteskewrongpass_head()
66250323Sdteske{
67250323Sdteske
68250323Sdteske	atf_set "descr" "Tests that wrong password does not give original " \
69250323Sdteske	    "plaintext"
70250323Sdteske	atf_set "require.progs" "rump_server"
71250323Sdteske}
72250323Sdteske
73250323Sdteskewrongpass_body()
74250323Sdteske{
75250323Sdteske
76250323Sdteske	d=$(atf_get_srcdir)
77250323Sdteske	atf_check -s exit:0 \
78250323Sdteske	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
79250323Sdteske
80250323Sdteske	export RUMP_SERVER=unix://csock
81250323Sdteske	atf_check -s exit:0 -x "echo 12345 | \
82250538Sdteske	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
83250538Sdteske	atf_check -s exit:0 -e ignore -x \
84250323Sdteske	    "dd if=${d}/t_cgd | rump.dd of=${rawcgd} count=2"
85250323Sdteske
86250323Sdteske	# unconfig and reconfig cgd
87250538Sdteske	atf_check -s exit:0 rump.cgdconfig -u cgd0
88250538Sdteske	atf_check -s exit:0 -x "echo 54321 | \
89250538Sdteske	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
90250538Sdteske
91250538Sdteske	atf_check -s exit:0 -e ignore dd if=${d}/t_cgd of=testfile count=2
92250323Sdteske	atf_check -s exit:0 -e ignore -o not-file:testfile \
93250323Sdteske	    rump.dd if=${rawcgd} count=2
94250323Sdteske}
95250538Sdteske
96250538Sdteskewrongpass_cleanup()
97250538Sdteske{
98250538Sdteske
99250538Sdteske	env RUMP_SERVER=unix://csock rump.halt || true
100250323Sdteske}
101250538Sdteske
102250538Sdteske
103250538Sdteskeatf_test_case unaligned_write cleanup
104250323Sdteskeunaligned_write_head()
105250323Sdteske{
106250323Sdteske
107250323Sdteske	atf_set "descr" "Attempt unaligned writes to a raw cgd device"
108250323Sdteske	atf_set "require.progs" "rump_server"
109250323Sdteske}
110250323Sdteske
111250323Sdteskeunaligned_write_body()
112250323Sdteske{
113250323Sdteske	d=$(atf_get_srcdir)
114250323Sdteske	atf_check -s exit:0 \
115250323Sdteske	    ${cgdserver} -d key=/dev/dk,hostpath=dk.img,size=1m unix://csock
116250323Sdteske
117250323Sdteske	export RUMP_SERVER=unix://csock
118250323Sdteske	atf_check -s exit:0 -x "echo 12345 | \
119250323Sdteske	    rump.cgdconfig -p cgd0 /dev/dk ${d}/paramsfile"
120250323Sdteske
121250323Sdteske	# Check that cgd rejects writes of totally bogus lengths.
122250323Sdteske	atf_check -s not-exit:0 -e ignore -x \
123250323Sdteske	    "echo die hard | rump.dd of=${rawcgd} bs=123 conv=sync"
124250323Sdteske
125250323Sdteske	# Check that cgd rejects non-sector-length writes even if they
126250323Sdteske	# are integral multiples of the block size.
127250323Sdteske	atf_check -s not-exit:0 -e ignore -x \
128250323Sdteske	    "echo die hard | rump.dd of=${rawcgd} bs=64 conv=sync"
129250323Sdteske	atf_check -s not-exit:0 -e ignore -x \
130250323Sdteske	    "echo die hard | rump.dd of=${rawcgd} bs=256 conv=sync"
131250323Sdteske
132250323Sdteske	# Check that cgd rejects misaligned buffers, produced by
133250323Sdteske	# packetizing the input on bogus boundaries and using the
134250323Sdteske	# bizarre behaviour of `bs=N' in dd.
135250323Sdteske	atf_check -s not-exit:0 -e ignore -x \
136250323Sdteske	    "(echo -n x && sleep 1 && head -c 511 </dev/zero) \
137250323Sdteske		| rump.dd of=${rawcgd} bs=512"
138250323Sdteske
139250323Sdteske	# Check that cgd rejects sector-length writes if they are not
140250323Sdteske	# on sector boundaries.  Doesn't work because dd can't be
141250323Sdteske	# persuaded to seek a non-integral multiple of the output
142250323Sdteske	# buffer size and I can't be arsed to find the another way to
143250323Sdteske	# do that.
144250323Sdteske	#atf_check -s not-exit:0 -e ignore -x \
145250323Sdteske	#    "echo die hard | rump.dd of=${rawcgd} seek=1 bs=512 conv=sync"
146250323Sdteske}
147250323Sdteske
148250323Sdteskeunaligned_write_cleanup()
149250323Sdteske{
150250323Sdteske	env RUMP_SERVER=unix://csock rump.halt || true
151250323Sdteske}
152250323Sdteske
153250323Sdteskeatf_init_test_cases()
154250323Sdteske{
155250323Sdteske
156250323Sdteske	atf_add_test_case basic
157250323Sdteske	atf_add_test_case wrongpass
158250323Sdteske	atf_add_test_case unaligned_write
159250323Sdteske}
160250323Sdteske