diff options
Diffstat (limited to 'tests')
77 files changed, 3688 insertions, 0 deletions
diff --git a/tests/sys/Makefile b/tests/sys/Makefile index 702f664..a1f1ad6 100644 --- a/tests/sys/Makefile +++ b/tests/sys/Makefile @@ -8,6 +8,7 @@ TESTS_SUBDIRS+= acl TESTS_SUBDIRS+= aio TESTS_SUBDIRS+= fifo TESTS_SUBDIRS+= file +TESTS_SUBDIRS+= geom TESTS_SUBDIRS+= kern TESTS_SUBDIRS+= kqueue TESTS_SUBDIRS+= mac diff --git a/tests/sys/geom/class/Makefile b/tests/sys/geom/class/Makefile new file mode 100644 index 0000000..c705616 --- /dev/null +++ b/tests/sys/geom/class/Makefile @@ -0,0 +1,21 @@ +# $FreeBSD$ + +TESTSDIR= ${TESTSBASE}/sys/geom/class + +TESTS_SUBDIRS+= concat +TESTS_SUBDIRS+= eli +TESTS_SUBDIRS+= gate +# XXX: might not work due to geom(4) changes; more investigation's needed +#TESTS_SUBDIRS+= gpt +TESTS_SUBDIRS+= mirror +TESTS_SUBDIRS+= nop +TESTS_SUBDIRS+= raid3 +TESTS_SUBDIRS+= shsec +TESTS_SUBDIRS+= stripe +TESTS_SUBDIRS+= uzip + +BINDIR= ${TESTSDIR} + +FILES+= geom_subr.sh + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/Makefile.inc b/tests/sys/geom/class/Makefile.inc new file mode 100644 index 0000000..17e59b0 --- /dev/null +++ b/tests/sys/geom/class/Makefile.inc @@ -0,0 +1,5 @@ +# $FreeBSD$ + +GEOM_CLASS= ${.CURDIR:T} + +TESTSDIR= ${TESTSBASE}/sys/geom/class/${GEOM_CLASS} diff --git a/tests/sys/geom/class/concat/1_test.sh b/tests/sys/geom/class/concat/1_test.sh new file mode 100755 index 0000000..ef80a61 --- /dev/null +++ b/tests/sys/geom/class/concat/1_test.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo '1..1' + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +gconcat create $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +# Size of created device should be 1MB + 2MB + 3MB. + +size=`diskinfo /dev/concat/${name} | awk '{print $3}'` + +if [ $size -eq 6291456 ]; then + echo "ok - Size is 6291456" +else + echo "not ok - Size is 6291456" +fi diff --git a/tests/sys/geom/class/concat/2_test.sh b/tests/sys/geom/class/concat/2_test.sh new file mode 100755 index 0000000..95636be --- /dev/null +++ b/tests/sys/geom/class/concat/2_test.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo '1..1' + +tsize=6 +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +dd if=/dev/random of=${src} bs=1m count=$tsize >/dev/null 2>&1 + +gconcat create $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +dd if=${src} of=/dev/concat/${name} bs=1m count=$tsize >/dev/null 2>&1 +dd if=/dev/concat/${name} of=${dst} bs=1m count=$tsize >/dev/null 2>&1 + +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok - md5 checksum comparison" +else + echo "ok - md5 checksum comparison" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/concat/Makefile b/tests/sys/geom/class/concat/Makefile new file mode 100644 index 0000000..81a4e99 --- /dev/null +++ b/tests/sys/geom/class/concat/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/concat/conf.sh b/tests/sys/geom/class/concat/conf.sh new file mode 100755 index 0000000..374ed12 --- /dev/null +++ b/tests/sys/geom/class/concat/conf.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# $FreeBSD$ + +name="$(mktemp -u concat.XXXXXX)" +class="concat" +base=`basename $0` + +gconcat_test_cleanup() +{ + [ -c /dev/$class/$name ] && gconcat destroy $name + geom_test_cleanup +} +trap gconcat_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/eli/Makefile b/tests/sys/geom/class/eli/Makefile new file mode 100644 index 0000000..1846ed6 --- /dev/null +++ b/tests/sys/geom/class/eli/Makefile @@ -0,0 +1,36 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= attach_d_test +TAP_TESTS_SH+= configure_b_B_test +TAP_TESTS_SH+= delkey_test +TAP_TESTS_SH+= detach_l_test +TAP_TESTS_SH+= init_B_test +TAP_TESTS_SH+= init_J_test +TAP_TESTS_SH+= init_a_test +TAP_TESTS_SH+= init_i_P_test +TAP_TESTS_SH+= init_test +TAP_TESTS_SH+= integrity_copy_test +TAP_TESTS_SH+= integrity_data_test +TAP_TESTS_SH+= integrity_hmac_test +TAP_TESTS_SH+= kill_test +TAP_TESTS_SH+= nokey_test +TAP_TESTS_SH+= onetime_a_test +TAP_TESTS_SH+= onetime_d_test +TAP_TESTS_SH+= onetime_test +TAP_TESTS_SH+= readonly_test +TAP_TESTS_SH+= resize_test +TAP_TESTS_SH+= setkey_test + +TEST_METADATA.init_a_test+= timeout="1200" +TEST_METADATA.init_test+= timeout="300" +TEST_METADATA.integrity_copy_test+= timeout="1200" +TEST_METADATA.integrity_data_test+= timeout="600" +TEST_METADATA.integrity_hmac_test+= timeout="600" +TEST_METADATA.onetime_a_test+= timeout="600" +TEST_METADATA.onetime_test+= timeout="600" + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/eli/attach_d_test.sh b/tests/sys/geom/class/eli/attach_d_test.sh new file mode 100755 index 0000000..5d700b3 --- /dev/null +++ b/tests/sys/geom/class/eli/attach_d_test.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..3" + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile md${no} +geli attach -d -p -k $keyfile md${no} +if [ -c /dev/md${no}.eli ]; then + echo "ok 1" +else + echo "not ok 1" +fi +# Be sure it doesn't detach on read. +dd if=/dev/md${no}.eli of=/dev/null 2>/dev/null +sleep 1 +if [ -c /dev/md${no}.eli ]; then + echo "ok 2" +else + echo "not ok 2" +fi +true > /dev/md${no}.eli +sleep 1 +if [ ! -c /dev/md${no}.eli ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/conf.sh b/tests/sys/geom/class/eli/conf.sh new file mode 100755 index 0000000..080fa61 --- /dev/null +++ b/tests/sys/geom/class/eli/conf.sh @@ -0,0 +1,19 @@ +#!/bin/sh +# $FreeBSD$ + +class="eli" +base=`basename $0` + +no=0 +while [ -c /dev/md$no ]; do + : $(( no += 1 )) +done + +geli_test_cleanup() +{ + [ -c /dev/md${no}.eli ] && geli detach md${no}.eli + mdconfig -d -u $no +} +trap geli_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/eli/configure_b_B_test.sh b/tests/sys/geom/class/eli/configure_b_B_test.sh new file mode 100755 index 0000000..b6cdf4f --- /dev/null +++ b/tests/sys/geom/class/eli/configure_b_B_test.sh @@ -0,0 +1,129 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..17" + +geli init -B none -P -K /dev/null md${no} +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi + +geli dump md${no} | egrep 'flags: 0x0$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 2" +else + echo "not ok 2" +fi + +geli init -B none -b -P -K /dev/null md${no} +if [ $? -eq 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +geli dump md${no} | egrep 'flags: 0x2$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi + +geli configure -B md${no} +if [ $? -eq 0 ]; then + echo "ok 5" +else + echo "not ok 5" +fi + +geli dump md${no} | egrep 'flags: 0x0$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi + +geli configure -b md${no} +if [ $? -eq 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi + +geli dump md${no} | egrep 'flags: 0x2$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi + +geli attach -p -k /dev/null md${no} +if [ $? -eq 0 ]; then + echo "ok 9" +else + echo "not ok 9" +fi + +geli list md${no}.eli | egrep '^Flags: .*BOOT' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 10" +else + echo "not ok 10" +fi + +geli configure -B md${no} +if [ $? -eq 0 ]; then + echo "ok 11" +else + echo "not ok 11" +fi + +geli list md${no}.eli | egrep '^Flags: .*BOOT' >/dev/null +if [ $? -ne 0 ]; then + echo "ok 12" +else + echo "not ok 12" +fi + +geli dump md${no} | egrep 'flags: 0x0$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 13" +else + echo "not ok 13" +fi + +geli configure -b md${no} +if [ $? -eq 0 ]; then + echo "ok 14" +else + echo "not ok 14" +fi + +geli list md${no}.eli | egrep '^Flags: .*BOOT' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 15" +else + echo "not ok 15" +fi + +geli dump md${no} | egrep 'flags: 0x2$' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 16" +else + echo "not ok 16" +fi + +geli detach md${no} +if [ $? -eq 0 ]; then + echo "ok 17" +else + echo "not ok 17" +fi diff --git a/tests/sys/geom/class/eli/delkey_test.sh b/tests/sys/geom/class/eli/delkey_test.sh new file mode 100755 index 0000000..67b253e --- /dev/null +++ b/tests/sys/geom/class/eli/delkey_test.sh @@ -0,0 +1,140 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile1=`mktemp $base.XXXXXX` || exit 1 +keyfile2=`mktemp $base.XXXXXX` || exit 1 +keyfile3=`mktemp $base.XXXXXX` || exit 1 +keyfile4=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..14" + +dd if=/dev/random of=${keyfile1} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile2} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile3} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile4} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile1 md${no} +geli attach -p -k $keyfile1 md${no} +geli setkey -n 1 -P -K $keyfile2 md${no} + +# Remove key 0 for attached provider. +geli delkey -n 0 md${no} +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi +geli detach md${no} + +# We cannot use keyfile1 anymore. +geli attach -p -k $keyfile1 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 2" +else + echo "not ok 2" +fi + +# Attach with key 1. +geli attach -p -k $keyfile2 md${no} +if [ $? -eq 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +# We cannot remove last key without -f option (for attached provider). +geli delkey -n 1 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi + +# Remove last key for attached provider. +geli delkey -f -n 1 md${no} +if [ $? -eq 0 ]; then + echo "ok 5" +else + echo "not ok 5" +fi + +# If there are no valid keys, but provider is attached, we can save situation. +geli setkey -n 0 -P -K $keyfile3 md${no} +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi +geli detach md${no} + +# We cannot use keyfile2 anymore. +geli attach -p -k $keyfile2 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi + +# Attach with key 0. +geli attach -p -k $keyfile3 md${no} +if [ $? -eq 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi + +# Setup key 1. +geli setkey -n 1 -P -K $keyfile4 md${no} +if [ $? -eq 0 ]; then + echo "ok 9" +else + echo "not ok 9" +fi +geli detach md${no} + +# Remove key 1 for detached provider. +geli delkey -n 1 md${no} +if [ $? -eq 0 ]; then + echo "ok 10" +else + echo "not ok 10" +fi + +# We cannot use keyfile4 anymore. +geli attach -p -k $keyfile4 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 11" +else + echo "not ok 11" +fi + +# We cannot remove last key without -f option (for detached provider). +geli delkey -n 0 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 12" +else + echo "not ok 12" +fi + +# Remove last key for detached provider. +geli delkey -f -n 0 md${no} +if [ $? -eq 0 ]; then + echo "ok 13" +else + echo "not ok 13" +fi + +# We cannot use keyfile3 anymore. +geli attach -p -k $keyfile3 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 14" +else + echo "not ok 14" +fi + +rm -f $keyfile1 $keyfile2 $keyfile3 $keyfile4 diff --git a/tests/sys/geom/class/eli/detach_l_test.sh b/tests/sys/geom/class/eli/detach_l_test.sh new file mode 100755 index 0000000..605ae94 --- /dev/null +++ b/tests/sys/geom/class/eli/detach_l_test.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..4" + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile md${no} +geli attach -p -k $keyfile md${no} +if [ -c /dev/md${no}.eli ]; then + echo "ok 1" +else + echo "not ok 1" +fi +# Be sure it doesn't detach before 'detach -l'. +dd if=/dev/md${no}.eli of=/dev/null 2>/dev/null +sleep 1 +if [ -c /dev/md${no}.eli ]; then + echo "ok 2" +else + echo "not ok 2" +fi +geli detach -l md${no} +if [ -c /dev/md${no}.eli ]; then + echo "ok 3" +else + echo "not ok 3" +fi +dd if=/dev/md${no}.eli of=/dev/null 2>/dev/null +sleep 1 +if [ ! -c /dev/md${no}.eli ]; then + echo "ok 4" +else + echo "not ok 4" +fi + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/init_B_test.sh b/tests/sys/geom/class/eli/init_B_test.sh new file mode 100755 index 0000000..3ba743c --- /dev/null +++ b/tests/sys/geom/class/eli/init_B_test.sh @@ -0,0 +1,104 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +backupfile=`mktemp $base.XXXXXX` || exit 1 + +echo "1..13" + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +mdconfig -a -t malloc -s $sectors -u $no || exit 1 + +# -B none +rm -f /var/backups/md${no}.eli +geli init -B none -P -K $keyfile md${no} 2>/dev/null +if [ ! -f /var/backups/md${no}.eli ]; then + echo "ok 1 - -B none" +else + echo "not ok 1 - -B none" +fi + +# no -B +rm -f /var/backups/md${no}.eli +geli init -P -K $keyfile md${no} >/dev/null 2>&1 +if [ -f /var/backups/md${no}.eli ]; then + echo "ok 2 - no -B" +else + echo "not ok 2 - no -B" +fi +geli clear md${no} +geli attach -p -k $keyfile md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 3 - no -B" +else + echo "not ok 3 - no -B" +fi +if [ ! -c /dev/md${no}.eli ]; then + echo "ok 4 - no -B" +else + echo "not ok 4 - no -B" +fi +geli restore /var/backups/md${no}.eli md${no} +if [ $? -eq 0 ]; then + echo "ok 5 - no -B" +else + echo "not ok 5 - no -B" +fi +geli attach -p -k $keyfile md${no} 2>/dev/null +if [ $? -eq 0 ]; then + echo "ok 6 - no -B" +else + echo "not ok 6 - no -B" +fi +if [ -c /dev/md${no}.eli ]; then + echo "ok 7 - no -B" +else + echo "not ok 7 - no -B" +fi +geli detach md${no} +rm -f /var/backups/md${no}.eli + +# -B file +rm -f $backupfile +geli init -B $backupfile -P -K $keyfile md${no} >/dev/null 2>&1 +if [ -f $backupfile ]; then + echo "ok 8 - -B file" +else + echo "not ok 8 - -B file" +fi +geli clear md${no} +geli attach -p -k $keyfile md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 9 - -B file" +else + echo "not ok 9 - -B file" +fi +if [ ! -c /dev/md${no}.eli ]; then + echo "ok 10 - -B file" +else + echo "not ok 10 - -B file" +fi +geli restore $backupfile md${no} +if [ $? -eq 0 ]; then + echo "ok 11 - -B file" +else + echo "not ok 11 - -B file" +fi +geli attach -p -k $keyfile md${no} 2>/dev/null +if [ $? -eq 0 ]; then + echo "ok 12 - -B file" +else + echo "not ok 12 - -B file" +fi +if [ -c /dev/md${no}.eli ]; then + echo "ok 13 - -B file" +else + echo "not ok 13 - -B file" +fi + +rm -f $backupfile $keyfile diff --git a/tests/sys/geom/class/eli/init_J_test.sh b/tests/sys/geom/class/eli/init_J_test.sh new file mode 100755 index 0000000..266a3d5 --- /dev/null +++ b/tests/sys/geom/class/eli/init_J_test.sh @@ -0,0 +1,126 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile0=`mktemp $base.XXXXXX` || exit 1 +keyfile1=`mktemp $base.XXXXXX` || exit 1 +passfile0=`mktemp $base.XXXXXX` || exit 1 +passfile1=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..150" + +dd if=/dev/random of=${keyfile0} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile1} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random bs=512 count=16 2>/dev/null | sha1 > ${passfile0} +dd if=/dev/random bs=512 count=16 2>/dev/null | sha1 > ${passfile1} + +i=1 +for iter in -1 0 64; do + geli init -i ${iter} -B none -J ${passfile0} -P md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli init -i ${iter} -B none -J ${passfile0} -P -K ${keyfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli init -i ${iter} -B none -J ${passfile0} -K ${keyfile0} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -p md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${keyfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${passfile0} -p md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${keyfile0} -k ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${keyfile0} -k ${keyfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} -k ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} -k ${keyfile0} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${keyfile0} | geli attach -j ${passfile0} -k - md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${passfile0} | geli attach -j - -k ${keyfile0} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + + geli init -i ${iter} -B none -J ${passfile0} -J ${passfile1} -P md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli init -i ${iter} -B none -J ${passfile0} -J ${passfile1} -P -K ${keyfile0} -K ${keyfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli init -i ${iter} -B none -J ${passfile0} -J ${passfile1} -K ${keyfile0} -K ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -p md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -p md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -k ${keyfile1} -p md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -j ${passfile0} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -j ${passfile0} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -k ${keyfile1} -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -k ${keyfile1} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -k ${keyfile0} -j ${passfile0} -j ${passfile1} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile0} -k ${keyfile1} -j ${passfile1} -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -k ${keyfile1} -k ${keyfile0} -j ${passfile1} -j ${passfile0} md${no} 2>/dev/null && echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli attach -j ${passfile0} -j ${passfile1} -k ${keyfile0} -k ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${passfile0} | geli attach -j - -j ${passfile1} -k ${keyfile0} -k ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${passfile1} | geli attach -j ${passfile0} -j - -k ${keyfile0} -k ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${keyfile0} | geli attach -j ${passfile0} -j ${passfile1} -k - -k ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${keyfile1} | geli attach -j ${passfile0} -j ${passfile1} -k ${keyfile0} -k - md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${keyfile0} ${keyfile1} | geli attach -j ${passfile0} -j ${passfile1} -k - md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + cat ${passfile0} ${passfile1} | awk '{printf "%s", $0}' | geli attach -j - -k ${keyfile0} -k ${keyfile1} md${no} 2>/dev/null || echo -n "not " + echo "ok ${i}"; i=$((i+1)) + geli detach md${no} || echo -n "not " + echo "ok ${i}"; i=$((i+1)) +done + +rm -f ${keyfile0} ${keyfile1} ${passfile0} ${passfile1} diff --git a/tests/sys/geom/class/eli/init_a_test.sh b/tests/sys/geom/class/eli/init_a_test.sh new file mode 100755 index 0000000..dbb24fe --- /dev/null +++ b/tests/sys/geom/class/eli/init_a_test.sh @@ -0,0 +1,60 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 + +echo "1..1380" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 8192; do + rnd=`mktemp $base.XXXXXX` || exit 1 + mdconfig -a -t malloc -s `expr $secsize \* $sectors + 512`b -u $no || exit 1 + + dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null + geli attach -p -k $keyfile md${no} + + secs=`diskinfo /dev/md${no}.eli | awk '{print $4}'` + + dd if=/dev/random of=${rnd} bs=${secsize} count=${secs} >/dev/null 2>&1 + dd if=${rnd} of=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null + + md_rnd=`dd if=${rnd} bs=${secsize} count=${secs} 2>/dev/null | md5` + md_ddev=`dd if=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null | md5` + + if [ ${md_rnd} = ${md_ddev} ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + rm -f $rnd + mdconfig -d -u $no + done + done +done + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/init_i_P_test.sh b/tests/sys/geom/class/eli/init_i_P_test.sh new file mode 100755 index 0000000..1c59a97 --- /dev/null +++ b/tests/sys/geom/class/eli/init_i_P_test.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..1" + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -i 64 -P -K ${keyfile} md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/init_test.sh b/tests/sys/geom/class/eli/init_test.sh new file mode 100755 index 0000000..71dd6e2 --- /dev/null +++ b/tests/sys/geom/class/eli/init_test.sh @@ -0,0 +1,65 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 + +echo "1..460" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for secsize in 512 1024 2048 4096 8192; do + rnd=`mktemp $base.XXXXXX` || exit 1 + mdconfig -a -t malloc -s `expr $secsize \* $sectors + 512`b -u $no || exit 1 + + dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + + geli init -B none -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null + geli attach -p -k $keyfile md${no} + + secs=`diskinfo /dev/md${no}.eli | awk '{print $4}'` + + dd if=/dev/random of=${rnd} bs=${secsize} count=${secs} >/dev/null 2>&1 + dd if=${rnd} of=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null + + md_rnd=`dd if=${rnd} bs=${secsize} count=${secs} 2>/dev/null | md5` + md_ddev=`dd if=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null | md5` + md_edev=`dd if=/dev/md${no} bs=${secsize} count=${secs} 2>/dev/null | md5` + + if [ ${md_rnd} = ${md_ddev} ]; then + echo "ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + if [ ${md_rnd} != ${md_edev} ]; then + echo "ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + rm -f $rnd + mdconfig -d -u $no + done +done + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/integrity_copy_test.sh b/tests/sys/geom/class/eli/integrity_copy_test.sh new file mode 100755 index 0000000..4c8efd3 --- /dev/null +++ b/tests/sys/geom/class/eli/integrity_copy_test.sh @@ -0,0 +1,99 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +sector=`mktemp $base.XXXXXX` || exit 1 + +echo "1..5520" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 8192; do + #mdconfig -a -t malloc -s `expr $secsize \* 2 + 512`b -u $no || exit 1 + mdconfig -a -t malloc -s $sectors -u $no || exit 1 + + dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null + geli attach -p -k $keyfile md${no} + + dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + + dd if=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok $i - small 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - small 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + # Copy first small sector to the second small sector. + # This should be detected as corruption. + dd if=/dev/md${no} of=${sector} bs=512 count=1 >/dev/null 2>&1 + dd if=${sector} of=/dev/md${no} bs=512 count=1 seek=1 >/dev/null 2>&1 + geli attach -p -k $keyfile md${no} + + dd if=/dev/md${no}.eli of=/dev/null bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "ok $i - small 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - small 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + ms=`diskinfo /dev/md${no} | awk '{print $3 - 512}'` + ns=`diskinfo /dev/md${no}.eli | awk '{print $4}'` + usecsize=`echo "($ms / $ns) - (($ms / $ns) % 512)" | bc` + + dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=2 >/dev/null 2>&1 + + dd if=/dev/md${no}.eli bs=${secsize} count=2 >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok $i - big 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - big 1 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + # Copy first big sector to the second big sector. + # This should be detected as corruption. + dd if=/dev/md${no} of=${sector} bs=${usecsize} count=1 >/dev/null 2>&1 + dd if=${sector} of=/dev/md${no} bs=${usecsize} count=1 seek=1 >/dev/null 2>&1 + geli attach -p -k $keyfile md${no} + + dd if=/dev/md${no}.eli of=/dev/null bs=${secsize} count=2 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "ok $i - big 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - big 2 aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + mdconfig -d -u $no + done + done +done + +rm -f $keyfile $sector diff --git a/tests/sys/geom/class/eli/integrity_data_test.sh b/tests/sys/geom/class/eli/integrity_data_test.sh new file mode 100755 index 0000000..7ea7c96b --- /dev/null +++ b/tests/sys/geom/class/eli/integrity_data_test.sh @@ -0,0 +1,69 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +sector=`mktemp $base.XXXXXX` || exit 1 + +echo "1..2760" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 8192; do + mdconfig -a -t malloc -s `expr $secsize \* 2 + 512`b -u $no || exit 1 + + dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null + geli attach -p -k $keyfile md${no} + + dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + + dd if=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + # Corrupt 8 bytes of data. + dd if=/dev/md${no} of=${sector} bs=512 count=1 >/dev/null 2>&1 + dd if=/dev/random of=${sector} bs=1 count=8 seek=64 conv=notrunc >/dev/null 2>&1 + dd if=${sector} of=/dev/md${no} bs=512 count=1 >/dev/null 2>&1 + geli attach -p -k $keyfile md${no} + + dd if=/dev/md${no}.eli of=/dev/null bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + mdconfig -d -u $no + done + done +done + +rm -f $keyfile $sector diff --git a/tests/sys/geom/class/eli/integrity_hmac_test.sh b/tests/sys/geom/class/eli/integrity_hmac_test.sh new file mode 100755 index 0000000..243eac9 --- /dev/null +++ b/tests/sys/geom/class/eli/integrity_hmac_test.sh @@ -0,0 +1,69 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +sector=`mktemp $base.XXXXXX` || exit 1 + +echo "1..2760" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 8192; do + mdconfig -a -t malloc -s `expr $secsize \* 2 + 512`b -u $no || exit 1 + + dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + + geli init -B none -a $aalgo -e $ealgo -l $keylen -P -K $keyfile -s $secsize md${no} 2>/dev/null + geli attach -p -k $keyfile md${no} + + dd if=/dev/random of=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + + dd if=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + # Corrupt 8 bytes of HMAC. + dd if=/dev/md${no} of=${sector} bs=512 count=1 >/dev/null 2>&1 + dd if=/dev/random of=${sector} bs=1 count=16 conv=notrunc >/dev/null 2>&1 + dd if=${sector} of=/dev/md${no} bs=512 count=1 >/dev/null 2>&1 + geli attach -p -k $keyfile md${no} + + dd if=/dev/md${no}.eli bs=${secsize} count=1 >/dev/null 2>&1 + if [ $? -ne 0 ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + mdconfig -d -u $no + done + done +done + +rm -f $keyfile $sector diff --git a/tests/sys/geom/class/eli/kill_test.sh b/tests/sys/geom/class/eli/kill_test.sh new file mode 100755 index 0000000..ccced9f --- /dev/null +++ b/tests/sys/geom/class/eli/kill_test.sh @@ -0,0 +1,97 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile1=`mktemp $base.XXXXXX` || exit 1 +keyfile2=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..9" + +dd if=/dev/random of=${keyfile1} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile2} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile1 md${no} +geli attach -p -k $keyfile1 md${no} +geli setkey -n 1 -P -K $keyfile2 md${no} + +# Kill attached provider. +geli kill md${no} +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi +sleep 1 +# Provider should be automatically detached. +if [ ! -c /dev/md{$no}.eli ]; then + echo "ok 2" +else + echo "not ok 2" +fi + +# We cannot use keyfile1 anymore. +geli attach -p -k $keyfile1 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +# We cannot use keyfile2 anymore. +geli attach -p -k $keyfile2 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi + +geli init -B none -P -K $keyfile1 md${no} +geli setkey -n 1 -p -k $keyfile1 -P -K $keyfile2 md${no} + +# Should be possible to attach with keyfile1. +geli attach -p -k $keyfile1 md${no} +if [ $? -eq 0 ]; then + echo "ok 5" +else + echo "not ok 5" +fi +geli detach md${no} + +# Should be possible to attach with keyfile2. +geli attach -p -k $keyfile2 md${no} +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi +geli detach md${no} + +# Kill detached provider. +geli kill md${no} +if [ $? -eq 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi + +# We cannot use keyfile1 anymore. +geli attach -p -k $keyfile1 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi + +# We cannot use keyfile2 anymore. +geli attach -p -k $keyfile2 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 9" +else + echo "not ok 9" +fi + +rm -f $keyfile1 $keyfile2 diff --git a/tests/sys/geom/class/eli/nokey_test.sh b/tests/sys/geom/class/eli/nokey_test.sh new file mode 100755 index 0000000..f32e1a4 --- /dev/null +++ b/tests/sys/geom/class/eli/nokey_test.sh @@ -0,0 +1,65 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..8" + +geli init -B none -P md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K ${keyfile} md${no} 2>/dev/null +if [ $? -eq 0 ]; then + echo "ok 2" +else + echo "not ok 2" +fi +geli attach -p md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi +geli attach -p -k ${keyfile} md${no} 2>/dev/null +if [ $? -eq 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi +geli setkey -n 0 -P md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 5" +else + echo "not ok 5" +fi +geli detach md${no} 2>/dev/null +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi +geli setkey -n 0 -p -P -K ${keyfile} md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi +geli setkey -n 0 -p -k ${keyfile} -P md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi + +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/onetime_a_test.sh b/tests/sys/geom/class/eli/onetime_a_test.sh new file mode 100755 index 0000000..4e26dfb --- /dev/null +++ b/tests/sys/geom/class/eli/onetime_a_test.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 + +echo "1..1380" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for aalgo in hmac/md5 hmac/sha1 hmac/ripemd160 hmac/sha256 hmac/sha384 hmac/sha512; do + for secsize in 512 1024 2048 4096 8192; do + rnd=`mktemp $base.XXXXXX` || exit 1 + mdconfig -a -t malloc -s `expr $secsize \* $sectors + 512`b -u $no || exit 1 + + geli onetime -a $aalgo -e $ealgo -l $keylen -s $secsize md${no} 2>/dev/null + + secs=`diskinfo /dev/md${no}.eli | awk '{print $4}'` + + dd if=/dev/random of=${rnd} bs=${secsize} count=${secs} >/dev/null 2>&1 + dd if=${rnd} of=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null + + md_rnd=`dd if=${rnd} bs=${secsize} count=${secs} 2>/dev/null | md5` + md_ddev=`dd if=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null | md5` + + if [ ${md_rnd} = ${md_ddev} ]; then + echo "ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - aalgo=${aalgo} ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + rm -f $rnd + mdconfig -d -u $no + done + done +done diff --git a/tests/sys/geom/class/eli/onetime_d_test.sh b/tests/sys/geom/class/eli/onetime_d_test.sh new file mode 100755 index 0000000..51a6abb --- /dev/null +++ b/tests/sys/geom/class/eli/onetime_d_test.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +mdconfig -a -t malloc -s $sectors -u $no || exit 1 + +echo "1..3" + +geli onetime -d md${no} +if [ -c /dev/md${no}.eli ]; then + echo "ok 1" +else + echo "not ok 1" +fi +# Be sure it doesn't detach on read. +dd if=/dev/md${no}.eli of=/dev/null 2>/dev/null +sleep 1 +if [ -c /dev/md${no}.eli ]; then + echo "ok 2" +else + echo "not ok 2" +fi +true > /dev/md${no}.eli +sleep 1 +if [ ! -c /dev/md${no}.eli ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +mdconfig -d -u $no diff --git a/tests/sys/geom/class/eli/onetime_test.sh b/tests/sys/geom/class/eli/onetime_test.sh new file mode 100755 index 0000000..17061d0 --- /dev/null +++ b/tests/sys/geom/class/eli/onetime_test.sh @@ -0,0 +1,59 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 + +echo "1..460" + +i=1 +for cipher in aes:0 aes:128 aes:256 \ + aes-xts:0 aes-xts:128 aes-xts:256 \ + aes-cbc:0 aes-cbc:128 aes-cbc:192 aes-cbc:256 \ + 3des:0 3des:192 \ + 3des-cbc:0 3des-cbc:192 \ + blowfish:0 blowfish:128 blowfish:160 blowfish:192 blowfish:224 \ + blowfish:256 blowfish:288 blowfish:320 blowfish:352 blowfish:384 \ + blowfish:416 blowfish:448 \ + blowfish-cbc:0 blowfish-cbc:128 blowfish-cbc:160 blowfish-cbc:192 blowfish-cbc:224 \ + blowfish-cbc:256 blowfish-cbc:288 blowfish-cbc:320 blowfish-cbc:352 blowfish-cbc:384 \ + blowfish-cbc:416 blowfish-cbc:448 \ + camellia:0 camellia:128 camellia:192 camellia:256 \ + camellia-cbc:0 camellia-cbc:128 camellia-cbc:192 camellia-cbc:256; do + ealgo=${cipher%%:*} + keylen=${cipher##*:} + for secsize in 512 1024 2048 4096 8192; do + rnd=`mktemp $base.XXXXXX` || exit 1 + mdconfig -a -t malloc -s `expr $secsize \* $sectors`b -u $no || exit 1 + + geli onetime -e $ealgo -l $keylen -s $secsize md${no} 2>/dev/null + + secs=`diskinfo /dev/md${no}.eli | awk '{print $4}'` + + dd if=/dev/random of=${rnd} bs=${secsize} count=${secs} >/dev/null 2>&1 + dd if=${rnd} of=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null + + md_rnd=`dd if=${rnd} bs=${secsize} count=${secs} 2>/dev/null | md5` + md_ddev=`dd if=/dev/md${no}.eli bs=${secsize} count=${secs} 2>/dev/null | md5` + md_edev=`dd if=/dev/md${no} bs=${secsize} count=${secs} 2>/dev/null | md5` + + if [ ${md_rnd} = ${md_ddev} ]; then + echo "ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + if [ ${md_rnd} != ${md_edev} ]; then + echo "ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + else + echo "not ok $i - ealgo=${ealgo} keylen=${keylen} sec=${secsize}" + fi + i=$((i+1)) + + geli detach md${no} + rm -f $rnd + mdconfig -d -u $no + done +done diff --git a/tests/sys/geom/class/eli/readonly_test.sh b/tests/sys/geom/class/eli/readonly_test.sh new file mode 100755 index 0000000..721ad62 --- /dev/null +++ b/tests/sys/geom/class/eli/readonly_test.sh @@ -0,0 +1,94 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +keyfile=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..11" + +dd if=/dev/random of=${keyfile} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile md${no} +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi + +geli attach -r -p -k $keyfile md${no} +if [ $? -eq 0 ]; then + echo "ok 2" +else + echo "not ok 2" +fi + +sh -c "true >/dev/md${no}.eli" 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi + +geli kill md${no} +if [ $? -eq 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi + +# kill should detach provider... +if [ ! -c /dev/md{$no}.eli ]; then + echo "ok 5" +else + echo "not ok 5" +fi + +# ...but not destroy the metadata. +geli attach -r -p -k $keyfile md${no} +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi + +geli setkey -n 1 -P -K /dev/null md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi + +geli delkey -n 0 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi + +geli delkey -f -n 0 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 9" +else + echo "not ok 9" +fi + +geli list md${no}.eli | egrep '^Flags: .*READ-ONLY' >/dev/null +if [ $? -eq 0 ]; then + echo "ok 10" +else + echo "not ok 10" +fi + +geli detach md${no} +if [ $? -eq 0 ]; then + echo "ok 11" +else + echo "not ok 11" +fi + +mdconfig -d -u $no +rm -f $keyfile diff --git a/tests/sys/geom/class/eli/resize_test.sh b/tests/sys/geom/class/eli/resize_test.sh new file mode 100755 index 0000000..67d6291 --- /dev/null +++ b/tests/sys/geom/class/eli/resize_test.sh @@ -0,0 +1,148 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +echo 1..27 + +BLK=512 +BLKS_PER_MB=2048 + +md=$(mdconfig -s40m) || exit 1 +unit=${md#md} +i=1 + +setsize() { + partszMB=$1 unitszMB=$2 + + { + echo a: $(($partszMB * $BLKS_PER_MB)) 0 4.2BSD 1024 8192 + echo c: $(($unitszMB * $BLKS_PER_MB)) 0 unused 0 0 + } | disklabel -R $md /dev/stdin +} + +# Initialise + +setsize 10 40 || echo -n "not " +echo ok $i - "Sized ${md}a to 10m" +i=$((i + 1)) + +echo secret >tmp.key +geli init -Bnone -PKtmp.key ${md}a || echo -n "not " +echo ok $i - "Initialised geli on ${md}a" +i=$((i + 1)) +geli attach -pk tmp.key ${md}a || echo -n "not " +echo ok $i - "Attached ${md}a as ${md}a.eli" +i=$((i + 1)) + +newfs -U ${md}a.eli >/dev/null || echo -n "not " +echo ok $i - "Initialised the filesystem on ${md}a.eli" +i=$((i + 1)) +out=$(fsck -tufs -y ${md}a.eli) +echo "$out" | fgrep -q MODIFIED && echo -n "not " +echo ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \ + "lines of output" +i=$((i + 1)) + + +# Doing a backup, resize & restore must be forced (with -f) as geli +# verifies that the provider size in the metadata matches the consumer. + +geli backup ${md}a tmp.meta || echo -n "not " +echo ok $i - "Backed up ${md}a metadata" +i=$((i + 1)) + +geli detach ${md}a.eli || echo -n "not " +echo ok $i - "Detached ${md}a.eli" +i=$((i + 1)) + +setsize 20 40 || echo -n "not " +echo ok $i - "Sized ${md}a to 20m" +i=$((i + 1)) +geli attach -pktmp.key ${md}a && echo -n "not " +echo ok $i - "Attaching ${md}a fails after resizing the consumer" +i=$((i + 1)) + +geli restore tmp.meta ${md}a && echo -n "not " +echo ok $i - "Restoring metadata on ${md}a.eli fails without -f" +i=$((i + 1)) +geli restore -f tmp.meta ${md}a || echo -n "not " +echo ok $i - "Restoring metadata on ${md}a.eli can be forced" +i=$((i + 1)) + +geli attach -pktmp.key ${md}a || echo -n "not " +echo ok $i - "Attaching ${md}a is now possible" +i=$((i + 1)) + +growfs -y ${md}a.eli >/dev/null || echo -n "not " +echo ok $i - "Extended the filesystem on ${md}a.eli" +i=$((i + 1)) + +out=$(fsck -tufs -y ${md}a.eli) +echo "$out" | fgrep -q MODIFIED && echo -n "not " +echo ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \ + "lines of output" +i=$((i + 1)) + + +# Now do the resize properly + +geli detach ${md}a.eli || echo -n "not " +echo ok $i - "Detached ${md}a.eli" +i=$((i + 1)) + +setsize 30 40 || echo -n "not " +echo ok $i - "Sized ${md}a to 30m" +i=$((i + 1)) + +geli resize -s20m ${md}a || echo -n "not " +echo ok $i - "Resizing works ok" +i=$((i + 1)) +geli resize -s20m ${md}a && echo -n "not " +echo ok $i - "Resizing doesn't work a 2nd time (no old metadata)" +i=$((i + 1)) + +geli attach -pktmp.key ${md}a || echo -n "not " +echo ok $i - "Attaching ${md}a works ok" +i=$((i + 1)) + +growfs -y ${md}a.eli >/dev/null || echo -n "not " +echo ok $i - "Extended the filesystem on ${md}a.eli" +i=$((i + 1)) + +out=$(fsck -tufs -y ${md}a.eli) +echo "$out" | fgrep -q MODIFIED && echo -n "not " +echo ok $i - "fsck says ${md}a.eli is clean," $(echo $(echo "$out" | wc -l)) \ + "lines of output" +i=$((i + 1)) + +geli detach ${md}a.eli +gpart destroy -F $md >/dev/null + + +# Verify that the man page example works, changing ada0 to $md, +# 1g to 20m, 2g to 30m and keyfile to tmp.key, and adding -B none +# to geli init. + +gpart create -s GPT $md || echo -n "not " +echo ok $i - "Installed a GPT on ${md}" +i=$((i + 1)) +gpart add -s 20m -t freebsd-ufs -i 1 $md || echo -n "not " +echo ok $i - "Added a 20m partition in slot 1" +i=$((i + 1)) +geli init -B none -K tmp.key -P ${md}p1 || echo -n "not " +echo ok $i - "Initialised geli on ${md}p1" +i=$((i + 1)) +gpart resize -s 30m -i 1 $md || echo -n "not " +echo ok $i - "Resized partition ${md}p1 to 30m" +i=$((i + 1)) +geli resize -s 20m ${md}p1 || echo -n "not " +echo ok $i - "Resized geli on ${md}p1 to 30m" +i=$((i + 1)) +geli attach -k tmp.key -p ${md}p1 || echo -n "not " +echo ok $i - "Attached ${md}p1.eli" +i=$((i + 1)) + +geli detach ${md}p1.eli + +rm tmp.* diff --git a/tests/sys/geom/class/eli/setkey_test.sh b/tests/sys/geom/class/eli/setkey_test.sh new file mode 100755 index 0000000..458100c --- /dev/null +++ b/tests/sys/geom/class/eli/setkey_test.sh @@ -0,0 +1,156 @@ +#!/bin/sh +# $FreeBSD$ + +. $(dirname $0)/conf.sh + +base=`basename $0` +sectors=100 +rnd=`mktemp $base.XXXXXX` || exit 1 +keyfile1=`mktemp $base.XXXXXX` || exit 1 +keyfile2=`mktemp $base.XXXXXX` || exit 1 +keyfile3=`mktemp $base.XXXXXX` || exit 1 +keyfile4=`mktemp $base.XXXXXX` || exit 1 +keyfile5=`mktemp $base.XXXXXX` || exit 1 +mdconfig -a -t malloc -s `expr $sectors + 1` -u $no || exit 1 + +echo "1..16" + +dd if=/dev/random of=${rnd} bs=512 count=${sectors} >/dev/null 2>&1 +hash1=`dd if=${rnd} bs=512 count=${sectors} 2>/dev/null | md5` +dd if=/dev/random of=${keyfile1} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile2} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile3} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile4} bs=512 count=16 >/dev/null 2>&1 +dd if=/dev/random of=${keyfile5} bs=512 count=16 >/dev/null 2>&1 + +geli init -B none -P -K $keyfile1 md${no} +geli attach -p -k $keyfile1 md${no} + +dd if=${rnd} of=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null +rm -f $rnd +hash2=`dd if=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null | md5` + +# Change current key (0) for attached provider. +geli setkey -P -K $keyfile2 md${no} +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi +geli detach md${no} + +# We cannot use keyfile1 anymore. +geli attach -p -k $keyfile1 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 2" +else + echo "not ok 2" +fi + +# Attach with new key. +geli attach -p -k $keyfile2 md${no} +if [ $? -eq 0 ]; then + echo "ok 3" +else + echo "not ok 3" +fi +hash3=`dd if=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null | md5` + +# Change key 1 for attached provider. +geli setkey -n 1 -P -K $keyfile3 md${no} +if [ $? -eq 0 ]; then + echo "ok 4" +else + echo "not ok 4" +fi +geli detach md${no} + +# Attach with key 1. +geli attach -p -k $keyfile3 md${no} +if [ $? -eq 0 ]; then + echo "ok 5" +else + echo "not ok 5" +fi +hash4=`dd if=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null | md5` +geli detach md${no} + +# Change current (1) key for detached provider. +geli setkey -p -k $keyfile3 -P -K $keyfile4 md${no} +if [ $? -eq 0 ]; then + echo "ok 6" +else + echo "not ok 6" +fi + +# We cannot use keyfile3 anymore. +geli attach -p -k $keyfile3 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 7" +else + echo "not ok 7" +fi + +# Attach with key 1. +geli attach -p -k $keyfile4 md${no} +if [ $? -eq 0 ]; then + echo "ok 8" +else + echo "not ok 8" +fi +hash5=`dd if=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null | md5` +geli detach md${no} + +# Change key 0 for detached provider. +geli setkey -n 0 -p -k $keyfile4 -P -K $keyfile5 md${no} +if [ $? -eq 0 ]; then + echo "ok 9" +else + echo "not ok 9" +fi + +# We cannot use keyfile2 anymore. +geli attach -p -k $keyfile2 md${no} 2>/dev/null +if [ $? -ne 0 ]; then + echo "ok 10" +else + echo "not ok 10" +fi + +# Attach with key 0. +geli attach -p -k $keyfile5 md${no} +if [ $? -eq 0 ]; then + echo "ok 11" +else + echo "not ok 11" +fi +hash6=`dd if=/dev/md${no}.eli bs=512 count=${sectors} 2>/dev/null | md5` +geli detach md${no} + +if [ ${hash1} = ${hash2} ]; then + echo "ok 12" +else + echo "not ok 12" +fi +if [ ${hash1} = ${hash3} ]; then + echo "ok 13" +else + echo "not ok 13" +fi +if [ ${hash1} = ${hash4} ]; then + echo "ok 14" +else + echo "not ok 14" +fi +if [ ${hash1} = ${hash5} ]; then + echo "ok 15" +else + echo "not ok 15" +fi +if [ ${hash1} = ${hash6} ]; then + echo "ok 16" +else + echo "not ok 16" +fi + +rm -f $keyfile1 $keyfile2 $keyfile3 $keyfile4 $keyfile5 diff --git a/tests/sys/geom/class/gate/1_test.sh b/tests/sys/geom/class/gate/1_test.sh new file mode 100755 index 0000000..fb6fd62 --- /dev/null +++ b/tests/sys/geom/class/gate/1_test.sh @@ -0,0 +1,61 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +base=`basename $0` +us=0 +while [ -c /dev/ggate${us} ]; do + : $(( us += 1 )) +done +conf=`mktemp $base.XXXXXX` || exit 1 +pidfile=ggated.pid +port=33080 + +work=$(attach_md -t malloc -s 1M) +src=$(attach_md -t malloc -s 1M) + +test_cleanup() +{ + ggatec destroy -f -u $us + pkill -F $pidfile + geom_test_cleanup +} +trap test_cleanup ABRT EXIT INT TERM + +dd if=/dev/random of=/dev/$work bs=1m count=1 conv=sync +dd if=/dev/random of=/dev/$src bs=1m count=1 conv=sync +src_checksum=$(md5 -q /dev/$src) + +echo "127.0.0.1 RW /dev/$work" > $conf + +if ! ggated -F $pidfile -p $port $conf; then + echo 'ggated failed to start' + echo 'Bail out!' + exit 1 +fi +if ! ggatec create -p $port -u $us 127.0.0.1 /dev/$work; then + echo 'ggatec create failed' + echo 'Bail out!' + exit 1 +fi + +dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1 +sleep 1 + +echo '1..2' + +work_checksum=$(md5 -q /dev/$work) +if [ "$work_checksum" != "$src_checksum" ]; then + echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum)" + echo "not ok 2 # SKIP" +else + echo 'ok 1 - md5 checksum' + + ggate_checksum=$(md5 -q /dev/ggate${us}) + if [ "$ggate_checksum" != "$src_checksum" ]; then + echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)" + else + echo 'ok 2 - md5 checksum' + fi +fi diff --git a/tests/sys/geom/class/gate/2_test.sh b/tests/sys/geom/class/gate/2_test.sh new file mode 100755 index 0000000..be89acc --- /dev/null +++ b/tests/sys/geom/class/gate/2_test.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +base=`basename $0` +us=46 +work=`mktemp -u $base.XXXXXX` || exit 1 +src=`mktemp -u $base.XXXXXX` || exit 1 + +test_cleanup() +{ + ggatel destroy -f -u $us + rm -f $work $src + + geom_test_cleanup +} +trap test_cleanup ABRT EXIT INT TERM + +dd if=/dev/random of=$work bs=1m count=1 conv=sync +dd if=/dev/random of=$src bs=1m count=1 conv=sync + +if ! ggatel create -u $us $work; then + echo 'ggatel create failed' + echo 'Bail out!' + exit 1 +fi + +dd if=${src} of=/dev/ggate${us} bs=1m count=1 +sleep 1 + +echo '1..2' + +src_checksum=$(md5 -q $src) +work_checksum=$(md5 -q $work) +if [ "$work_checksum" != "$src_checksum" ]; then + echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum) # TODO: bug 204616" + echo 'not ok 2 # SKIP' +else + echo 'ok 1 - md5 checksum' + + ggate_checksum=$(md5 -q /dev/ggate${us}) + if [ "$ggate_checksum" != "$src_checksum" ]; then + echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)" + else + echo 'ok 2 - md5 checksum' + fi +fi diff --git a/tests/sys/geom/class/gate/3_test.sh b/tests/sys/geom/class/gate/3_test.sh new file mode 100755 index 0000000..8901aca --- /dev/null +++ b/tests/sys/geom/class/gate/3_test.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +base=`basename $0` +us=47 + +test_cleanup() +{ + ggatel destroy -f -u $us + + geom_test_cleanup +} +trap test_cleanup ABRT EXIT INT TERM + +work=$(attach_md -t malloc -s 1M) +src=$(attach_md -t malloc -s 1M) + +dd if=/dev/random of=/dev/$work bs=1m count=1 conv=sync +dd if=/dev/random of=/dev/$src bs=1m count=1 conv=sync +src_checksum=$(md5 -q /dev/$src) + +if ! ggatel create -u $us /dev/$work; then + echo 'ggatel create failed' + echo 'Bail out!' + exit 1 +fi + +dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1 conv=sync +sleep 1 + +echo '1..2' + +work_checksum=$(md5 -q /dev/$work) +if [ "$work_checksum" != "$src_checksum" ]; then + echo "not ok 1 - md5 checksums didn't match ($work_checksum != $src_checksum)" + echo 'not ok 2 # SKIP' +else + echo 'ok 1 - md5 checksum' + + ggate_checksum=$(md5 -q /dev/ggate${us}) + if [ "$ggate_checksum" != "$src_checksum" ]; then + echo "not ok 2 - md5 checksums didn't match ($ggate_checksum != $src_checksum)" + else + echo 'ok 2 - md5 checksum' + fi +fi diff --git a/tests/sys/geom/class/gate/Makefile b/tests/sys/geom/class/gate/Makefile new file mode 100644 index 0000000..985d98f --- /dev/null +++ b/tests/sys/geom/class/gate/Makefile @@ -0,0 +1,11 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test +TAP_TESTS_SH+= 3_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/gate/conf.sh b/tests/sys/geom/class/gate/conf.sh new file mode 100755 index 0000000..4eede08 --- /dev/null +++ b/tests/sys/geom/class/gate/conf.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# $FreeBSD$ + +name="$(mktemp -u gate.XXXXXX)" +class="gate" +base=`basename $0` + +kldstat -q -m g_${class} || kldload geom_${class} || exit 1 + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/geom_subr.sh b/tests/sys/geom/class/geom_subr.sh new file mode 100644 index 0000000..a039377 --- /dev/null +++ b/tests/sys/geom/class/geom_subr.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# $FreeBSD$ + +if [ $(id -u) -ne 0 ]; then + echo 'Tests must be run as root' + echo 'Bail out!' + exit 1 +fi +kldstat -q -m g_${class} || g${class} load || exit 1 + +devwait() +{ + while :; do + if [ -c /dev/${class}/${name} ]; then + return + fi + sleep 0.2 + done +} + +# Need to keep track of the test md devices to avoid the scenario where a test +# failing will cause the other tests to bomb out, or a test failing will leave +# a large number of md(4) devices lingering around +: ${TMPDIR=/tmp} +export TMPDIR +TEST_MDS_FILE=${TMPDIR}/test_mds + +attach_md() +{ + local test_md + + test_md=$(mdconfig -a "$@") || exit + echo $test_md >> $TEST_MDS_FILE || exit + echo $test_md +} + +geom_test_cleanup() +{ + local test_md + + if [ -f $TEST_MDS_FILE ]; then + while read test_md; do + # The "#" tells the TAP parser this is a comment + echo "# Removing test memory disk: $test_md" + mdconfig -d -u $test_md + done < $TEST_MDS_FILE + fi +} diff --git a/tests/sys/geom/class/gpt/Makefile b/tests/sys/geom/class/gpt/Makefile new file mode 100644 index 0000000..be11f0a --- /dev/null +++ b/tests/sys/geom/class/gpt/Makefile @@ -0,0 +1,13 @@ +# $FreeBSD$ + +BINDIR= ${TESTSDIR} + +TAP_TESTS_PERL+= gctl_test + +PROGS+= gctl +MAN= + +DPADD.gctl+= ${LIBGEOM} +LDADD.gctl+= -lgeom + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/gpt/gctl.c b/tests/sys/geom/class/gpt/gctl.c new file mode 100644 index 0000000..136a616 --- /dev/null +++ b/tests/sys/geom/class/gpt/gctl.c @@ -0,0 +1,166 @@ +/*- + * Copyright (c) 2005, 2006 Marcel Moolenaar + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include <errno.h> +#include <limits.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <libgeom.h> + +struct retval { + struct retval *retval; + const char *param; + char *value; +}; + +struct retval *retval; +int verbose; + +static void +usage() +{ + fprintf(stdout, "usage: %s [-v] param[:len][=value] ...\n", + getprogname()); + exit(1); +} + +static int +parse(char *arg, char **param, char **value, int *len) +{ + char *e, *colon, *equal; + + if (*arg == '\0') + return (EINVAL); + + colon = strchr(arg, ':'); + equal = strchr(arg, '='); + if (colon == NULL && equal == NULL) + return (EINVAL); + if (colon == arg || equal == arg) + return (EINVAL); + if (colon != NULL && equal != NULL && equal < colon) + return (EINVAL); + + if (colon != NULL) + *colon++ = '\0'; + if (equal != NULL) + *equal++ = '\0'; + + *param = arg; + if (colon != NULL) { + /* Length specification. This parameter is RW. */ + if (*colon == '\0') + return (EINVAL); + *len = strtol(colon, &e, 0); + if (*e != '\0') + return (EINVAL); + if (*len <= 0 || *len > PATH_MAX) + return (EINVAL); + *value = malloc(*len); + if (*value == NULL) + return (ENOMEM); + memset(*value, 0, *len); + if (equal != NULL) { + if (strlen(equal) >= PATH_MAX) + return (ENOMEM); + strcpy(*value, equal); + } + } else { + /* This parameter is RO. */ + *len = -1; + if (*equal == '\0') + return (EINVAL); + *value = equal; + } + + return (0); +} + +int main(int argc, char *argv[]) +{ + struct retval *rv; + struct gctl_req *req; + char *param, *value; + const char *s; + int c, len; + + req = gctl_get_handle(); + gctl_ro_param(req, "class", -1, "GPT"); + + while ((c = getopt(argc, argv, "v")) != -1) { + switch (c) { + case 'v': + verbose = 1; + break; + case '?': + default: + usage(); + /* NOTREACHED */ + break; + } + } + + while (optind < argc) { + if (!parse(argv[optind++], ¶m, &value, &len)) { + if (len > 0) { + rv = malloc(sizeof(struct retval)); + rv->param = param; + rv->value = value; + rv->retval = retval; + retval = rv; + gctl_rw_param(req, param, len, value); + } else + gctl_ro_param(req, param, -1, value); + } + } + + if (verbose) + gctl_dump(req, stdout); + + s = gctl_issue(req); + if (s == NULL) { + printf("PASS"); + while (retval != NULL) { + rv = retval->retval; + printf(" %s=%s", retval->param, retval->value); + free(retval->value); + free(retval); + retval = rv; + } + printf("\n"); + } else + printf("FAIL %s\n", s); + + gctl_free(req); + return (0); +} diff --git a/tests/sys/geom/class/gpt/gctl_test.pl b/tests/sys/geom/class/gpt/gctl_test.pl new file mode 100755 index 0000000..0f30805 --- /dev/null +++ b/tests/sys/geom/class/gpt/gctl_test.pl @@ -0,0 +1,202 @@ +#!/usr/bin/env perl -w +# +# Copyright (c) 2005, 2006 Marcel Moolenaar +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +# $FreeBSD$ + +my $srcdir = `dirname $0`; +chomp $srcdir; + +my $tmpdir = $ENV{TMPDIR} || "/tmp"; + +my $cmd = "$srcdir/gctl"; +my $out = "$cmd.out"; +my $disk = "$tmpdir/disk-$$"; +my $mntpt = "$tmpdir/mount-$$"; + +my %steps = ( + "000" => "gctl", + "001" => "gctl verb=bogus", + "010" => "gctl verb=create", + "011" => "gctl verb=create provider=bogus", + "020" => "mdcfg create pristine", + "021" => "gctl verb=create provider=%dev% entries=-1", + "022" => "gctl verb=create provider=%dev% entries=128", + "023" => "gctl verb=create provider=%dev%", + "024" => "gctl verb=modify geom=%dev%", + "025" => "conf", + "030" => "gctl verb=add", + "031" => "gctl verb=add geom=bogus", + "032" => "gctl verb=add geom=%dev%", + "033" => "gctl verb=add geom=%dev% type=bogus", + "034" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace", + "035" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=1", + "036" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34", + "037" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=34 end=12345678", + "038" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=162 end=417 entry=129", + "039" => "gctl verb=add geom=%dev% type=ed0101b0-2a71-11da-ba81-003048416ace start=162 end=417 entry:8=5", + "040" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=161 entry=5", + "041" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=546", + "042" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=162 end=417", + "043" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=100 end=300", + "044" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=300 end=500", + "045" => "gctl verb=add geom=%dev% type=83d34ed5-c4ff-11da-b65b-000347c5d7f3 start=34 end=161 entry:8", + "046" => "gctl verb=add geom=%dev% type=d2bd4509-c4ff-11da-b4cc-00306e39b62f start=418 end=546 entry:8", + "047" => "conf", + "050" => "gctl verb=remove geom=%dev% entry=5", + "051" => "gctl verb=remove geom=%dev% entry=2", + "052" => "gctl verb=remove geom=%dev% entry=1", + "053" => "gctl verb=remove geom=%dev% entry=1", + "054" => "conf", + "060" => "gctl verb=add geom=%dev% type=516e7cb6-6ecf-11d6-8ff8-00022d09712b start=34 end=546 entry:8=1", + "061" => "mount %dev%p1", + "062" => "gctl verb=remove geom=%dev% entry=1", + "063" => "umount %dev%p1", + "064" => "gctl verb=remove geom=%dev% entry=1", + "065" => "conf", + "100" => "mdcfg destroy", + "110" => "mdcfg create corrupted", + "111" => "gctl verb=add geom=%dev%", + "120" => "mdcfg destroy", +); + +my %result = ( + "000" => "FAIL Verb missing", + "001" => "FAIL 22 verb 'bogus'", + "010" => "FAIL 87 provider", + "011" => "FAIL 22 provider 'bogus'", + "020" => "", + "021" => "FAIL 22 entries -1", + "022" => "PASS", + "023" => "FAIL 17 geom '%dev%'", + "024" => "FAIL 87 entry", + "025" => "b1856477950e5786898c8f01361196cf", + "030" => "FAIL 87 geom", + "031" => "FAIL 22 geom 'bogus'", + "032" => "FAIL 87 type", + "033" => "FAIL 22 type 'bogus'", + "034" => "FAIL 87 start", + "035" => "FAIL 22 start 1", + "036" => "FAIL 87 end", + "037" => "FAIL 22 end 12345678", + "038" => "FAIL 22 entry 129", + "039" => "PASS entry=5", + "040" => "FAIL 17 entry 5", + "041" => "FAIL 28 start/end 34/546", + "042" => "FAIL 28 start/end 162/417", + "043" => "FAIL 28 start/end 100/300", + "044" => "FAIL 28 start/end 300/500", + "045" => "PASS entry=1", + "046" => "PASS entry=2", + "047" => "50783a39eecfc62a29db24381e12b9d8", + "050" => "PASS", + "051" => "PASS", + "052" => "PASS", + "053" => "FAIL 2 entry 1", + "054" => "b1856477950e5786898c8f01361196cf", + "060" => "PASS", + "061" => "PASS", + "062" => "FAIL 16", + "063" => "PASS", + "064" => "PASS", + "065" => "b1856477950e5786898c8f01361196cf", + "100" => "", + "110" => "", + "111" => "FAIL 6 geom '%dev%'", + "120" => "", +); + +my $verbose = ""; +if (exists $ENV{'TEST_VERBOSE'}) { + $verbose = "-v"; +} + +# Make sure we have permission to use gctl... +if (`$cmd` =~ "^FAIL Permission denied") { + print "1..0 # SKIP not enough permission\n"; + unlink $cmd; + exit 0; +} + +$count = keys (%steps); +print "1..$count\n"; + +my $nr = 1; +my $dev = "n/a"; +foreach my $key (sort keys %steps) { + my ($action, $args) = split(/ /, $steps{$key}, 2); + my $res = $result{$key}; + $args = "" if (not defined $args); + $args =~ s/%dev%/$dev/g; + $res =~ s/%dev%/$dev/g; + + if ($action =~ "^gctl") { + system("$cmd $verbose $args | tee $out 2>&1"); + $st = `tail -1 $out`; + if ($st =~ "^$res") { + print "ok $nr \# gctl($key)\n"; + } else { + print "not ok $nr \# gctl($key) - $st\n"; + } + unlink $out; + } elsif ($action =~ "^mdcfg") { + if ($args =~ "^create") { + system("dd if=/dev/zero of=$disk count=1024 2>&1"); + if ($args =~ "corrupted") { + system("gpt create -p $disk"); + } + $dev = `mdconfig -a -t vnode -f $disk`; + chomp $dev; + } elsif ($args =~ "^destroy") { + $dev =~ s/md/-u /g; + system("mdconfig -d $dev"); + unlink $disk; + $dev = "n/a"; + } + print "ok $nr \# mdcfg($key)\n"; + } elsif ($action =~ "^conf") { + system("sysctl -b kern.geom.conftxt | grep -a $dev | sed -e s:$disk:DISK:g -e s:$dev:DEV:g | sort | md5 -p | tee $out 2>&1"); + $st = `tail -1 $out`; + if ($st =~ "^$res") { + print "ok $nr \# conf($key)\n"; + } else { + print "not ok $nr \# conf($key) - $st\n"; + } + unlink $out; + } elsif ($action =~ "^mount") { + system("mkdir $mntpt-$args"); + system("newfs $args"); + system("mount -t ufs /dev/$args $mntpt-$args"); + print "ok $nr \# mount($key)\n"; + } elsif ($action =~ "^umount") { + system("umount $mntpt-$args"); + system("rmdir $mntpt-$args"); + print "ok $nr \# umount($key)\n"; + } + $nr += 1; +} + +unlink $cmd; +exit 0; diff --git a/tests/sys/geom/class/mirror/1_test.sh b/tests/sys/geom/class/mirror/1_test.sh new file mode 100755 index 0000000..af82a14 --- /dev/null +++ b/tests/sys/geom/class/mirror/1_test.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +gmirror label $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +# Size of created device should be 1MB - 512b. + +size=`diskinfo /dev/mirror/${name} | awk '{print $3}'` + +if [ $size -eq 1048064 ]; then + echo "ok 1" +else + echo "not ok 1" +fi diff --git a/tests/sys/geom/class/mirror/2_test.sh b/tests/sys/geom/class/mirror/2_test.sh new file mode 100755 index 0000000..5605c44 --- /dev/null +++ b/tests/sys/geom/class/mirror/2_test.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..4" + +balance="round-robin" +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi +dd if=/dev/${us0} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi +dd if=/dev/${us1} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +dd if=/dev/${us2} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/3_test.sh b/tests/sys/geom/class/mirror/3_test.sh new file mode 100755 index 0000000..b7f8525 --- /dev/null +++ b/tests/sys/geom/class/mirror/3_test.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..5" + +balance="round-robin" +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +gmirror remove $name ${us0} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +gmirror remove $name ${us1} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +gmirror remove $name ${us2} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +# mirror/${name} should be removed. +if [ -c /dev/${name} ]; then + echo "not ok 5" +else + echo "ok 5" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/4_test.sh b/tests/sys/geom/class/mirror/4_test.sh new file mode 100755 index 0000000..6efcc02 --- /dev/null +++ b/tests/sys/geom/class/mirror/4_test.sh @@ -0,0 +1,66 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..5" + +balance="load" +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +gmirror remove $name ${us0} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +gmirror remove $name ${us1} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +gmirror remove $name ${us2} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +gmirror destroy $name + +# mirror/${name} should be removed. +if [ -c /dev/${name} ]; then + echo "not ok 5" +else + echo "ok 5" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/5_test.sh b/tests/sys/geom/class/mirror/5_test.sh new file mode 100755 index 0000000..3a176b5 --- /dev/null +++ b/tests/sys/geom/class/mirror/5_test.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..5" + +balance="split" +ddbs=8192 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance -s `expr $ddbs / 2` $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +gmirror remove $name ${us0} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +gmirror remove $name ${us1} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +gmirror remove $name ${us2} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +# mirror/${name} should be removed. +if [ -c /dev/${name} ]; then + echo "not ok 5" +else + echo "ok 5" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/6_test.sh b/tests/sys/geom/class/mirror/6_test.sh new file mode 100755 index 0000000..68036e9 --- /dev/null +++ b/tests/sys/geom/class/mirror/6_test.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..2" + +balance="split" +ddbs=8192 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance -s `expr $ddbs / 2` $name /dev/${us0} /dev/${us1} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +dd if=/dev/zero of=/dev/${us2} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +# Connect disk to the mirror. +gmirror insert ${name} ${us2} +# Wait for synchronization. +sleep 1 +dd if=/dev/${us2} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/7_test.sh b/tests/sys/geom/class/mirror/7_test.sh new file mode 100755 index 0000000..f5bf71a --- /dev/null +++ b/tests/sys/geom/class/mirror/7_test.sh @@ -0,0 +1,64 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..5" + +balance="prefer" +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us1=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 +us2=$(attach_md -t malloc -s `expr $nblocks1 + 1`) || exit 1 + +gmirror label -b $balance $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/mirror/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +gmirror remove $name ${us0} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +gmirror remove $name ${us1} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +gmirror remove $name ${us2} +dd if=/dev/mirror/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +# mirror/${name} should be removed. +if [ -c /dev/${name} ]; then + echo "not ok 5" +else + echo "ok 5" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/mirror/Makefile b/tests/sys/geom/class/mirror/Makefile new file mode 100644 index 0000000..cf3784f --- /dev/null +++ b/tests/sys/geom/class/mirror/Makefile @@ -0,0 +1,15 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test +TAP_TESTS_SH+= 3_test +TAP_TESTS_SH+= 4_test +TAP_TESTS_SH+= 5_test +TAP_TESTS_SH+= 6_test +TAP_TESTS_SH+= 7_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/mirror/conf.sh b/tests/sys/geom/class/mirror/conf.sh new file mode 100755 index 0000000..d8595f1 --- /dev/null +++ b/tests/sys/geom/class/mirror/conf.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# $FreeBSD$ + +name="$(mktemp -u mirror.XXXXXX)" +class="mirror" +base=`basename $0` + +gmirror_test_cleanup() +{ + [ -c /dev/$class/$name ] && gmirror destroy $name + geom_test_cleanup +} +trap gmirror_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/nop/1_test.sh b/tests/sys/geom/class/nop/1_test.sh new file mode 100755 index 0000000..4d6b65d --- /dev/null +++ b/tests/sys/geom/class/nop/1_test.sh @@ -0,0 +1,20 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +us=$(attach_md -t malloc -s 1M) || exit 1 + +gnop create /dev/${us} || exit 1 + +# Size of created device should be 1MB. + +size=`diskinfo /dev/${us}.nop | awk '{print $3}'` + +if [ $size -eq 1048576 ]; then + echo "ok 1" +else + echo "not ok 1" +fi diff --git a/tests/sys/geom/class/nop/2_test.sh b/tests/sys/geom/class/nop/2_test.sh new file mode 100755 index 0000000..7422345 --- /dev/null +++ b/tests/sys/geom/class/nop/2_test.sh @@ -0,0 +1,26 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +echo "1..1" + +dd if=/dev/random of=${src} bs=1m count=1 >/dev/null 2>&1 + +us=$(attach_md -t malloc -s 1M) || exit 1 + +gnop create /dev/${us} || exit 1 + +dd if=${src} of=/dev/${us}.nop bs=1m count=1 >/dev/null 2>&1 +dd if=/dev/${us}.nop of=${dst} bs=1m count=1 >/dev/null 2>&1 + +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/nop/Makefile b/tests/sys/geom/class/nop/Makefile new file mode 100644 index 0000000..81a4e99 --- /dev/null +++ b/tests/sys/geom/class/nop/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/nop/conf.sh b/tests/sys/geom/class/nop/conf.sh new file mode 100755 index 0000000..e38e10c --- /dev/null +++ b/tests/sys/geom/class/nop/conf.sh @@ -0,0 +1,14 @@ +#!/bin/sh +# $FreeBSD$ + +class="nop" +base=`basename $0` + +gnop_test_cleanup() +{ + [ -c /dev/${us}.nop ] && gnop destroy ${us}.nop + geom_test_cleanup +} +trap gnop_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/raid3/10_test.sh b/tests/sys/geom/class/raid3/10_test.sh new file mode 100755 index 0000000..edd827d --- /dev/null +++ b/tests/sys/geom/class/raid3/10_test.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label -r $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/11_test.sh b/tests/sys/geom/class/raid3/11_test.sh new file mode 100755 index 0000000..0407261 --- /dev/null +++ b/tests/sys/geom/class/raid3/11_test.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label -w $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/12_test.sh b/tests/sys/geom/class/raid3/12_test.sh new file mode 100755 index 0000000..10533c6 --- /dev/null +++ b/tests/sys/geom/class/raid3/12_test.sh @@ -0,0 +1,38 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +nblocks1=9 +nblocks2=`expr $nblocks1 - 1` +nblocks3=`expr $nblocks2 / 2` + +us0=$(attach_md -t malloc -s $nblocks1) || exit 1 +us1=$(attach_md -t malloc -s $nblocks1) || exit 1 +us2=$(attach_md -t malloc -s $nblocks1) || exit 1 + +dd if=/dev/random of=/dev/${us0} count=$nblocks1 >/dev/null 2>&1 +dd if=/dev/random of=/dev/${us1} count=$nblocks1 >/dev/null 2>&1 +dd if=/dev/random of=/dev/${us2} count=$nblocks1 >/dev/null 2>&1 + +graid3 label -w $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait +# Wait for synchronization. +sleep 2 +graid3 stop $name +# Break one component. +dd if=/dev/random of=/dev/${us1} count=$nblocks2 >/dev/null 2>&1 +# Provoke retaste of the rest components. +true > /dev/${us0} +true > /dev/${us2} +sleep 1 + +dd if=/dev/raid3/${name} of=/dev/null bs=1k count=$nblocks3 >/dev/null 2>&1 +ec=$? +if [ $ec -eq 0 ]; then + echo "not ok 1" +else + echo "ok 1" +fi diff --git a/tests/sys/geom/class/raid3/1_test.sh b/tests/sys/geom/class/raid3/1_test.sh new file mode 100755 index 0000000..4c0b4a2 --- /dev/null +++ b/tests/sys/geom/class/raid3/1_test.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..2" + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} 2>/dev/null || exit 1 +devwait + +# Size of created device should be 2MB - 1024B. + +mediasize=`diskinfo /dev/raid3/${name} | awk '{print $3}'` +if [ $mediasize -eq 2096128 ]; then + echo "ok 1" +else + echo "not ok 1" +fi +sectorsize=`diskinfo /dev/raid3/${name} | awk '{print $2}'` +if [ $sectorsize -eq 1024 ]; then + echo "ok 2" +else + echo "not ok 2" +fi diff --git a/tests/sys/geom/class/raid3/2_test.sh b/tests/sys/geom/class/raid3/2_test.sh new file mode 100755 index 0000000..22ebd38 --- /dev/null +++ b/tests/sys/geom/class/raid3/2_test.sh @@ -0,0 +1,32 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/3_test.sh b/tests/sys/geom/class/raid3/3_test.sh new file mode 100755 index 0000000..f068b06 --- /dev/null +++ b/tests/sys/geom/class/raid3/3_test.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Reading without one DATA component (so with parity). +# +graid3 remove -n 1 $name +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/4_test.sh b/tests/sys/geom/class/raid3/4_test.sh new file mode 100755 index 0000000..810f13d --- /dev/null +++ b/tests/sys/geom/class/raid3/4_test.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +# +# Writing without one DATA component. +# +graid3 remove -n 1 $name +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/5_test.sh b/tests/sys/geom/class/raid3/5_test.sh new file mode 100755 index 0000000..7bc8d42 --- /dev/null +++ b/tests/sys/geom/class/raid3/5_test.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +# +# Writing without PARITY component. +# +graid3 remove -n 2 $name +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/6_test.sh b/tests/sys/geom/class/raid3/6_test.sh new file mode 100755 index 0000000..20bf192 --- /dev/null +++ b/tests/sys/geom/class/raid3/6_test.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Rebuild of DATA component. +# +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +graid3 insert -n 1 $name md${us1} +sleep 1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/7_test.sh b/tests/sys/geom/class/raid3/7_test.sh new file mode 100755 index 0000000..23666f8 --- /dev/null +++ b/tests/sys/geom/class/raid3/7_test.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Rebuild of PARITY component. +# +graid3 remove -n 2 $name +dd if=/dev/zero of=/dev/${us2} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +graid3 insert -n 2 $name md${us2} +sleep 1 +# Remove DATA component, so PARITY component can be used while reading. +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/8_test.sh b/tests/sys/geom/class/raid3/8_test.sh new file mode 100755 index 0000000..2eb9b1a --- /dev/null +++ b/tests/sys/geom/class/raid3/8_test.sh @@ -0,0 +1,39 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +# +# Writing without DATA component and rebuild of DATA component. +# +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +graid3 insert -n 1 $name md${us1} +sleep 1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/9_test.sh b/tests/sys/geom/class/raid3/9_test.sh new file mode 100755 index 0000000..0ef010a --- /dev/null +++ b/tests/sys/geom/class/raid3/9_test.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +us0=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us1=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 +us2=$(attach_md -t malloc -s $(expr $nblocks1 + 1)) || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +graid3 label $name /dev/${us0} /dev/${us1} /dev/${us2} || exit 1 +devwait + +# +# Writing without PARITY component and rebuild of PARITY component. +# +graid3 remove -n 2 $name +dd if=/dev/zero of=/dev/${us2} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +graid3 insert -n 2 $name md${us2} +sleep 1 +# Remove DATA component, so PARITY component can be used while reading. +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/raid3/Makefile b/tests/sys/geom/class/raid3/Makefile new file mode 100644 index 0000000..c1c95f1 --- /dev/null +++ b/tests/sys/geom/class/raid3/Makefile @@ -0,0 +1,20 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test +TAP_TESTS_SH+= 3_test +TAP_TESTS_SH+= 4_test +TAP_TESTS_SH+= 5_test +TAP_TESTS_SH+= 6_test +TAP_TESTS_SH+= 7_test +TAP_TESTS_SH+= 8_test +TAP_TESTS_SH+= 9_test +TAP_TESTS_SH+= 10_test +TAP_TESTS_SH+= 11_test +TAP_TESTS_SH+= 12_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/raid3/conf.sh b/tests/sys/geom/class/raid3/conf.sh new file mode 100755 index 0000000..4f141df --- /dev/null +++ b/tests/sys/geom/class/raid3/conf.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +class="raid3" +base=`basename $0` + +graid3_test_cleanup() +{ + [ -c /dev/$class/$name ] && graid3 stop $name + geom_test_cleanup +} +trap graid3_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/shsec/1_test.sh b/tests/sys/geom/class/shsec/1_test.sh new file mode 100755 index 0000000..ab0bb37 --- /dev/null +++ b/tests/sys/geom/class/shsec/1_test.sh @@ -0,0 +1,28 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..2" + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +gshsec label $name /dev/${us0} /dev/${us1} /dev/${us2} 2>/dev/null || exit 1 +devwait + +# Size of created device should be 1MB - 512B. + +mediasize=`diskinfo /dev/shsec/${name} | awk '{print $3}'` +if [ $mediasize -eq 1048064 ]; then + echo "ok 1" +else + echo "not ok 1" +fi +sectorsize=`diskinfo /dev/shsec/${name} | awk '{print $2}'` +if [ $sectorsize -eq 512 ]; then + echo "ok 2" +else + echo "not ok 2" +fi diff --git a/tests/sys/geom/class/shsec/2_test.sh b/tests/sys/geom/class/shsec/2_test.sh new file mode 100755 index 0000000..9dfe36a --- /dev/null +++ b/tests/sys/geom/class/shsec/2_test.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..4" + +nblocks1=1024 +nblocks2=`expr $nblocks1 + 1` +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} count=$nblocks1 >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s $nblocks2) || exit 1 +us1=$(attach_md -t malloc -s $nblocks2) || exit 1 +us2=$(attach_md -t malloc -s $nblocks2) || exit 1 + +gshsec label $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +dd if=${src} of=/dev/shsec/${name} count=$nblocks1 >/dev/null 2>&1 + +dd if=/dev/shsec/${name} of=${dst} count=$nblocks1 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +dd if=/dev/${us0} of=${dst} count=$nblocks1 >/dev/null 2>&1 +if [ `md5 -q ${src}` = `md5 -q ${dst}` ]; then + echo "not ok 2" +else + echo "ok 2" +fi + +dd if=/dev/${us1} of=${dst} count=$nblocks1 >/dev/null 2>&1 +if [ `md5 -q ${src}` = `md5 -q ${dst}` ]; then + echo "not ok 3" +else + echo "ok 3" +fi + +dd if=/dev/${us2} of=${dst} count=$nblocks1 >/dev/null 2>&1 +if [ `md5 -q ${src}` = `md5 -q ${dst}` ]; then + echo "not ok 4" +else + echo "ok 4" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/shsec/Makefile b/tests/sys/geom/class/shsec/Makefile new file mode 100644 index 0000000..81a4e99 --- /dev/null +++ b/tests/sys/geom/class/shsec/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/shsec/conf.sh b/tests/sys/geom/class/shsec/conf.sh new file mode 100755 index 0000000..7800eb7 --- /dev/null +++ b/tests/sys/geom/class/shsec/conf.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# $FreeBSD$ + +name="$(mktemp -u shsec.XXXXXX)" +class="shsec" +base=`basename $0` + +shsec_test_cleanup() +{ + [ -c /dev/$class/$name ] && gshsec stop $name + geom_test_cleanup +} +trap shsec_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/stripe/1_test.sh b/tests/sys/geom/class/stripe/1_test.sh new file mode 100755 index 0000000..7923763 --- /dev/null +++ b/tests/sys/geom/class/stripe/1_test.sh @@ -0,0 +1,23 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +gstripe create -s 16384 $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +# Size of created device should be 1MB * 3. + +size=`diskinfo /dev/stripe/${name} | awk '{print $3}'` + +if [ $size -eq 3145728 ]; then + echo "ok 1" +else + echo "not ok 1" +fi diff --git a/tests/sys/geom/class/stripe/2_test.sh b/tests/sys/geom/class/stripe/2_test.sh new file mode 100755 index 0000000..f6e11f5 --- /dev/null +++ b/tests/sys/geom/class/stripe/2_test.sh @@ -0,0 +1,30 @@ +#!/bin/sh +# $FreeBSD$ + +. `dirname $0`/conf.sh + +echo "1..1" + +tsize=3 +src=`mktemp $base.XXXXXX` || exit 1 +dst=`mktemp $base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=1m count=$tsize >/dev/null 2>&1 + +us0=$(attach_md -t malloc -s 1M) || exit 1 +us1=$(attach_md -t malloc -s 2M) || exit 1 +us2=$(attach_md -t malloc -s 3M) || exit 1 + +gstripe create -s 8192 $name /dev/$us0 /dev/$us1 /dev/$us2 || exit 1 +devwait + +dd if=${src} of=/dev/stripe/${name} bs=1m count=$tsize >/dev/null 2>&1 +dd if=/dev/stripe/${name} of=${dst} bs=1m count=$tsize >/dev/null 2>&1 + +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "not ok 1" +else + echo "ok 1" +fi + +rm -f ${src} ${dst} diff --git a/tests/sys/geom/class/stripe/Makefile b/tests/sys/geom/class/stripe/Makefile new file mode 100644 index 0000000..81a4e99 --- /dev/null +++ b/tests/sys/geom/class/stripe/Makefile @@ -0,0 +1,10 @@ +# $FreeBSD$ + +TAP_TESTS_SH+= 1_test +TAP_TESTS_SH+= 2_test + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh +FILESDIR= ${TESTSDIR} + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/stripe/conf.sh b/tests/sys/geom/class/stripe/conf.sh new file mode 100755 index 0000000..fd0f41c --- /dev/null +++ b/tests/sys/geom/class/stripe/conf.sh @@ -0,0 +1,15 @@ +#!/bin/sh +# $FreeBSD$ + +name="$(mktemp -u stripe.XXXXXX)" +class="stripe" +base=`basename $0` + +gstripe_test_cleanup() +{ + [ -c /dev/$class/$name ] && gstripe destroy $name + geom_test_cleanup +} +trap gstripe_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh diff --git a/tests/sys/geom/class/uzip/1_test.sh b/tests/sys/geom/class/uzip/1_test.sh new file mode 100755 index 0000000..222b6c9 --- /dev/null +++ b/tests/sys/geom/class/uzip/1_test.sh @@ -0,0 +1,22 @@ +#!/bin/sh +# $FreeBSD$ + +testsdir=$(dirname $0) +. $testsdir/conf.sh + +echo "1..1" + +UUE=$testsdir/1.img.uzip.uue +uudecode $UUE +us0=$(attach_md -f $(basename $UUE .uue)) || exit 1 +sleep 1 + +mount -o ro /dev/${us0}.uzip "${mntpoint}" || exit 1 + +#cat "${mntpoint}/etalon.txt" +diff -I '\$FreeBSD.*\$' -u $testsdir/etalon/etalon.txt "${mntpoint}/etalon.txt" +if [ $? -eq 0 ]; then + echo "ok 1" +else + echo "not ok 1" +fi diff --git a/tests/sys/geom/class/uzip/Makefile b/tests/sys/geom/class/uzip/Makefile new file mode 100644 index 0000000..b4e1d7d --- /dev/null +++ b/tests/sys/geom/class/uzip/Makefile @@ -0,0 +1,36 @@ +# +# $FreeBSD$ +# +# Regression test for geom_uzip. +# + +IMAGE= 1.img +ZIMAGE= ${IMAGE}.uzip +UZIMAGE= ${ZIMAGE}.uue + +CLEANFILES+= ${IMAGE} ${UZIMAGE} ${ZIMAGE} + +${IMAGE}: + makefs -s 1048576 ${.TARGET} ${.CURDIR}/etalon + +${ZIMAGE}: ${IMAGE} + mkuzip -o ${.TARGET} ${.ALLSRC} + +${UZIMAGE}: ${IMAGE} ${ZIMAGE} + printf "#\n# $$" >${.TARGET} + printf "FreeBSD$$\n#\n\n" >> ${.TARGET} + uuencode ${ZIMAGE} ${ZIMAGE} >>${.TARGET} + +FILES+= conf.sh +FILESNAME_conf.sh= conf.sh + +FILES+= ${UZIMAGE} +FILESDIR= ${TESTSDIR} + +FILESGROUPS= FILES etalon +etalon+= etalon/etalon.txt +etalonDIR= ${TESTSDIR}/etalon + +TAP_TESTS_SH+= 1_test + +.include <bsd.test.mk> diff --git a/tests/sys/geom/class/uzip/conf.sh b/tests/sys/geom/class/uzip/conf.sh new file mode 100755 index 0000000..8a3b459 --- /dev/null +++ b/tests/sys/geom/class/uzip/conf.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# $FreeBSD$ + +class="uzip" +base=`basename $0` + +uzip_test_cleanup() +{ + umount $mntpoint + rmdir $mntpoint + geom_test_cleanup +} +trap uzip_test_cleanup ABRT EXIT INT TERM + +. `dirname $0`/../geom_subr.sh + +# NOTE: make sure $TMPDIR has been set by geom_subr.sh if unset [by kyua, etc] +mntpoint=$(mktemp -d tmp.XXXXXX) || exit diff --git a/tests/sys/geom/class/uzip/etalon/etalon.txt b/tests/sys/geom/class/uzip/etalon/etalon.txt new file mode 100644 index 0000000..cb8acf3 --- /dev/null +++ b/tests/sys/geom/class/uzip/etalon/etalon.txt @@ -0,0 +1,43 @@ +# +# $FreeBSD$ +# + +JABBERWOCKY + +Lewis Carroll +(from Through the Looking-Glass and What Alice Found There, 1872) + +`Twas brillig, and the slithy toves +Did gyre and gimble in the wabe: +All mimsy were the borogoves, +And the mome raths outgrabe. + +"Beware the Jabberwock, my son! +The jaws that bite, the claws that catch! +Beware the Jubjub bird, and shun +The frumious Bandersnatch!" + +He took his vorpal sword in hand: +Long time the manxome foe he sought -- +So rested he by the Tumtum tree, +And stood awhile in thought. + +And, as in uffish thought he stood, +The Jabberwock, with eyes of flame, +Came whiffling through the tulgey wood, +And burbled as it came! + +One, two! One, two! And through and through +The vorpal blade went snicker-snack! +He left it dead, and with its head +He went galumphing back. + +"And, has thou slain the Jabberwock? +Come to my arms, my beamish boy! +O frabjous day! Callooh! Callay!' +He chortled in his joy. + +`Twas brillig, and the slithy toves +Did gyre and gimble in the wabe; +All mimsy were the borogoves, +And the mome raths outgrabe. |