test(scripts): resolve binaries from build bin layout

This commit is contained in:
2026-03-12 11:00:30 +08:00
parent a21d4b6769
commit e0946d777f
2 changed files with 70 additions and 21 deletions
+33 -10
View File
@@ -5,6 +5,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STREAMER_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" STREAMER_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
BUILD_DIR="${STREAMER_ROOT}/build" BUILD_DIR="${STREAMER_ROOT}/build"
BUILD_BIN_DIR="${BUILD_DIR}/bin"
EVIDENCE_ROOT="${STREAMER_ROOT}/.sisyphus/evidence" EVIDENCE_ROOT="${STREAMER_ROOT}/.sisyphus/evidence"
TASK_EVIDENCE_DIR="${EVIDENCE_ROOT}/task-14-acceptance" TASK_EVIDENCE_DIR="${EVIDENCE_ROOT}/task-14-acceptance"
SUMMARY_HELPER="${SCRIPT_DIR}/acceptance_summary_helper.py" SUMMARY_HELPER="${SCRIPT_DIR}/acceptance_summary_helper.py"
@@ -66,6 +67,23 @@ binary_exists() {
[[ -x "${path}" ]] [[ -x "${path}" ]]
} }
binary_candidates() {
local name="$1"
printf '%s\n' "${BUILD_BIN_DIR}/${name}" "${BUILD_DIR}/${name}"
}
resolve_binary() {
local name="$1"
local candidate=""
while IFS= read -r candidate; do
if binary_exists "${candidate}"; then
printf '%s\n' "${candidate}"
return 0
fi
done < <(binary_candidates "${name}")
return 1
}
wait_pid() { wait_pid() {
local pid="$1" local pid="$1"
local timeout_s="$2" local timeout_s="$2"
@@ -124,7 +142,7 @@ run_rtp_row() {
local row_start_ms local row_start_ms
row_start_ms="$(date +%s%3N)" row_start_ms="$(date +%s%3N)"
"${BUILD_DIR}/rtp_receiver_tester" \ "${RTP_RECEIVER_TESTER}" \
--port "${port}" \ --port "${port}" \
--expect-pt "${payload_type}" \ --expect-pt "${payload_type}" \
--packet-threshold 1 \ --packet-threshold 1 \
@@ -135,7 +153,7 @@ run_rtp_row() {
sleep 1 sleep 1
set +e set +e
"${BUILD_DIR}/rtp_output_tester" \ "${RTP_OUTPUT_TESTER}" \
--host 127.0.0.1 \ --host 127.0.0.1 \
--port "${port}" \ --port "${port}" \
--payload-type "${payload_type}" \ --payload-type "${payload_type}" \
@@ -208,7 +226,7 @@ run_rtmp_row() {
local row_start_ms local row_start_ms
row_start_ms="$(date +%s%3N)" row_start_ms="$(date +%s%3N)"
"${BUILD_DIR}/rtmp_stub_tester" \ "${RTMP_STUB_TESTER}" \
--mode "${mode}" \ --mode "${mode}" \
--listen-host 127.0.0.1 \ --listen-host 127.0.0.1 \
--listen-port "${port}" \ --listen-port "${port}" \
@@ -220,7 +238,7 @@ run_rtmp_row() {
sleep 1 sleep 1
set +e set +e
"${BUILD_DIR}/rtmp_output_tester" \ "${RTMP_OUTPUT_TESTER}" \
--rtmp-url "rtmp://127.0.0.1:${port}/live/${row_id}" \ --rtmp-url "rtmp://127.0.0.1:${port}/live/${row_id}" \
--transport "${transport}" \ --transport "${transport}" \
--codec "${codec}" \ --codec "${codec}" \
@@ -273,16 +291,16 @@ run_rtmp_row() {
main() { main() {
local required=( local required=(
"${BUILD_DIR}/rtp_output_tester" "rtp_output_tester"
"${BUILD_DIR}/rtp_receiver_tester" "rtp_receiver_tester"
"${BUILD_DIR}/rtmp_output_tester" "rtmp_output_tester"
"${BUILD_DIR}/rtmp_stub_tester" "rtmp_stub_tester"
) )
local missing=() local missing=()
for bin in "${required[@]}"; do for bin in "${required[@]}"; do
if ! binary_exists "${bin}"; then if ! resolve_binary "${bin}" >/dev/null; then
missing+=("${bin}") missing+=("${BUILD_BIN_DIR}/${bin} or ${BUILD_DIR}/${bin}")
fi fi
done done
@@ -298,6 +316,11 @@ main() {
return 1 return 1
fi fi
RTP_OUTPUT_TESTER="$(resolve_binary rtp_output_tester)"
RTP_RECEIVER_TESTER="$(resolve_binary rtp_receiver_tester)"
RTMP_OUTPUT_TESTER="$(resolve_binary rtmp_output_tester)"
RTMP_STUB_TESTER="$(resolve_binary rtmp_stub_tester)"
run_rtp_row 1 "rtp_h264" "h264" run_rtp_row 1 "rtp_h264" "h264"
run_rtp_row 2 "rtp_h265" "h265" run_rtp_row 2 "rtp_h265" "h265"
run_rtmp_row 3 "rtmp_h264_libavformat" "h264" "libavformat" run_rtmp_row 3 "rtmp_h264_libavformat" "h264" "libavformat"
+37 -11
View File
@@ -5,6 +5,7 @@ set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
STREAMER_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" STREAMER_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
BUILD_DIR="${STREAMER_ROOT}/build" BUILD_DIR="${STREAMER_ROOT}/build"
BUILD_BIN_DIR="${BUILD_DIR}/bin"
EVIDENCE_ROOT="${STREAMER_ROOT}/.sisyphus/evidence" EVIDENCE_ROOT="${STREAMER_ROOT}/.sisyphus/evidence"
TASK_EVIDENCE_DIR="${EVIDENCE_ROOT}/task-15-fault-suite" TASK_EVIDENCE_DIR="${EVIDENCE_ROOT}/task-15-fault-suite"
SUMMARY_HELPER="${SCRIPT_DIR}/fault_summary_helper.py" SUMMARY_HELPER="${SCRIPT_DIR}/fault_summary_helper.py"
@@ -70,6 +71,28 @@ allocate_run_dir || exit 1
echo -e "order\tscenario_id\tname\tstatus\treason\tduration_ms\tcommand_rc\tlog_path" > "${MANIFEST_TSV}" echo -e "order\tscenario_id\tname\tstatus\treason\tduration_ms\tcommand_rc\tlog_path" > "${MANIFEST_TSV}"
binary_exists() {
local path="$1"
[[ -x "${path}" ]]
}
binary_candidates() {
local name="$1"
printf '%s\n' "${BUILD_BIN_DIR}/${name}" "${BUILD_DIR}/${name}"
}
resolve_binary() {
local name="$1"
local candidate=""
while IFS= read -r candidate; do
if binary_exists "${candidate}"; then
printf '%s\n' "${candidate}"
return 0
fi
done < <(binary_candidates "${name}")
return 1
}
append_manifest_row() { append_manifest_row() {
local order="$1" local order="$1"
local scenario_id="$2" local scenario_id="$2"
@@ -125,14 +148,14 @@ run_expected_failure() {
main() { main() {
local required=( local required=(
"${BUILD_DIR}/cvmmap_streamer" "cvmmap_streamer"
"${BUILD_DIR}/rtmp_output_tester" "rtmp_output_tester"
) )
local missing=() local missing=()
for bin in "${required[@]}"; do for bin in "${required[@]}"; do
if [[ ! -x "${bin}" ]]; then if ! resolve_binary "${bin}" >/dev/null; then
missing+=("${bin}") missing+=("${BUILD_BIN_DIR}/${bin} or ${BUILD_DIR}/${bin}")
fi fi
done done
@@ -149,16 +172,19 @@ main() {
return 1 return 1
fi fi
CVMMAP_STREAMER_BIN="$(resolve_binary cvmmap_streamer)"
RTMP_OUTPUT_TESTER="$(resolve_binary rtmp_output_tester)"
run_expected_failure 1 "removed_encoder_backend" "removed encoder backend rejected" \ run_expected_failure 1 "removed_encoder_backend" "removed encoder backend rejected" \
"invalid encoder backend: 'gstreamer_legacy' was removed; use ffmpeg" \ "invalid encoder backend: 'gstreamer_legacy' was removed; use ffmpeg" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--run-mode pipeline \ --run-mode pipeline \
--input-uri cvmmap://default \ --input-uri cvmmap://default \
--encoder-backend gstreamer_legacy --encoder-backend gstreamer_legacy
run_expected_failure 2 "removed_rtmp_transport" "removed RTMP transport rejected" \ run_expected_failure 2 "removed_rtmp_transport" "removed RTMP transport rejected" \
"invalid rtmp transport: 'legacy_custom' was removed; use libavformat or ffmpeg_process" \ "invalid rtmp transport: 'legacy_custom' was removed; use libavformat or ffmpeg_process" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--run-mode pipeline \ --run-mode pipeline \
--input-uri cvmmap://default \ --input-uri cvmmap://default \
--rtmp \ --rtmp \
@@ -167,7 +193,7 @@ main() {
run_expected_failure 3 "removed_rtmp_mode_cli" "removed RTMP mode flag rejected" \ run_expected_failure 3 "removed_rtmp_mode_cli" "removed RTMP mode flag rejected" \
"unknown argument: --rtmp-mode (removed; RTMP always uses enhanced mode)" \ "unknown argument: --rtmp-mode (removed; RTMP always uses enhanced mode)" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--rtmp-mode enhanced --rtmp-mode enhanced
local mode_row_dir="${RUN_DIR}/4-removed_rtmp_mode_toml" local mode_row_dir="${RUN_DIR}/4-removed_rtmp_mode_toml"
@@ -181,19 +207,19 @@ mode = "enhanced"
EOF EOF
run_expected_failure 4 "removed_rtmp_mode_toml" "removed RTMP mode TOML rejected" \ run_expected_failure 4 "removed_rtmp_mode_toml" "removed RTMP mode TOML rejected" \
"invalid RTMP config: outputs.rtmp.mode was removed; RTMP always uses enhanced mode" \ "invalid RTMP config: outputs.rtmp.mode was removed; RTMP always uses enhanced mode" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--config "${mode_config}" --config "${mode_config}"
run_expected_failure 5 "missing_rtmp_url" "missing RTMP URL rejected" \ run_expected_failure 5 "missing_rtmp_url" "missing RTMP URL rejected" \
"invalid RTMP config: enabled RTMP output requires at least one URL" \ "invalid RTMP config: enabled RTMP output requires at least one URL" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--run-mode pipeline \ --run-mode pipeline \
--input-uri cvmmap://default \ --input-uri cvmmap://default \
--rtmp --rtmp
run_expected_failure 6 "invalid_rtp_endpoint" "invalid RTP endpoint rejected" \ run_expected_failure 6 "invalid_rtp_endpoint" "invalid RTP endpoint rejected" \
"invalid RTP config: endpoint must be in '<host>:<port>' format" \ "invalid RTP config: endpoint must be in '<host>:<port>' format" \
"${BUILD_DIR}/cvmmap_streamer" \ "${CVMMAP_STREAMER_BIN}" \
--run-mode pipeline \ --run-mode pipeline \
--input-uri cvmmap://default \ --input-uri cvmmap://default \
--rtp \ --rtp \
@@ -201,7 +227,7 @@ EOF
run_expected_failure 7 "ffmpeg_process_bad_binary" "ffmpeg_process child failure surfaces" \ run_expected_failure 7 "ffmpeg_process_bad_binary" "ffmpeg_process child failure surfaces" \
"child exited before publish completed" \ "child exited before publish completed" \
"${BUILD_DIR}/rtmp_output_tester" \ "${RTMP_OUTPUT_TESTER}" \
--rtmp-url rtmp://127.0.0.1/live/test \ --rtmp-url rtmp://127.0.0.1/live/test \
--transport ffmpeg_process \ --transport ffmpeg_process \
--ffmpeg-path /nonexistent/ffmpeg \ --ffmpeg-path /nonexistent/ffmpeg \