xref: /freebsd/tests/sys/geom/class/eli/misc_test.sh (revision 96950419f15510287080c557174e0d8409f06956)
14d846d26SWarner Losh# SPDX-License-Identifier: BSD-2-Clause
2809a8352SAlan Somers#
30bab7fa8SAlan Somers# Copyright (c) 2018 Alan Somers
40bab7fa8SAlan Somers#
50bab7fa8SAlan Somers# Redistribution and use in source and binary forms, with or without
60bab7fa8SAlan Somers# modification, are permitted provided that the following conditions
70bab7fa8SAlan Somers# are met:
80bab7fa8SAlan Somers# 1. Redistributions of source code must retain the above copyright
90bab7fa8SAlan Somers#    notice, this list of conditions and the following disclaimer.
100bab7fa8SAlan Somers# 2. Redistributions in binary form must reproduce the above copyright
110bab7fa8SAlan Somers#    notice, this list of conditions and the following disclaimer in the
120bab7fa8SAlan Somers#    documentation and/or other materials provided with the distribution.
130bab7fa8SAlan Somers#
140bab7fa8SAlan Somers# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
150bab7fa8SAlan Somers# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
160bab7fa8SAlan Somers# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
170bab7fa8SAlan Somers# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
180bab7fa8SAlan Somers# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
190bab7fa8SAlan Somers# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
200bab7fa8SAlan Somers# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
210bab7fa8SAlan Somers# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
220bab7fa8SAlan Somers# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
230bab7fa8SAlan Somers# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
240bab7fa8SAlan Somers# SUCH DAMAGE.
250bab7fa8SAlan Somers#
260bab7fa8SAlan Somers
27cf551b8aSAlan Somers. $(atf_get_srcdir)/conf.sh
28cf551b8aSAlan Somers
290bab7fa8SAlan Somersatf_test_case preserve_props cleanup
300bab7fa8SAlan Somerspreserve_props_head()
310bab7fa8SAlan Somers{
320bab7fa8SAlan Somers	atf_set "descr" "geli should preserve basic GEOM properties"
330bab7fa8SAlan Somers	atf_set "require.user" "root"
340bab7fa8SAlan Somers	atf_set "timeout" 15
350bab7fa8SAlan Somers}
360bab7fa8SAlan Somerspreserve_props_body()
370bab7fa8SAlan Somers{
38cf551b8aSAlan Somers	geli_test_setup
39cf551b8aSAlan Somers
40*96950419SGleb Smirnoff	attach_md md -s1m
410bab7fa8SAlan Somers	atf_check geli onetime /dev/${md}
420bab7fa8SAlan Somers	md_secsize=$(diskinfo ${md} | cut -wf 2)
430bab7fa8SAlan Somers	md_stripesize=$(diskinfo ${md} | cut -wf 5)
440bab7fa8SAlan Somers	eli_secsize=$(diskinfo ${md}.eli | cut -wf 2)
450bab7fa8SAlan Somers	eli_stripesize=$(diskinfo ${md}.eli | cut -wf 5)
460bab7fa8SAlan Somers	atf_check_equal "$md_secsize" "$eli_secsize"
470bab7fa8SAlan Somers	atf_check_equal "$md_stripesize" "$eli_stripesize"
480bab7fa8SAlan Somers}
490bab7fa8SAlan Somerspreserve_props_cleanup()
500bab7fa8SAlan Somers{
510bab7fa8SAlan Somers	geli_test_cleanup
520bab7fa8SAlan Somers}
530bab7fa8SAlan Somers
540bab7fa8SAlan Somersatf_test_case preserve_disk_props cleanup
550bab7fa8SAlan Somerspreserve_disk_props_head()
560bab7fa8SAlan Somers{
570bab7fa8SAlan Somers	atf_set "descr" "geli should preserve properties for disks"
580bab7fa8SAlan Somers	atf_set "require.user" "root"
590bab7fa8SAlan Somers	atf_set "require.config" "disks"
600bab7fa8SAlan Somers	atf_set "timeout" 15
610bab7fa8SAlan Somers}
620bab7fa8SAlan Somerspreserve_disk_props_body()
630bab7fa8SAlan Somers{
64cf551b8aSAlan Somers	geli_test_setup
65cf551b8aSAlan Somers
660bab7fa8SAlan Somers	disks=`atf_config_get disks`
670bab7fa8SAlan Somers	disk=${disks%% *}
680bab7fa8SAlan Somers	if [ -z "$disk" ]; then
690bab7fa8SAlan Somers		atf_skip "Must define disks (see tests(7))"
700bab7fa8SAlan Somers	fi
710bab7fa8SAlan Somers	atf_check geli onetime ${disk}
720bab7fa8SAlan Somers
730bab7fa8SAlan Somers	disk_ident=$(diskinfo -s ${disk})
740bab7fa8SAlan Somers	disk_descr=$(diskinfo -v ${disk} | awk '/Disk descr/ {print $1}')
750bab7fa8SAlan Somers	disk_rotrate=$(diskinfo -v ${disk} | awk '/Rotation rate/ {print $1}')
760bab7fa8SAlan Somers	disk_zonemode=$(diskinfo -v ${disk} | awk '/Zone Mode/ {print $1}')
770bab7fa8SAlan Somers	eli_ident=$(diskinfo -s ${disk}.eli)
780bab7fa8SAlan Somers	eli_descr=$(diskinfo -v ${disk}.eli | awk '/Disk descr/ {print $1}')
790bab7fa8SAlan Somers	eli_rotrate=$(diskinfo -v ${disk}.eli | awk '/Rotation/ {print $1}')
800bab7fa8SAlan Somers	eli_zonemode=$(diskinfo -v ${disk}.eli | awk '/Zone Mode/ {print $1}')
810bab7fa8SAlan Somers	atf_check_equal "$disk_ident" "$eli_ident"
820bab7fa8SAlan Somers	atf_check_equal "$disk_descr" "$eli_descr"
830bab7fa8SAlan Somers	atf_check_equal "$disk_rotrate" "$eli_rotrate"
840bab7fa8SAlan Somers	atf_check_equal "$disk_zonemode" "$eli_zonemode"
850bab7fa8SAlan Somers}
860bab7fa8SAlan Somerspreserve_disk_props_cleanup()
870bab7fa8SAlan Somers{
880bab7fa8SAlan Somers	disk_cleanup
890bab7fa8SAlan Somers	geli_test_cleanup
900bab7fa8SAlan Somers}
910bab7fa8SAlan Somers
920bab7fa8SAlan Somersatf_test_case physpath cleanup
930bab7fa8SAlan Somersphyspath_head()
940bab7fa8SAlan Somers{
950bab7fa8SAlan Somers	atf_set "descr" "geli should append /eli to the underlying device's physical path"
960bab7fa8SAlan Somers	atf_set "require.user" "root"
970bab7fa8SAlan Somers	atf_set "timeout" 15
980bab7fa8SAlan Somers}
990bab7fa8SAlan Somersphyspath_body()
1000bab7fa8SAlan Somers{
101cf551b8aSAlan Somers	geli_test_setup
102cf551b8aSAlan Somers	if ! error_message=$(geom_load_class_if_needed nop); then
103cf551b8aSAlan Somers		atf_skip "$error_message"
104cf551b8aSAlan Somers	fi
1050bab7fa8SAlan Somers
106*96950419SGleb Smirnoff	attach_md md -s1m
1070bab7fa8SAlan Somers	# If the underlying device has no physical path, then geli should not
1080bab7fa8SAlan Somers	# create one.
1090bab7fa8SAlan Somers	atf_check -o empty -e ignore diskinfo -p $md
1100bab7fa8SAlan Somers	atf_check -s exit:0 geli onetime $md
1110bab7fa8SAlan Somers	atf_check -o empty -e ignore diskinfo -p $md.eli
1120bab7fa8SAlan Somers	atf_check -s exit:0 geli kill $md
1130bab7fa8SAlan Somers
1140bab7fa8SAlan Somers	# If the underlying device does have a physical path, then geli should
1150bab7fa8SAlan Somers	# append "/eli"
1160bab7fa8SAlan Somers	physpath="some/physical/path"
1170bab7fa8SAlan Somers	atf_check gnop create -z $physpath ${md}
1180bab7fa8SAlan Somers	atf_check -s exit:0 geli onetime $md.nop
1190bab7fa8SAlan Somers	atf_check -o match:"^${physpath}/eli$" diskinfo -p $md.nop.eli
1200bab7fa8SAlan Somers}
1210bab7fa8SAlan Somersphyspath_cleanup()
1220bab7fa8SAlan Somers{
1230bab7fa8SAlan Somers	if [ -f "$TEST_MDS_FILE" ]; then
1240bab7fa8SAlan Somers		while read md; do
1250bab7fa8SAlan Somers			[ -c /dev/${md}.nop.eli ] && \
1260bab7fa8SAlan Somers				geli detach $md.nop.eli 2>/dev/null
1270bab7fa8SAlan Somers			[ -c /dev/${md}.nop ] && \
1280bab7fa8SAlan Somers				gnop destroy -f $md.nop 2>/dev/null
1290bab7fa8SAlan Somers			[ -c /dev/${md}.eli ] && \
1300bab7fa8SAlan Somers				geli detach $md.eli 2>/dev/null
1310bab7fa8SAlan Somers			mdconfig -d -u $md 2>/dev/null
1320bab7fa8SAlan Somers		done < $TEST_MDS_FILE
1330bab7fa8SAlan Somers	fi
1340bab7fa8SAlan Somers	true
1350bab7fa8SAlan Somers}
1360bab7fa8SAlan Somers
1379c046792SMark Johnstonunaligned_io_test()
1389c046792SMark Johnston{
1399c046792SMark Johnston	cipher=$1
1409c046792SMark Johnston	secsize=$2
1419c046792SMark Johnston	ealgo=${cipher%%:*}
1429c046792SMark Johnston	keylen=${cipher##*:}
1439c046792SMark Johnston
1449c046792SMark Johnston	atf_check -s exit:0 -e ignore \
1459c046792SMark Johnston		geli init -B none -e $ealgo -l $keylen -P -K keyfile \
1469c046792SMark Johnston		-s $secsize ${md}
1479c046792SMark Johnston	atf_check geli attach -p -k keyfile ${md}
1489c046792SMark Johnston
1499c046792SMark Johnston	atf_check $(atf_get_srcdir)/unaligned_io /dev/${md}.eli
1509c046792SMark Johnston}
1519c046792SMark Johnston
1529c046792SMark Johnstonatf_test_case unaligned_io cleanup
1539c046792SMark Johnstonunaligned_io_head()
1549c046792SMark Johnston{
1559c046792SMark Johnston	atf_set "descr" "regression test for PR 271766"
1569c046792SMark Johnston	atf_set "require.user" "root"
1579c046792SMark Johnston}
1589c046792SMark Johnstonunaligned_io_body()
1599c046792SMark Johnston{
1609c046792SMark Johnston	geli_test_setup
1619c046792SMark Johnston
1629c046792SMark Johnston	sectors=4
1639c046792SMark Johnston
1649c046792SMark Johnston	atf_check dd if=/dev/random of=keyfile bs=512 count=16 status=none
1659c046792SMark Johnston	for_each_geli_config_nointegrity unaligned_io_test
1669c046792SMark Johnston}
1679c046792SMark Johnstonunaligned_io_cleanup()
1689c046792SMark Johnston{
1699c046792SMark Johnston	geli_test_cleanup
1709c046792SMark Johnston}
1719c046792SMark Johnston
1720bab7fa8SAlan Somersatf_init_test_cases()
1730bab7fa8SAlan Somers{
1740bab7fa8SAlan Somers	atf_add_test_case physpath
1750bab7fa8SAlan Somers	atf_add_test_case preserve_props
1760bab7fa8SAlan Somers	atf_add_test_case preserve_disk_props
1779c046792SMark Johnston	atf_add_test_case unaligned_io
1780bab7fa8SAlan Somers}
1790bab7fa8SAlan Somers
1800bab7fa8SAlan Somerscommon_cleanup()
1810bab7fa8SAlan Somers{
1820bab7fa8SAlan Somers	if [ -f "$MD_DEVS" ]; then
1830bab7fa8SAlan Somers		while read test_md; do
1840bab7fa8SAlan Somers			gnop destroy -f ${test_md}.nop 2>/dev/null
1850bab7fa8SAlan Somers			mdconfig -d -u $test_md 2>/dev/null
1860bab7fa8SAlan Somers		done < $MD_DEVS
1870bab7fa8SAlan Somers		rm $MD_DEVS
1880bab7fa8SAlan Somers	fi
1890bab7fa8SAlan Somers
1900bab7fa8SAlan Somers	if [ -f "$PLAINFILES" ]; then
1910bab7fa8SAlan Somers		while read f; do
1920bab7fa8SAlan Somers			rm -f ${f}
1930bab7fa8SAlan Somers		done < ${PLAINFILES}
1940bab7fa8SAlan Somers		rm ${PLAINFILES}
1950bab7fa8SAlan Somers	fi
1960bab7fa8SAlan Somers	true
1970bab7fa8SAlan Somers}
1980bab7fa8SAlan Somers
1990bab7fa8SAlan Somersdisk_cleanup()
2000bab7fa8SAlan Somers{
2010bab7fa8SAlan Somers	disks=`atf_config_get disks`
2020bab7fa8SAlan Somers	disk=${disks%% *}
2030bab7fa8SAlan Somers	if [ -n "$disk" ]; then
2040bab7fa8SAlan Somers		geli kill ${disk} 2>/dev/null
2050bab7fa8SAlan Somers	fi
2060bab7fa8SAlan Somers}
207