Changeset View
Changeset View
Standalone View
Standalone View
head/tests/sys/geom/class/gate/ggate_test.sh
Property | Old Value | New Value |
---|---|---|
svn:eol-style | null | native \ No newline at end of property |
svn:executable | null | * \ No newline at end of property |
svn:keywords | null | FreeBSD=%H \ No newline at end of property |
svn:mime-type | null | text/plain \ No newline at end of property |
# $FreeBSD$ | |||||
PIDFILE=ggated.pid | |||||
PLAINFILES=plainfiles | |||||
PORT=33080 | |||||
CONF=gg.exports | |||||
RETRIES=16 | |||||
atf_test_case ggated cleanup | |||||
ggated_head() | |||||
{ | |||||
atf_set "descr" "ggated can proxy geoms" | |||||
atf_set "require.progs" "ggatec ggated" | |||||
atf_set "require.user" "root" | |||||
atf_set "timeout" 60 | |||||
} | |||||
ggated_body() | |||||
{ | |||||
us=$(alloc_ggate_dev) | |||||
work=$(alloc_md) | |||||
src=$(alloc_md) | |||||
dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc | |||||
dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc | |||||
echo $CONF >> $PLAINFILES | |||||
echo "127.0.0.1 RW /dev/$work" > $CONF | |||||
atf_check ggated -p $PORT -F $PIDFILE $CONF | |||||
for try in `jot $RETRIES`; do | |||||
ggatec create -p $PORT -u $us 127.0.0.1 /dev/$work && break | |||||
# wait for ggated to be ready | |||||
sleep 0.25 | |||||
done | |||||
if [ "$try" -eq "$RETRIES" ]; then | |||||
atf_fail "ggatec create failed" | |||||
fi | |||||
for try in `jot $RETRIES`; do | |||||
dd if=/dev/${src} of=/dev/ggate${us} bs=1m count=1 conv=notrunc\ | |||||
&& break | |||||
# Wait for /dev/ggate${us} to be ready | |||||
sleep 0.25 | |||||
done | |||||
if [ "$try" -eq "$RETRIES" ]; then | |||||
atf_fail "dd failed; /dev/ggate${us} isn't working" | |||||
fi | |||||
checksum /dev/$src /dev/$work | |||||
} | |||||
ggated_cleanup() | |||||
{ | |||||
common_cleanup | |||||
} | |||||
atf_test_case ggatel_file cleanup | |||||
ggatel_file_head() | |||||
{ | |||||
atf_set "descr" "ggatel can proxy files" | |||||
atf_set "require.progs" "ggatel" | |||||
atf_set "require.user" "root" | |||||
atf_set "timeout" 15 | |||||
} | |||||
ggatel_file_body() | |||||
{ | |||||
us=$(alloc_ggate_dev) | |||||
echo src work >> ${PLAINFILES} | |||||
dd if=/dev/random of=work bs=1m count=1 | |||||
dd if=/dev/random of=src bs=1m count=1 | |||||
atf_check ggatel create -u $us work | |||||
dd if=src of=/dev/ggate${us} bs=1m count=1 conv=notrunc | |||||
checksum src work | |||||
} | |||||
ggatel_file_cleanup() | |||||
{ | |||||
common_cleanup | |||||
} | |||||
atf_test_case ggatel_md cleanup | |||||
ggatel_md_head() | |||||
{ | |||||
atf_set "descr" "ggatel can proxy files" | |||||
atf_set "require.progs" "ggatel" | |||||
atf_set "require.user" "root" | |||||
atf_set "timeout" 15 | |||||
} | |||||
ggatel_md_body() | |||||
{ | |||||
us=$(alloc_ggate_dev) | |||||
work=$(alloc_md) | |||||
src=$(alloc_md) | |||||
dd if=/dev/random of=$work bs=1m count=1 conv=notrunc | |||||
dd if=/dev/random of=$src bs=1m count=1 conv=notrunc | |||||
atf_check ggatel create -u $us /dev/$work | |||||
dd if=/dev/$src of=/dev/ggate${us} bs=1m count=1 conv=notrunc | |||||
checksum /dev/$src /dev/$work | |||||
} | |||||
ggatel_md_cleanup() | |||||
{ | |||||
common_cleanup | |||||
} | |||||
atf_init_test_cases() | |||||
{ | |||||
atf_add_test_case ggated | |||||
atf_add_test_case ggatel_file | |||||
atf_add_test_case ggatel_md | |||||
} | |||||
alloc_ggate_dev() | |||||
{ | |||||
local us | |||||
us=0 | |||||
while [ -c /dev/ggate${us} ]; do | |||||
: $(( us += 1 )) | |||||
done | |||||
echo ${us} > ggate.devs | |||||
echo ${us} | |||||
} | |||||
alloc_md() | |||||
{ | |||||
local md | |||||
md=$(mdconfig -a -t malloc -s 1M) || \ | |||||
atf_fail "failed to allocate md device" | |||||
echo ${md} >> md.devs | |||||
echo ${md} | |||||
} | |||||
checksum() | |||||
{ | |||||
local src work | |||||
src=$1 | |||||
work=$2 | |||||
src_checksum=$(md5 -q $src) | |||||
work_checksum=$(md5 -q $work) | |||||
if [ "$work_checksum" != "$src_checksum" ]; then | |||||
atf_fail "work md5 checksum didn't match" | |||||
fi | |||||
ggate_checksum=$(md5 -q /dev/ggate${us}) | |||||
if [ "$ggate_checksum" != "$src_checksum" ]; then | |||||
atf_fail "ggate md5 checksum didn't match" | |||||
fi | |||||
} | |||||
common_cleanup() | |||||
{ | |||||
if [ -f "ggate.devs" ]; then | |||||
while read test_ggate; do | |||||
ggatec destroy -f -u $test_ggate >/dev/null | |||||
done < ggate.devs | |||||
rm ggate.devs | |||||
fi | |||||
if [ -f "$PIDFILE" ]; then | |||||
pkill -F "$PIDFILE" | |||||
rm $PIDFILE | |||||
fi | |||||
if [ -f "PLAINFILES" ]; then | |||||
while read f; do | |||||
rm -f ${f} | |||||
done < ${PLAINFILES} | |||||
rm ${PLAINFILES} | |||||
fi | |||||
if [ -f "md.devs" ]; then | |||||
while read test_md; do | |||||
mdconfig -d -u $test_md 2>/dev/null | |||||
done < md.devs | |||||
rm md.devs | |||||
fi | |||||
true | |||||
} |