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
+}
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to