69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			69 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
		
			Executable File
		
	
	
	
	
# 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).
 |