|
- # $FreeBSD$
-
- PIDFILE=ggated.pid
- TESTURL="$GGATEHTTP_URL"
- TEMPFILE="random.data"
-
- atf_test_case ggatehttp cleanup
- ggatehttp_head()
- {
- atf_set "descr" "ggatehttp can proxy to http"
- atf_set "require.progs" "ggatehttp"
- atf_set "require.user" "root"
- atf_set "timeout" 10
- }
-
- ggatehttp_body()
- {
- load_ggate
- us=$(alloc_ggate_dev)
- src=$(alloc_md)
-
- n1mchunks=10
-
- atf_check -e ignore -o ignore \
- dd if=/dev/random of="$TEMPFILE" bs=1m count=$n1mchunks conv=notrunc
-
- atf_check ggatehttp create -u $us "$TESTURL"
-
- ggate_dev=/dev/ggate${us}
-
- wait_for_ggate_device ${ggate_dev}
-
- # Test writing
- atf_check -e ignore -o ignore \
- dd if="$TEMPFILE" of=${ggate_dev} bs=1m count=$n1mchunks conv=notrunc
-
- # Test reading
- atf_check -e ignore -o ignore \
- dd of="$TEMPFILE"2 if=${ggate_dev} bs=1m count=$n1mchunks conv=notrunc
-
- ls -l "$TEMPFILE" "$TEMPFILE"2
-
- # Verify that we read what we wrote
- atf_check cmp "$TEMPFILE" "$TEMPFILE"2
-
- rm "$TEMPFILE" "$TEMPFILE"2
- }
-
- ggatehttp_cleanup()
- {
- common_cleanup
- }
-
- atf_init_test_cases()
- {
- atf_add_test_case ggatehttp
- }
-
- 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
- }
-
- load_ggate()
- {
- local class=gate
-
- # If the geom class isn't already loaded, try loading it.
- if ! kldstat -q -m g_${class}; then
- if ! geom ${class} load; then
- atf_skip "could not load module for geom class=${class}"
- fi
- fi
- }
-
- # Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create`
- # isn't called with `-v`.
- wait_for_ggate_device()
- {
- ggate_device=$1
-
- while [ ! -c $ggate_device ]; do
- sleep 0.5
- done
- }
|