127 lines
4.3 KiB
Bash
Executable File
127 lines
4.3 KiB
Bash
Executable File
#!/usr/bin/env sh
|
|
set -eu
|
|
|
|
cargo build --release
|
|
|
|
workdir="$(mktemp -d)"
|
|
cleanup() {
|
|
if [ -n "${container_id:-}" ]; then
|
|
docker rm -f "$container_id" >/dev/null 2>&1 || true
|
|
fi
|
|
rm -rf "$workdir"
|
|
}
|
|
trap cleanup EXIT INT TERM
|
|
|
|
ssh-keygen -t ed25519 -N "" -f "$workdir/id_ed25519" >/dev/null
|
|
cp target/release/dosh-server "$workdir/dosh-server"
|
|
cp target/release/dosh-auth "$workdir/dosh-auth"
|
|
cp "$workdir/id_ed25519.pub" "$workdir/bench_authorized_keys"
|
|
|
|
docker build -q -t dosh-ssh-bench -f packaging/docker/ssh-bench.Dockerfile "$workdir" >/dev/null
|
|
mosh_port="${DOSH_BENCH_MOSH_PORT:-60000}"
|
|
container_id="$(docker run -d -p 127.0.0.1:0:22/tcp -p 127.0.0.1:0:50000/udp -p 127.0.0.1:${mosh_port}:60000/udp dosh-ssh-bench)"
|
|
ssh_port="$(docker port "$container_id" 22/tcp | sed 's/.*://')"
|
|
dosh_port="$(docker port "$container_id" 50000/udp | sed 's/.*://')"
|
|
|
|
for _ in 1 2 3 4 5; do
|
|
if ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i "$workdir/id_ed25519" -p "$ssh_port" bench@127.0.0.1 true >/dev/null 2>&1; then
|
|
break
|
|
fi
|
|
sleep 1
|
|
done
|
|
|
|
ssh-keyscan -p "$ssh_port" 127.0.0.1 > "$workdir/known_hosts"
|
|
mkdir -p "$workdir/home" "$workdir/home-controlmaster" "$workdir/home-native" "$workdir/home-cached" "$workdir/home-mosh"
|
|
|
|
if ! HOME="$workdir/home" target/release/dosh-bench \
|
|
--server bench@127.0.0.1 \
|
|
--ssh-port "$ssh_port" \
|
|
--dosh-port "$dosh_port" \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--ssh-auth-command /usr/local/bin/dosh-auth \
|
|
--iterations 3 \
|
|
--no-cache \
|
|
--assert-ssh-plus-ms 500; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
|
|
if ! HOME="$workdir/home-controlmaster" target/release/dosh-bench \
|
|
--server bench@127.0.0.1 \
|
|
--ssh-port "$ssh_port" \
|
|
--dosh-port "$dosh_port" \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--ssh-auth-command /usr/local/bin/dosh-auth \
|
|
--iterations 3 \
|
|
--no-cache \
|
|
--controlmaster \
|
|
--assert-ssh-plus-ms 500; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
|
|
if ! HOME="$workdir/home-native" target/release/dosh-client \
|
|
--ssh-port "$ssh_port" \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--ssh-auth-command /usr/local/bin/dosh-auth \
|
|
trust bench@127.0.0.1 >/dev/null; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
|
|
if ! HOME="$workdir/home-native" target/release/dosh-bench \
|
|
--server bench@127.0.0.1 \
|
|
--ssh-port "$ssh_port" \
|
|
--dosh-port "$dosh_port" \
|
|
--dosh-host 127.0.0.1 \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--iterations 5 \
|
|
--cold-native \
|
|
--assert-ssh-plus-ms "${DOSH_BENCH_NATIVE_SSH_PLUS_MS:-0}"; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
|
|
if ! HOME="$workdir/home-cached" target/release/dosh-bench \
|
|
--server bench@127.0.0.1 \
|
|
--ssh-port "$ssh_port" \
|
|
--dosh-port "$dosh_port" \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--ssh-auth-command /usr/local/bin/dosh-auth \
|
|
--iterations 10 \
|
|
--warm-cache \
|
|
--skip-ssh-baseline \
|
|
--assert-dosh-max-ms "${DOSH_BENCH_CACHED_MAX_MS:-25}"; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${DOSH_BENCH_INCLUDE_MOSH:-0}" = "1" ]; then
|
|
if ! HOME="$workdir/home-mosh" target/release/dosh-bench \
|
|
--server bench@127.0.0.1 \
|
|
--ssh-port "$ssh_port" \
|
|
--dosh-port "$dosh_port" \
|
|
--ssh-key "$workdir/id_ed25519" \
|
|
--ssh-known-hosts "$workdir/known_hosts" \
|
|
--ssh-auth-command /usr/local/bin/dosh-auth \
|
|
--iterations 3 \
|
|
--no-cache \
|
|
--include-mosh \
|
|
--mosh-server-command /usr/bin/mosh-server \
|
|
--mosh-port "$mosh_port"; then
|
|
docker logs "$container_id" || true
|
|
docker exec "$container_id" sh -lc 'cat /tmp/dosh-server.log 2>/dev/null || true' || true
|
|
exit 1
|
|
fi
|
|
fi
|