mirror of
https://github.com/snapotter-hq/SnapOtter.git
synced 2026-08-03 07:46:42 +02:00
84 lines
2.2 KiB
Bash
84 lines
2.2 KiB
Bash
#!/usr/bin/env bash
|
|||
|
|
|
||
|
|
JOB_AWARE_LIB_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)
|
||
|
|
JOB_AWARE_NODE="${JOB_AWARE_LIB_DIR}/job-aware.mjs"
|
||
|
|
BENCH_JOB_TIMEOUT_MS="${BENCH_JOB_TIMEOUT_MS:-300000}"
|
||
|
|
BENCHMARK_FAILURES=0
|
||
|
|
BENCH_CHILD_EXIT_FAILURES=0
|
||
|
|
BENCH_OBSERVED_ROWS=0
|
||
|
|
BENCH_EXPECTED_ROWS=0
|
||
|
|
|
||
|
|
resolve_benchmark_response() {
|
||
|
|
local base_url="$1" token="$2" status="$3" mime="$4" body_file="$5" output_file="$6"
|
||
|
|
local admission_latency="$7" timeout_ms="${8:-$BENCH_JOB_TIMEOUT_MS}"
|
||
|
|
local expected_mime="${9:-}" expected_zip_entries="${10:-}" oracle="${11:-}"
|
||
|
|
local resolution rc
|
||
|
|
local resolver_args=(
|
||
|
|
--base-url "$base_url"
|
||
|
|
--token "$token"
|
||
|
|
--status "$status"
|
||
|
|
--mime "${mime:-application/octet-stream}"
|
||
|
|
--body "$body_file"
|
||
|
|
--output "$output_file"
|
||
|
|
--admission-latency "$admission_latency"
|
||
|
|
--timeout-ms "$timeout_ms"
|
||
|
|
)
|
||
|
|
if [ -n "$expected_mime" ]; then
|
||
|
|
resolver_args+=(--expected-mime "$expected_mime")
|
||
|
|
fi
|
||
|
|
if [ -n "$expected_zip_entries" ]; then
|
||
|
|
resolver_args+=(--expected-zip-entries "$expected_zip_entries")
|
||
|
|
fi
|
||
|
|
if [ -n "$oracle" ]; then
|
||
|
|
resolver_args+=(--oracle "$oracle")
|
||
|
|
fi
|
||
|
|
|
||
|
|
if resolution=$(node "$JOB_AWARE_NODE" "${resolver_args[@]}"); then
|
||
|
|
rc=0
|
||
|
|
else
|
||
|
|
rc=$?
|
||
|
|
fi
|
||
|
|
|
||
|
|
IFS=$'\t' read -r \
|
||
|
|
BENCH_PASS \
|
||
|
|
BENCH_ADMISSION_STATUS \
|
||
|
|
BENCH_COMPLETION_STATUS \
|
||
|
|
BENCH_COMPLETION_LATENCY_S \
|
||
|
|
BENCH_OUTPUT_SIZE \
|
||
|
|
BENCH_OUTPUT_MIME \
|
||
|
|
BENCH_ERROR <<< "$resolution"
|
||
|
|
|
||
|
|
if [ "$rc" -ne 0 ]; then
|
||
|
|
BENCHMARK_FAILURES=$((BENCHMARK_FAILURES + 1))
|
||
|
|
return "$rc"
|
||
|
|
fi
|
||
|
|
return 0
|
||
|
|
}
|
||
|
|
|
||
|
|
benchmark_assert_success() {
|
||
|
|
if [ "$BENCHMARK_FAILURES" -gt 0 ]; then
|
||
|
|
echo "Benchmark failed: ${BENCHMARK_FAILURES} request(s) timed out or returned invalid output" >&2
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
wait_for_benchmark_children() {
|
||
|
|
local expected_rows="$1" results_file="$2"
|
||
|
|
shift 2
|
||
|
|
local pid
|
||
|
|
BENCH_CHILD_EXIT_FAILURES=0
|
||
|
|
BENCH_EXPECTED_ROWS="$expected_rows"
|
||
|
|
|
||
|
|
for pid in "$@"; do
|
||
|
|
if ! wait "$pid"; then
|
||
|
|
BENCH_CHILD_EXIT_FAILURES=$((BENCH_CHILD_EXIT_FAILURES + 1))
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
|
||
|
|
BENCH_OBSERVED_ROWS=$(wc -l < "$results_file" | tr -d '[:space:]')
|
||
|
|
if [ "$BENCH_CHILD_EXIT_FAILURES" -gt 0 ] || [ "$BENCH_OBSERVED_ROWS" -ne "$expected_rows" ]; then
|
||
|
|
return 1
|
||
|
|
fi
|
||
|
|
return 0
|
||
|
|
}
|