#!/usr/bin/env bash # tests/run-ipc-protocol: Layer 2 mock IPC protocol tests (D-030) # Runs LocalBridge Unix-socket round-trip tests (no real subprocess). # Exit: 0 = all pass, non-zero = failure # Stdout: {"suite":"ipc-protocol","total":N,"passed":N,"failed":N,"duration_ms":N} set -euo pipefail FILTER="" while [[ $# -gt 0 ]]; do case "$1" in --filter) FILTER="${2:-}"; shift 2 ;; --filter=*) FILTER="${1#--filter=}"; shift ;; *) echo "Unknown argument: $1" >&2; exit 2 ;; esac done REPO_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$REPO_ROOT/server" START_MS=$(date +%s%3N) TMPOUT=$(mktemp) NEXTEST_ARGS=(nextest run --color never --test bridge_ipc) [[ -n "$FILTER" ]] && NEXTEST_ARGS+=(-E "test(~${FILTER})") set +e cargo "${NEXTEST_ARGS[@]}" 2>&1 | tee "$TMPOUT" >&2 EXIT_CODE=${PIPESTATUS[0]} set -e END_MS=$(date +%s%3N) DURATION_MS=$((END_MS - START_MS)) _extract_num() { local haystack="$1" pattern="$2" echo "$haystack" | grep -oE "[0-9]+ $pattern" | grep -oE '^[0-9]+' || echo 0 } SUMMARY=$(grep -E "^\s*(Summary|Finished)" "$TMPOUT" | tail -1 || true) TOTAL=0; PASSED=0; FAILED=0 if [[ -n "$SUMMARY" ]]; then TOTAL=$(_extract_num "$SUMMARY" "tests? run") PASSED=$(_extract_num "$SUMMARY" "passed") FAILED=$(_extract_num "$SUMMARY" "failed") fi rm -f "$TMPOUT" printf '{"suite":"ipc-protocol","total":%d,"passed":%d,"failed":%d,"duration_ms":%d}\n' \ "${TOTAL:-0}" "${PASSED:-0}" "${FAILED:-0}" "$DURATION_MS" exit $EXIT_CODE