#!/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-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-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