#!/bin/sh
#
# This is a set of commands to run and verify they work before doing a new release.
# Eventually they should also use the -J flag to generate JSON output, and a program should
# be written to check the output.
# Be sure to test both client and server on Linux, BSD, and OSX
#

if [ $# -ne 1 ]
then
  echo "Usage: `basename "$0"` hostname"
  exit $E_BADARGS
fi

set -x

host=$1

# basic testing
./src/iperf3 -c "$host" -V -t 5 -T "test1"
./src/iperf3 -c "$host" -u -V -t 5
# omit mode
./src/iperf3 -c "$host" -i .3 -O 2 -t 5
# JSON mode
./src/iperf3 -c "$host" -i 1 -J -t 5
# force V4
./src/iperf3 -c "$host" -4 -t 5
./src/iperf3 -c "$host" -4 -u -t 5
# force V6
./src/iperf3 -c "$host" -6 -t 5
./src/iperf3 -c "$host" -6 -u -t 5
# FQ rate
./src/iperf3 -c "$host" -V -t 5 --fq-rate 5m
./src/iperf3 -c "$host" -u -V -t 5 --fq-rate 5m
# SCTP
./src/iperf3 -c "$host" --sctp -V -t 5
# parallel streams
./src/iperf3 -c "$host" -P 3 -t 5
./src/iperf3 -c "$host" -u -P 3 -t 5
# reverse mode
./src/iperf3 -c "$host" -P 2 -t 5 -R
./src/iperf3 -c "$host" -u -P 2 -t 5 -R
# bidirectional mode
./src/iperf3 -c "$host" -P 2 -t 5 --bidir
./src/iperf3 -c "$host" -u -P 2 -t 5 --bidir
# zero copy
./src/iperf3 -c "$host" -Z -t 5
./src/iperf3 -c "$host" -Z -t 5 -R
# window size
./src/iperf3 -c "$host" -t 5 -w 8M
# -n flag
./src/iperf3 -c "$host" -n 5M
./src/iperf3 -c "$host" -n 5M -u -b1G
# -n flag with -R
./src/iperf3 -c "$host" -n 5M -R
./src/iperf3 -c "$host" -n 5M -u -b1G -R
# conflicting -n -t flags
./src/iperf3 -c "$host" -n 5M -t 5
# -k mode
./src/iperf3 -c "$host" -k 1K
./src/iperf3 -c "$host" -k 1K -u -b1G
# -k mode with -R
./src/iperf3 -c "$host" -k 1K -R
./src/iperf3 -c "$host" -k 1K -u -b1G -R
# CPU affinity
./src/iperf3 -c "$host" -A 2/2
./src/iperf3 -c "$host" -A 2/2 -u -b1G
# Burst mode
./src/iperf3 -c "$host" -u -b1G/100
# change MSS
./src/iperf3 -c "$host" -M 1000 -V
# test congestion control option (linux only)
./src/iperf3 -c "$host" -C reno -V
