| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # This shell script uses nc-like executables to send and receive the file at
- # $1, and prints the checksums. 3 such executables are
- # github.com/h2so5/utp/ucat, invoked as h2so5-ucat, libutp-ucat, which is the
- # ucat or ucat-static generated by the C++ libutp, and lastly, ./cmd/ucat from
- # this repository. A good file in my experiments is no more than a few 100MB,
- # or you'll be waiting a while.
- set -eu
- # set -x
- # Passed to invocations of godo for package ./cmd/ucat.
- #GODOFLAGS=-race
- #export GO_UTP_PACKET_DROP=0.1
- export GOPPROF=
- # Invokes the implementation to test against. If there's an arg, then it's
- # expected to listen.
- function other_ucat() {
- if [[ $# != 0 ]]; then
- libutp-ucat -l -p "$port"
- # h2so5-ucat -l :"$port"
- else
- libutp-ucat localhost "$port"
- # h2so5-ucat localhost:"$port"
- fi
- }
- function md5cmd() {
- (which md5sum > /dev/null && md5sum "$@") || (which md5 > /dev/null && md5 "$@") || md5sum "$@"
- }
- # Check what the correct result is.
- md5cmd "$1"
- rate() {
- pv -a -W -b
- }
- port=4000
- echo 'utp->other_ucat'
- # Send from this uTP implementation to another client.
- other_ucat -l | rate | md5cmd &
- # sleep 1
- godo ${GODOFLAGS-} ./cmd/ucat localhost "$port" < "$1"
- wait
- echo 'other_ucat->utp'
- # Send from the other implementation, to this one.
- GO_UTP_LOGGING=0 godo ${GODOFLAGS-} ./cmd/ucat -l -p "$port" | rate | md5cmd &
- # Never receive from h2so5's ucat without a small sleep first. Don't know why.
- sleep 1
- other_ucat < "$1"
- wait
- echo 'libutp->libutp'
- libutp-ucat -l -p "$port" | rate | md5cmd &
- libutp-ucat localhost "$port" < "$1"
- wait
- echo 'utp->utp'
- godo ./cmd/ucat -l -p "$port" | rate | md5cmd &
- sleep 1
- godo ./cmd/ucat localhost "$port" < "$1"
- wait
- # Now check the hashes match (yes you).
|