Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 10 Jan 2017 20:35:09 +0000 (UTC)
From:      Alan Somers <asomers@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r311893 - in head: . tests/sys/geom/class/gate
Message-ID:  <201701102035.v0AKZ9B7068992@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: asomers
Date: Tue Jan 10 20:35:09 2017
New Revision: 311893
URL: https://svnweb.freebsd.org/changeset/base/311893

Log:
  ATFify the geom gate tests.
  
  This ensures their cleanup routines will be run even if they should timeout.
  
  tests/sys/geom/class/gate/ggate_test.sh
  tests/sys/geom/class/gate/Makefile
  	Add an ATF test with three testcases, one for each TAP test. Use
  	ATF-style cleanup functions, and convert sleeps to polling loops.
  
  ObsoleteFiles.inc
  tests/sys/geom/class/gate/conf.sh
  tests/sys/geom/class/gate/1_test.sh
  tests/sys/geom/class/gate/2_test.sh
  tests/sys/geom/class/gate/3_test.sh
  	Delete TAP test files
  
  Reviewed by:	ngie
  MFC after:	4 weeks
  Sponsored by:	Spectra Logic Corp
  Differential Revision:	https://reviews.freebsd.org/D8891

Added:
  head/tests/sys/geom/class/gate/ggate_test.sh   (contents, props changed)
Deleted:
  head/tests/sys/geom/class/gate/1_test.sh
  head/tests/sys/geom/class/gate/2_test.sh
  head/tests/sys/geom/class/gate/3_test.sh
  head/tests/sys/geom/class/gate/conf.sh
Modified:
  head/ObsoleteFiles.inc
  head/tests/sys/geom/class/gate/Makefile

Modified: head/ObsoleteFiles.inc
==============================================================================
--- head/ObsoleteFiles.inc	Tue Jan 10 20:16:16 2017	(r311892)
+++ head/ObsoleteFiles.inc	Tue Jan 10 20:35:09 2017	(r311893)
@@ -38,6 +38,11 @@
 #   xargs -n1 | sort | uniq -d;
 # done
 
+# 20170110: Four files from ggate tests consolidated into one
+OLD_FILES+=usr/tests/sys/geom/class/gate/1_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/2_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/3_test
+OLD_FILES+=usr/tests/sys/geom/class/gate/conf.sh
 # 20170103: libbsnmptools.so made into an INTERNALLIB
 OLD_FILES+=usr/lib/libbsnmptools.a
 OLD_FILES+=usr/lib/libbsnmptools_p.a

Modified: head/tests/sys/geom/class/gate/Makefile
==============================================================================
--- head/tests/sys/geom/class/gate/Makefile	Tue Jan 10 20:16:16 2017	(r311892)
+++ head/tests/sys/geom/class/gate/Makefile	Tue Jan 10 20:35:09 2017	(r311893)
@@ -4,14 +4,6 @@ PACKAGE=	tests
 
 TESTSDIR=	${TESTSBASE}/sys/geom/class/${.CURDIR:T}
 
-TAP_TESTS_SH+=	1_test
-TAP_TESTS_SH+=	2_test
-TAP_TESTS_SH+=	3_test
-
-${PACKAGE}FILES+=		conf.sh
-
-.for t in ${TAP_TESTS_SH}
-TEST_METADATA.$t+=	required_user="root"
-.endfor
+ATF_TESTS_SH+=	ggate_test
 
 .include <bsd.test.mk>

Added: head/tests/sys/geom/class/gate/ggate_test.sh
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tests/sys/geom/class/gate/ggate_test.sh	Tue Jan 10 20:35:09 2017	(r311893)
@@ -0,0 +1,193 @@
+# $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
+}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701102035.v0AKZ9B7068992>