virstor: basic functional test

Reviewed by:	asomers, markj
Sponsored by:	Dell EMC Isilon
Differential Revision:	https://reviews.freebsd.org/D45535
This commit is contained in:
Ryan Libby 2024-06-10 10:32:22 -07:00
parent 81ef0a89fc
commit 7affbeeab1
4 changed files with 114 additions and 0 deletions

View File

@ -19,6 +19,7 @@ TESTS_SUBDIRS+= shsec
TESTS_SUBDIRS+= stripe
TESTS_SUBDIRS+= union
TESTS_SUBDIRS+= uzip
TESTS_SUBDIRS+= virstor
${PACKAGE}FILES+= geom_subr.sh

View File

@ -0,0 +1,9 @@
PACKAGE= tests
TESTSDIR= ${TESTSBASE}/sys/geom/class/${.CURDIR:T}
ATF_TESTS_SH+= virstor_test
${PACKAGE}FILES+= conf.sh
.include <bsd.test.mk>

View File

@ -0,0 +1,31 @@
#!/bin/sh
class="virstor"
base=$(atf_get ident)
TEST_VIRSTOR_DEVS_FILE="${TMPDIR}/test_virstor_devs.$(basename $0)"
gvirstor_dev_setup()
{
# Pick a random name and record it for cleanup.
local vdevbase="$(mktemp -u virstor.XXXXXX)" || aft_fail "mktemp"
echo "$vdevbase" >> "$TEST_VIRSTOR_DEVS_FILE"
eval "${1}='${vdevbase}'"
}
gvirstor_test_cleanup()
{
local vdevbase
if [ -f "$TEST_VIRSTOR_DEVS_FILE" ]; then
while read vdevbase; do
if [ -c "/dev/$class/$vdevbase" ]; then
echo "# Destroying test virstor device:" \
"$vdevbase"
gvirstor destroy "$vdevbase"
fi
done < "$TEST_VIRSTOR_DEVS_FILE"
fi
geom_test_cleanup
}
ATF_TEST=true
. `dirname $0`/../geom_subr.sh

View File

@ -0,0 +1,73 @@
#
# Copyright (c) 2024 Dell Inc. or its subsidiaries. All Rights Reserved.
#
# SPDX-License-Identifier: BSD-2-Clause
#
. $(atf_get_srcdir)/conf.sh
atf_test_case basic cleanup
basic_head()
{
atf_set "descr" "geom virstor basic functional test"
atf_set "require.user" "root"
}
basic_body()
{
geom_atf_test_setup
# Choose a virstor device name
gvirstor_dev_setup name
# Create an md backing device and initialize it with junk
psecsize=512
attach_md md -t swap -S $psecsize -s 5M || atf_fail "attach_md"
jot -b uninitialized 0 | dd status=none of=/dev/$md 2> /dev/null
# Create a virstor device
vsizemb=64
vsize=$((vsizemb * 1024 * 1024))
atf_check -o ignore -e ignore \
gvirstor label -v -s ${vsizemb}M -m 512 $name /dev/$md
devwait
vdev="/dev/$class/$name"
ssize=$(diskinfo $vdev | awk '{print $2}')
atf_check_equal $psecsize $ssize
size=$(diskinfo $vdev | awk '{print $3}')
atf_check_equal $vsize $size
# Write the first and last sectors of the virtual address space
hasha=$(jot -b a 0 | head -c $ssize | sha1)
hashz=$(jot -b z 0 | head -c $ssize | sha1)
zsector=$((vsize / ssize - 1))
jot -b a 0 | dd status=none of=$vdev bs=$ssize count=1 conv=notrunc
jot -b z 0 | dd status=none of=$vdev bs=$ssize count=1 conv=notrunc \
seek=$zsector
# Read back and compare
hashx=$(dd status=none if=$vdev bs=$ssize count=1 | sha1)
atf_check_equal $hasha $hashx
hashx=$(dd status=none if=$vdev bs=$ssize count=1 skip=$zsector | sha1)
atf_check_equal $hashz $hashx
# Destroy, then retaste and reload
atf_check -o ignore gvirstor destroy $name
true > /dev/$md
devwait
# Read back and compare
hashx=$(dd status=none if=$vdev bs=$ssize count=1 | sha1)
atf_check_equal $hasha $hashx
hashx=$(dd status=none if=$vdev bs=$ssize count=1 skip=$zsector | sha1)
atf_check_equal $hashz $hashx
}
basic_cleanup()
{
gvirstor_test_cleanup
}
atf_init_test_cases()
{
atf_add_test_case basic
}