Skip to content

Commit b9d11c5

Browse files
authored
Merge pull request #396 from tmoida/main
Fix AudioPlayback testcase ID collision for LAVA CI
2 parents 17f67e7 + 3e17195 commit b9d11c5

3 files changed

Lines changed: 63 additions & 24 deletions

File tree

Runner/suites/Multimedia/Audio/AudioPlayback/AudioPlayback.yaml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,11 @@ params:
2727
NET_PROBE_ROUTE_IP: "1.1.1.1" # IP used for route probing, default: 1.1.1.1
2828
NET_PING_HOST: "8.8.8.8" # Host used for ping reachability check, default: 8.8.8.8
2929
RES_SUFFIX: "" # Suffix for unique result file and log directory (e.g., "Config1" generates AudioPlayback_Config1.res and results/AudioPlayback_Config1/), default: unset
30+
LAVA_TESTCASE_ID: "AudioPlayback" # Unique testcase ID written into the .res file for LAVA, default: AudioPlayback
3031

3132
run:
3233
steps:
3334
- REPO_PATH=$PWD
3435
- cd Runner/suites/Multimedia/Audio/AudioPlayback/
35-
- ./run.sh --backend "${AUDIO_BACKEND}" --sink "${SINK_CHOICE}" --clip-name "${CLIP_NAMES}" --clip-filter "${CLIP_FILTER}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --audio-clips-path "${AUDIO_CLIPS_BASE_DIR}" --res-suffix "${RES_SUFFIX}" --ssid "${SSID}" --password "${PASSWORD}" || true
36+
- ./run.sh --backend "${AUDIO_BACKEND}" --sink "${SINK_CHOICE}" --clip-name "${CLIP_NAMES}" --clip-filter "${CLIP_FILTER}" --loops "${LOOPS}" --timeout "${TIMEOUT}" --strict "${STRICT}" --audio-clips-path "${AUDIO_CLIPS_BASE_DIR}" --res-suffix "${RES_SUFFIX}" --lava-testcase-id "${LAVA_TESTCASE_ID}" --ssid "${SSID}" --password "${PASSWORD}" || true
3637
- $REPO_PATH/Runner/utils/send-to-lava.sh AudioPlayback${RES_SUFFIX:+_${RES_SUFFIX}}.res

Runner/suites/Multimedia/Audio/AudioPlayback/Read_me.md

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ This suite automates the validation of audio playback capabilities on Qualcomm L
1414
- Use descriptive names (e.g., play_48KHz_8b_2ch) for specific formats
1515
- Auto-discovery mode tests all available clips
1616
- **Clip filtering**: Filter tests by sample rate, bit rate, or channel configuration
17+
- **CI/LAVA integration**:
18+
- Unique result file suffixes prevent file collisions in parallel test runs
19+
- Unique testcase IDs prevent LAVA testcase ID collisions
20+
- Enables running multiple AudioPlayback configurations simultaneously in CI
1721
- Plays audio clips with configurable format, duration, and loop count
1822
- **Network operations are optional**: By default, no network connection is attempted. Use `--enable-network-download` to enable downloading missing audio files
1923
- Automatically downloads and extracts audio assets if missing
@@ -226,6 +230,7 @@ PASSWORD Wi-Fi password for network connection unset
226230
NET_PROBE_ROUTE_IP IP used for route probing (default: 1.1.1.1) 1.1.1.1
227231
NET_PING_HOST Host used for ping reachability check 8.8.8.8
228232
RES_SUFFIX Suffix for unique result file and log directory unset
233+
LAVA_TESTCASE_ID Unique testcase ID written into the .res file for LAVA AudioPlayback
229234
230235
231236
CLI Options
@@ -244,6 +249,7 @@ Option Description
244249
--enable-network-download Enable network operations to download missing audio files (default: disabled)
245250
--audio-clips-path <path> Custom location for audio clips (for CI with pre-staged clips)
246251
--res-suffix <suffix> Suffix for unique result file and log directory (e.g., "Config01" generates AudioPlayback_Config01.res and results/AudioPlayback_Config01/)
252+
--lava-testcase-id <id> Unique testcase ID written into the .res file for LAVA (e.g., "AudioPlayback_Config01")
247253
--junit <file.xml> Write JUnit XML output
248254
--verbose Enable verbose logging
249255
--help Show usage instructions
@@ -361,6 +367,31 @@ AudioPlayback_Config01.res
361367
AudioPlayback_Config07.res
362368
```
363369

370+
**Example 7: CI/LAVA workflow with unique testcase IDs (prevents LAVA collisions)**
371+
```
372+
# Using --lava-testcase-id ensures unique testcase IDs in LAVA results
373+
# This prevents testcase ID collisions when running multiple AudioPlayback configs in parallel
374+
375+
sh-5.3# ./run.sh --clip-name "playback_config1" --res-suffix "Config01" --lava-testcase-id "AudioPlayback_Config01" --audio-clips-path /home/AudioClips/ --no-extract-assets
376+
[INFO] 2026-01-22 18:10:15 - Using unique result file: ./AudioPlayback_Config01.res
377+
[PASS] 2026-01-22 18:10:45 - AudioPlayback PASS
378+
379+
sh-5.3# cat AudioPlayback_Config01.res
380+
AudioPlayback_Config01 PASS
381+
382+
sh-5.3# ./run.sh --clip-name "playback_config7" --res-suffix "Config07" --lava-testcase-id "AudioPlayback_Config07" --audio-clips-path /home/AudioClips/ --no-extract-assets
383+
[INFO] 2026-01-22 18:11:30 - Using unique result file: ./AudioPlayback_Config07.res
384+
[PASS] 2026-01-22 18:12:00 - AudioPlayback PASS
385+
386+
sh-5.3# cat AudioPlayback_Config07.res
387+
AudioPlayback_Config07 PASS
388+
389+
# LAVA will receive unique testcase IDs:
390+
# - AudioPlayback_Config01 PASS
391+
# - AudioPlayback_Config07 PASS
392+
# No testcase ID collisions!
393+
```
394+
364395
Results:
365396
- Results are stored in: results/AudioPlayback/ (or results/AudioPlayback_<suffix>/ when using --res-suffix)
366397
- Summary result file: AudioPlayback.res (or AudioPlayback_<suffix>.res when using --res-suffix)

Runner/suites/Multimedia/Audio/AudioPlayback/run.sh

Lines changed: 30 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,20 @@ if [ -d /run/systemd/system ] && command -v systemctl >/dev/null 2>&1; then
4646
fi
4747

4848
TESTNAME="AudioPlayback"
49+
RESULT_TESTNAME="$TESTNAME"
4950
RES_SUFFIX="" # Optional suffix for unique result files (e.g., "Config1")
5051
# RES_FILE will be set after parsing command-line arguments
5152

52-
# Pre-parse --res-suffix for early failure handling
53-
# This ensures unique result files even if setup fails in parallel CI runs
53+
# Pre-parse --res-suffix and --lava-testcase-id for early failure handling
54+
# This ensures unique result files and unique testcase IDs even if setup fails in parallel CI runs
5455
prev_arg=""
5556
for arg in "$@"; do
5657
case "$prev_arg" in
5758
--res-suffix)
5859
RES_SUFFIX="$arg"
59-
break
60+
;;
61+
--lava-testcase-id)
62+
RESULT_TESTNAME="$arg"
6063
;;
6164
esac
6265
prev_arg="$arg"
@@ -183,6 +186,10 @@ while [ $# -gt 0 ]; do
183186
RES_SUFFIX="$2"
184187
shift 2
185188
;;
189+
--lava-testcase-id)
190+
RESULT_TESTNAME="$2"
191+
shift 2
192+
;;
186193
--loops)
187194
LOOPS="$2"
188195
shift 2
@@ -306,7 +313,7 @@ trap 'audio_cleanup_started_daemons' EXIT HUP INT TERM
306313
if { [ -n "$CLIP_NAMES" ] || [ -n "$CLIP_FILTER" ]; } && { [ -n "$FORMATS" ] || [ -n "$DURATIONS" ]; }; then
307314
log_error "Cannot mix clip discovery parameters (--clip-name, --clip-filter) with legacy matrix parameters (--formats, --durations)"
308315
log_error "Please use either clip discovery mode OR legacy matrix mode, not both"
309-
echo "$TESTNAME SKIP" > "$RES_FILE"
316+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
310317
exit 0
311318
fi
312319

@@ -368,7 +375,7 @@ fi
368375
test_path="$(find_test_case_by_name "$TESTNAME" 2>/dev/null || echo "$SCRIPT_DIR")"
369376
if ! cd "$test_path"; then
370377
log_error "cd failed: $test_path"
371-
echo "$TESTNAME FAIL" >"$RES_FILE"
378+
echo "$RESULT_TESTNAME FAIL" >"$RES_FILE"
372379
exit 1
373380
fi
374381

@@ -443,14 +450,14 @@ if [ "$TOP_LEVEL_RUN" -eq 1 ]; then
443450
else
444451
log_error "Failed to download or extract audio clips from: $AUDIO_TAR_URL"
445452
log_skip "$TESTNAME SKIP - Audio clips download failed"
446-
echo "$TESTNAME SKIP" >"$RES_FILE"
453+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
447454
exit 0
448455
fi
449456
else
450457
log_skip "$TESTNAME SKIP - Required audio clips not found locally and network download disabled"
451458
log_info "To download audio clips, run with: --enable-network-download"
452459
log_info "Or manually download from: $AUDIO_TAR_URL"
453-
echo "$TESTNAME SKIP" >"$RES_FILE"
460+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
454461
exit 0
455462
fi
456463
fi
@@ -488,13 +495,13 @@ if [ -z "$AUDIO_BACKEND" ]; then
488495
log_info "Using backend: alsa (direct minimal-build fallback)"
489496
else
490497
log_skip "$TESTNAME SKIP - no audio backend running"
491-
echo "$TESTNAME SKIP" >"$RES_FILE"
498+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
492499
exit 0
493500
fi
494501
fi
495502
else
496503
log_skip "$TESTNAME SKIP - no audio backend running"
497-
echo "$TESTNAME SKIP" >"$RES_FILE"
504+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
498505
exit 0
499506
fi
500507
fi
@@ -558,7 +565,7 @@ fi
558565

559566
if [ "$backend_ok" -ne 1 ]; then
560567
log_skip "$TESTNAME SKIP - backend not available: $AUDIO_BACKEND"
561-
echo "$TESTNAME SKIP" >"$RES_FILE"
568+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
562569
exit 0
563570
fi
564571

@@ -573,7 +580,7 @@ case "$AUDIO_BACKEND" in
573580
export AUDIO_SYSTEMD_MANAGED
574581
else
575582
log_skip "$TESTNAME SKIP - missing PipeWire playback utility"
576-
echo "$TESTNAME SKIP" >"$RES_FILE"
583+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
577584
exit 0
578585
fi
579586
fi
@@ -587,21 +594,21 @@ case "$AUDIO_BACKEND" in
587594
export AUDIO_SYSTEMD_MANAGED
588595
else
589596
log_skip "$TESTNAME SKIP - missing PulseAudio playback utility"
590-
echo "$TESTNAME SKIP" >"$RES_FILE"
597+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
591598
exit 0
592599
fi
593600
fi
594601
;;
595602
alsa)
596603
if ! check_dependencies aplay; then
597604
log_skip "$TESTNAME SKIP - missing ALSA playback utility"
598-
echo "$TESTNAME SKIP" >"$RES_FILE"
605+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
599606
exit 0
600607
fi
601608
;;
602609
*)
603610
log_skip "$TESTNAME SKIP - unsupported backend: $AUDIO_BACKEND"
604-
echo "$TESTNAME SKIP" >"$RES_FILE"
611+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
605612
exit 0
606613
;;
607614
esac
@@ -624,7 +631,7 @@ if [ "$AUDIO_BACKEND" = "pipewire" ]; then
624631
export AUDIO_SYSTEMD_MANAGED
625632
else
626633
log_skip "$TESTNAME SKIP - PipeWire control-plane not responsive"
627-
echo "$TESTNAME SKIP" > "$RES_FILE"
634+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
628635
exit 0
629636
fi
630637
fi
@@ -647,7 +654,7 @@ elif [ "$AUDIO_BACKEND" = "pulseaudio" ]; then
647654
export AUDIO_SYSTEMD_MANAGED
648655
else
649656
log_skip "$TESTNAME SKIP - PulseAudio control-plane not responsive"
650-
echo "$TESTNAME SKIP" > "$RES_FILE"
657+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
651658
exit 0
652659
fi
653660
fi
@@ -684,7 +691,7 @@ esac
684691

685692
if [ -z "$SINK_ID" ]; then
686693
log_skip "$TESTNAME SKIP - requested sink '$SINK_CHOICE' not found for $AUDIO_BACKEND"
687-
echo "$TESTNAME SKIP" >"$RES_FILE"
694+
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
688695
exit 0
689696
fi
690697

@@ -742,13 +749,13 @@ if [ "$USE_CLIP_DISCOVERY" = "true" ]; then
742749
if [ -n "$CLIP_NAMES" ] || [ -n "$CLIP_FILTER" ]; then
743750
CLIPS_TO_TEST="$(discover_and_filter_clips "$CLIP_NAMES" "$CLIP_FILTER")" || {
744751
log_skip "$TESTNAME SKIP - Invalid clip/config name(s) provided"
745-
echo "$TESTNAME SKIP" > "$RES_FILE"
752+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
746753
exit 0
747754
}
748755
else
749756
CLIPS_TO_TEST="$(discover_audio_clips)" || {
750757
log_skip "$TESTNAME SKIP - No audio clips found in $clips_dir"
751-
echo "$TESTNAME SKIP" > "$RES_FILE"
758+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
752759
exit 0
753760
}
754761
fi
@@ -1059,23 +1066,23 @@ log_info "Summary: total=$total pass=$pass fail=$fail skip=$skip"
10591066

10601067
if [ "$total" -eq 0 ] && [ "$pass" -eq 0 ] && [ "$fail" -eq 0 ]; then
10611068
log_skip "$TESTNAME SKIP - no runnable playback testcases"
1062-
echo "$TESTNAME SKIP" > "$RES_FILE"
1069+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
10631070
exit 0
10641071
fi
10651072

10661073
# --- Proper exit codes: PASS=0, FAIL=1, SKIP-only=0 ---
10671074
if [ "$pass" -eq 0 ] && [ "$fail" -eq 0 ] && [ "$skip" -gt 0 ]; then
10681075
log_skip "$TESTNAME SKIP"
1069-
echo "$TESTNAME SKIP" > "$RES_FILE"
1076+
echo "$RESULT_TESTNAME SKIP" > "$RES_FILE"
10701077
exit 0
10711078
fi
10721079

10731080
if [ "$suite_rc" -eq 0 ]; then
10741081
log_pass "$TESTNAME PASS"
1075-
echo "$TESTNAME PASS" > "$RES_FILE"
1082+
echo "$RESULT_TESTNAME PASS" > "$RES_FILE"
10761083
exit 0
10771084
fi
10781085

10791086
log_fail "$TESTNAME FAIL"
1080-
echo "$TESTNAME FAIL" > "$RES_FILE"
1087+
echo "$RESULT_TESTNAME FAIL" > "$RES_FILE"
10811088
exit 1

0 commit comments

Comments
 (0)