Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@ params:
AUDIO_FORMATS: "wav,flac"
AUDIO_DURATION: "10"
AUDIO_GST_DEBUG: "2"
LAVA_TESTCASE_ID: "Audio_Record_Playback"

run:
steps:
- REPO_PATH="$PWD"
- cd "$REPO_PATH/Runner/suites/Multimedia/GSTreamer/Audio/Audio_Record_Playback"
- AUDIO_SHARED_RECORDED_DIR="${REPO_PATH%%/tests/*}/shared/audio-record-playback"
- export REPO_PATH AUDIO_SHARED_RECORDED_DIR AUDIO_TEST_MODE AUDIO_TEST_NAME AUDIO_FORMATS AUDIO_DURATION AUDIO_GST_DEBUG
- ./run.sh || true
- ./run.sh --lava-testcase-id "${LAVA_TESTCASE_ID}" || true
- $REPO_PATH/Runner/utils/send-to-lava.sh Audio_Record_Playback.res
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,13 @@ Help:
- `9` MEMDUMP
- Default: `2`

- `--lava-testcase-id <name>`
- Override the test case name reported to LAVA in the `.res` file
- Default: `Audio_Record_Playback`
- Used by LAVA to match expected test case names
- Example: `--lava-testcase-id "GStreamer_Audio_Record_wav"`
- **Note:** This is typically set automatically by LAVA job definitions and should not be used for local testing

---

## Examples
Expand Down Expand Up @@ -574,11 +581,27 @@ The test supports these environment variables (can be set in LAVA job definition
- `AUDIO_CLIP_PATH` - Local path to test audio files (overrides AUDIO_CLIP_URL if files exist)
- `AUDIO_SHARED_RECORDED_DIR` - Shared directory for recorded audio artifacts (optional)
- `REPO_PATH` - Repository root path (set by YAML, used for path resolution)
- `LAVA_TESTCASE_ID` - Override test case name for LAVA reporting (default: Audio_Record_Playback)

**Priority order for duration**: `AUDIO_DURATION` > `RUNTIMESEC` > default (10)

**Shared Artifact Directory**: The test uses `AUDIO_SHARED_RECORDED_DIR` to store recorded audio files in a shared location across multiple test runs. If not set, the test will automatically determine the appropriate directory based on the environment (LAVA vs local).

### LAVA Test Case Naming

The test supports flexible test case naming for LAVA integration:

- **Default behavior**: Reports results as `Audio_Record_Playback` in the `.res` file
- **LAVA override**: Set `LAVA_TESTCASE_ID` parameter in the YAML definition to match LAVA's expected test case name
- **Example YAML configuration**:
```yaml
params:
AUDIO_TEST_MODE: record
AUDIO_FORMATS: wav
LAVA_TESTCASE_ID: "GStreamer_Audio_Record_wav" # Matches LAVA expected name
```
- This ensures LAVA correctly matches test results with expected test case names, avoiding "Unexpected test result" errors

### Test Counting

- **Total tests**: 10 (when running with default wav,flac formats in all mode)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ SCRIPT_DIR="$(
)"

TESTNAME="Audio_Record_Playback"
RESULT_TESTNAME="$TESTNAME"
RES_FILE="${SCRIPT_DIR}/${TESTNAME}.res"
LOG_DIR="${SCRIPT_DIR}/logs"
OUTDIR="$LOG_DIR/$TESTNAME"
Expand All @@ -59,7 +60,7 @@ done

if [ -z "${INIT_ENV:-}" ]; then
echo "[ERROR] Could not find init_env (starting at $SCRIPT_DIR)" >&2
echo "$TESTNAME SKIP" >"$RES_FILE" 2>/dev/null || true
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE" 2>/dev/null || true
exit 0
fi

Expand All @@ -80,7 +81,7 @@ if ! mkdir -p "$OUTDIR" "$DMESG_DIR"; then
log_error "Failed to create required directories:"
log_error " OUTDIR=$OUTDIR"
log_error " DMESG_DIR=$DMESG_DIR"
echo "$TESTNAME FAIL" >"$RES_FILE" 2>/dev/null || true
echo "$RESULT_TESTNAME FAIL" >"$RES_FILE" 2>/dev/null || true
exit 0
fi
: >"$RES_FILE"
Expand All @@ -100,7 +101,7 @@ fi
# Create the recorded directory
if ! mkdir -p "$RECORDED_DIR"; then
log_error "Failed to create recorded directory: $RECORDED_DIR"
echo "$TESTNAME FAIL" >"$RES_FILE"
echo "$RESULT_TESTNAME FAIL" >"$RES_FILE"
exit 0
fi

Expand Down Expand Up @@ -133,21 +134,21 @@ for param in AUDIO_DURATION AUDIO_GST_DEBUG GST_DEBUG_LEVEL; do
case "$val" in
''|*[!0-9]*)
log_warn "$param must be numeric (got '$val')"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
*)
if [ "$val" -le 0 ] 2>/dev/null; then
log_warn "$param must be positive (got '$val')"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
;;
esac
fi
done

# shellcheck disable=SC2317
# shellcheck disable=SC2317,SC2329
cleanup() {
# Best-effort: try to kill only children first; fall back to name-based kill
if ! pkill -P "$$" -x gst-launch-1.0 >/dev/null 2>&1; then
Expand All @@ -162,7 +163,7 @@ while [ $# -gt 0 ]; do
--mode)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --mode"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && testMode="$2"
Expand All @@ -172,7 +173,7 @@ while [ $# -gt 0 ]; do
--formats)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --formats"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && formatList="$2"
Expand All @@ -182,14 +183,14 @@ while [ $# -gt 0 ]; do
--duration)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --duration"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
if [ -n "$2" ]; then
case "$2" in
''|*[!0-9]*)
log_warn "Invalid --duration '$2' (must be numeric)"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
*)
Expand All @@ -203,7 +204,7 @@ while [ $# -gt 0 ]; do
--gst-debug)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --gst-debug"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && gstDebugLevel="$2"
Expand All @@ -213,7 +214,7 @@ while [ $# -gt 0 ]; do
--clip-url)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --clip-url"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && clipUrl="$2"
Expand All @@ -223,7 +224,7 @@ while [ $# -gt 0 ]; do
--clip-path)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --clip-path"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && clipPath="$2"
Expand All @@ -233,13 +234,23 @@ while [ $# -gt 0 ]; do
--test-name)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --test-name"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && testName="$2"
shift 2
;;

--lava-testcase-id)
if [ $# -lt 2 ] || [ "${2#--}" != "$2" ]; then
log_warn "Missing/invalid value for --lava-testcase-id"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
[ -n "$2" ] && RESULT_TESTNAME="$2"
shift 2
;;

-h|--help)
cat <<EOF
Usage: $0 [OPTIONS]
Expand Down Expand Up @@ -270,6 +281,11 @@ OPTIONS:
--clip-path <path> Local path to test audio files
(overrides --clip-url if files exist)

--lava-testcase-id <name>
Override the test case name reported to LAVA
(default: Audio_Record_Playback)
Used by LAVA to match expected test case names

-h, --help Display this help message

ENVIRONMENT VARIABLES:
Expand Down Expand Up @@ -316,7 +332,7 @@ EOF

*)
log_warn "Unknown argument: $1"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
esac
Expand All @@ -325,28 +341,28 @@ done
# -------------------- Validate parsed values --------------------
case "$testMode" in all|record|playback) : ;; *)
log_warn "Invalid --mode '$testMode'"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
esac

case "$gstDebugLevel" in 1|2|3|4|5|6|7|8|9) : ;; *)
log_warn "Invalid --gst-debug '$gstDebugLevel' (allowed: 1-9)"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
esac

case "$duration" in
''|*[!0-9]*)
log_warn "Invalid duration '$duration' (must be numeric)"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
*)
if [ "$duration" -le 0 ] 2>/dev/null; then
log_warn "Duration must be positive (got '$duration')"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
;;
Expand All @@ -365,7 +381,7 @@ if [ -n "$testName" ]; then
log_warn "Valid names: record_wav, record_flac, record_pulsesrc_wav, record_pulsesrc_flac,"
log_warn " playback_wav, playback_flac, playback_pulsesrc_wav, playback_pulsesrc_flac,"
log_warn " playback_sample_ogg, playback_sample_mp3"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
;;
esac
Expand All @@ -379,7 +395,7 @@ NUM_BUFFERS=$(( (SAMPLE_RATE * duration) / SAMPLES_PER_BUFFER ))
# -------------------- Pre-checks --------------------
check_dependencies "gst-launch-1.0 gst-inspect-1.0 awk grep head sed tr stat find curl tar" >/dev/null 2>&1 || {
log_skip "Missing required tools (gst-launch-1.0, gst-inspect-1.0, awk, grep, head, sed, tr, stat, find, curl, tar)"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
}

Expand Down Expand Up @@ -860,7 +876,7 @@ log_info "Starting audio record/playback tests..."
# Check required elements
if ! check_required_elements; then
log_warn "Required GStreamer elements (audiotestsrc/pulsesink) not available"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
exit 0
fi
log_info "Required GStreamer elements verified"
Expand Down Expand Up @@ -1018,15 +1034,15 @@ fi
case "$result" in
PASS)
log_pass "$TESTNAME $result: $reason"
echo "$TESTNAME PASS" >"$RES_FILE"
echo "$RESULT_TESTNAME PASS" >"$RES_FILE"
;;
FAIL)
log_fail "$TESTNAME $result: $reason"
echo "$TESTNAME FAIL" >"$RES_FILE"
echo "$RESULT_TESTNAME FAIL" >"$RES_FILE"
;;
*)
log_warn "$TESTNAME $result: $reason"
echo "$TESTNAME SKIP" >"$RES_FILE"
echo "$RESULT_TESTNAME SKIP" >"$RES_FILE"
;;
esac

Expand Down
Loading