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