Skip to content

Commit 3e17195

Browse files
committed
Fix AudioPlayback testcase ID collision for LAVA CI
This PR fixes the testcase ID collision issue in LAVA by implementing flexible testcase naming for the AudioPlayback test suite, enabling parallel execution of multiple AudioPlayback configurations in CI. Changes: - Added RESULT_TESTNAME variable and --lava-testcase-id parameter to run.sh - Updated AudioPlayback.yaml to pass unique testcase IDs via LAVA_TESTCASE_ID - Updated Read_me.md with CI/LAVA integration documentation and examples Signed-off-by: Teja Swaroop Moida <tmoida@qti.qualcomm.com>
1 parent 604e57f commit 3e17195

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)