1# $FreeBSD$ 2 3# Test various operations for geli-on-geli providers, to ensure that geli is 4# reentrant. 5 6. $(atf_get_srcdir)/conf.sh 7 8init_test() 9{ 10 cipher=$1 11 aalgo=$2 12 secsize=$3 13 ealgo=${cipher%%:*} 14 keylen=${cipher##*:} 15 16 atf_check dd if=/dev/random of=testdata bs=$secsize count=1 status=none 17 atf_check dd if=/dev/random of=keyfile bs=$secsize count=16 status=none 18 19 # Create the lower geli device 20 atf_check -s exit:0 -e ignore \ 21 geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ 22 -s $secsize ${md} 23 atf_check geli attach -p -k keyfile ${md} 24 # Create the upper geli device 25 atf_check -s exit:0 -e ignore \ 26 geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K keyfile \ 27 -s $secsize ${md}.eli 28 atf_check geli attach -p -k keyfile ${md}.eli 29 echo ${md} > layered_md_device 30 31 # Ensure we can read and write. 32 atf_check dd if=testdata of=/dev/${md}.eli.eli bs=$secsize count=1 \ 33 status=none 34 atf_check dd if=/dev/${md}.eli.eli of=cmpdata bs=$secsize count=1 \ 35 status=none 36 atf_check cmp -s testdata cmpdata 37 38 geli detach ${md}.eli 2>/dev/null 39} 40 41atf_test_case init cleanup 42init_head() 43{ 44 atf_set "descr" "Initialize a geli provider on top of another" 45 atf_set "require.user" "root" 46 atf_set "timeout" 600 47} 48init_body() 49{ 50 sectors=2 51 geli_test_setup 52 53 for_each_geli_config init_test 54} 55init_cleanup() 56{ 57 if [ -f layered_md_device ]; then 58 while read provider; do 59 [ -c /dev/${md}.eli.eli ] && \ 60 geli detach $md.eli.eli 2>/dev/null 61 done < layered_md_device 62 fi 63 geli_test_cleanup 64} 65 66atf_init_test_cases() 67{ 68 atf_add_test_case init 69} 70