#!/usr/bin/env bash
set -e
cd "$(dirname "$0")"

function with_set_x() {
    set -x
    "$@"
    {
        ec=$?
        set +x
        return $ec
    } 2>/dev/null
}

function log() {
    echo "$*" >&2
}

./test-bed up -d

benchmark() {
    log -e "\n======== Benchmarking sshuttle | Args: [$*]  ========"
    local node=$1
    shift
    with_set_x ./exec-sshuttle "$node" --listen 55771 "$@" &
    sshuttle_pid=$!
    trap 'kill -0 $sshuttle_pid &>/dev/null && kill -15 $sshuttle_pid' EXIT
    while ! nc -z localhost 55771; do sleep 0.1; done
    sleep 1
    ./exec-tool iperf3 "$node" --time=4
    with_set_x kill -15 $sshuttle_pid
    wait $sshuttle_pid || true
}

if [[ $# -gt 0 ]]; then
    benchmark "${@}"
else
    benchmark node-1 --sshuttle-bin="${SSHUTTLE_BIN:-sshuttle}"
    benchmark node-1 --sshuttle-bin=dev
fi