xref: /freebsd/tests/sys/geom/class/virstor/virstor_test.sh (revision 7affbeeab1c99685012df0d72df2d7a87e09e472)
1*7affbeeaSRyan Libby#
2*7affbeeaSRyan Libby# Copyright (c) 2024 Dell Inc. or its subsidiaries.  All Rights Reserved.
3*7affbeeaSRyan Libby#
4*7affbeeaSRyan Libby# SPDX-License-Identifier: BSD-2-Clause
5*7affbeeaSRyan Libby#
6*7affbeeaSRyan Libby
7*7affbeeaSRyan Libby. $(atf_get_srcdir)/conf.sh
8*7affbeeaSRyan Libby
9*7affbeeaSRyan Libbyatf_test_case basic cleanup
10*7affbeeaSRyan Libbybasic_head()
11*7affbeeaSRyan Libby{
12*7affbeeaSRyan Libby	atf_set "descr" "geom virstor basic functional test"
13*7affbeeaSRyan Libby	atf_set "require.user" "root"
14*7affbeeaSRyan Libby}
15*7affbeeaSRyan Libbybasic_body()
16*7affbeeaSRyan Libby{
17*7affbeeaSRyan Libby	geom_atf_test_setup
18*7affbeeaSRyan Libby	# Choose a virstor device name
19*7affbeeaSRyan Libby	gvirstor_dev_setup name
20*7affbeeaSRyan Libby
21*7affbeeaSRyan Libby	# Create an md backing device and initialize it with junk
22*7affbeeaSRyan Libby	psecsize=512
23*7affbeeaSRyan Libby	attach_md md -t swap -S $psecsize -s 5M || atf_fail "attach_md"
24*7affbeeaSRyan Libby	jot -b uninitialized 0 | dd status=none of=/dev/$md 2> /dev/null
25*7affbeeaSRyan Libby
26*7affbeeaSRyan Libby	# Create a virstor device
27*7affbeeaSRyan Libby	vsizemb=64
28*7affbeeaSRyan Libby	vsize=$((vsizemb * 1024 * 1024))
29*7affbeeaSRyan Libby	atf_check -o ignore -e ignore \
30*7affbeeaSRyan Libby	    gvirstor label -v -s ${vsizemb}M -m 512 $name /dev/$md
31*7affbeeaSRyan Libby	devwait
32*7affbeeaSRyan Libby	vdev="/dev/$class/$name"
33*7affbeeaSRyan Libby
34*7affbeeaSRyan Libby	ssize=$(diskinfo $vdev | awk '{print $2}')
35*7affbeeaSRyan Libby	atf_check_equal $psecsize $ssize
36*7affbeeaSRyan Libby
37*7affbeeaSRyan Libby	size=$(diskinfo $vdev | awk '{print $3}')
38*7affbeeaSRyan Libby	atf_check_equal $vsize $size
39*7affbeeaSRyan Libby
40*7affbeeaSRyan Libby	# Write the first and last sectors of the virtual address space
41*7affbeeaSRyan Libby	hasha=$(jot -b a 0 | head -c $ssize | sha1)
42*7affbeeaSRyan Libby	hashz=$(jot -b z 0 | head -c $ssize | sha1)
43*7affbeeaSRyan Libby	zsector=$((vsize / ssize - 1))
44*7affbeeaSRyan Libby	jot -b a 0 | dd status=none of=$vdev bs=$ssize count=1 conv=notrunc
45*7affbeeaSRyan Libby	jot -b z 0 | dd status=none of=$vdev bs=$ssize count=1 conv=notrunc \
46*7affbeeaSRyan Libby	    seek=$zsector
47*7affbeeaSRyan Libby
48*7affbeeaSRyan Libby	# Read back and compare
49*7affbeeaSRyan Libby	hashx=$(dd status=none if=$vdev bs=$ssize count=1 | sha1)
50*7affbeeaSRyan Libby	atf_check_equal $hasha $hashx
51*7affbeeaSRyan Libby	hashx=$(dd status=none if=$vdev bs=$ssize count=1 skip=$zsector | sha1)
52*7affbeeaSRyan Libby	atf_check_equal $hashz $hashx
53*7affbeeaSRyan Libby
54*7affbeeaSRyan Libby	# Destroy, then retaste and reload
55*7affbeeaSRyan Libby	atf_check -o ignore gvirstor destroy $name
56*7affbeeaSRyan Libby	true > /dev/$md
57*7affbeeaSRyan Libby	devwait
58*7affbeeaSRyan Libby
59*7affbeeaSRyan Libby	# Read back and compare
60*7affbeeaSRyan Libby	hashx=$(dd status=none if=$vdev bs=$ssize count=1 | sha1)
61*7affbeeaSRyan Libby	atf_check_equal $hasha $hashx
62*7affbeeaSRyan Libby	hashx=$(dd status=none if=$vdev bs=$ssize count=1 skip=$zsector | sha1)
63*7affbeeaSRyan Libby	atf_check_equal $hashz $hashx
64*7affbeeaSRyan Libby}
65*7affbeeaSRyan Libbybasic_cleanup()
66*7affbeeaSRyan Libby{
67*7affbeeaSRyan Libby	gvirstor_test_cleanup
68*7affbeeaSRyan Libby}
69*7affbeeaSRyan Libby
70*7affbeeaSRyan Libbyatf_init_test_cases()
71*7affbeeaSRyan Libby{
72*7affbeeaSRyan Libby	atf_add_test_case basic
73*7affbeeaSRyan Libby}
74