Skip to content

Commit 8b2f32c

Browse files
committed
Made changes to handle display and video sh scripts per new comments received
Signed-off-by: Nitin Nakka <nitinn@qti.qualcomm.com>
1 parent 01767d2 commit 8b2f32c

5 files changed

Lines changed: 286 additions & 128 deletions

File tree

Lines changed: 27 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
metadata:
2-
name: gstreamer-waylandsink-playback
2+
name: Waylandsink_Playback
33
format: "Lava-Test Test Definition 1.0"
44
description: >
55
GStreamer waylandsink playback validation with Weston/Wayland server checks
@@ -15,8 +15,8 @@ params:
1515
# Playback duration in seconds (default: 30)
1616
# Priority: VIDEO_DURATION > RUNTIMESEC
1717
VIDEO_DURATION: "30"
18-
RUNTIMESEC: "" # if set, used as fallback
19-
18+
RUNTIMESEC: "" # fallback if VIDEO_DURATION is empty
19+
2020
# Test pattern for videotestsrc (default: smpte)
2121
VIDEO_PATTERN: "smpte" # smpte|snow|black|white|red|green|blue|checkers-1|checkers-2|ball
2222

@@ -32,39 +32,42 @@ params:
3232
# GStreamer debug level (default: 2)
3333
# Priority: VIDEO_GST_DEBUG > GST_DEBUG_LEVEL
3434
VIDEO_GST_DEBUG: "2" # 1-9
35-
GST_DEBUG_LEVEL: "" # if set, used as fallback
35+
GST_DEBUG_LEVEL: "" # fallback if VIDEO_GST_DEBUG is empty
3636

3737
run:
3838
steps:
3939
- REPO_PATH="$PWD"
40+
- TESTNAME="Waylandsink_Playback"
41+
- TEST_DIR="${REPO_PATH}/Runner/suites/Multimedia/GStreamer/Display/${TESTNAME}"
4042

41-
# Navigate to test directory
42-
- cd Runner/suites/Multimedia/GSTreamer/Display/Waylandsink_Playback/
43+
- cd "${TEST_DIR}"
4344

44-
# Export environment variables (script reads these directly)
45-
- export VIDEO_DURATION="${VIDEO_DURATION}"
46-
- export RUNTIMESEC="${RUNTIMESEC}"
47-
- export VIDEO_PATTERN="${VIDEO_PATTERN}"
48-
- export VIDEO_WIDTH="${VIDEO_WIDTH}"
49-
- export VIDEO_HEIGHT="${VIDEO_HEIGHT}"
50-
- export VIDEO_FRAMERATE="${VIDEO_FRAMERATE}"
51-
- export VIDEO_GST_DEBUG="${VIDEO_GST_DEBUG}"
52-
- export GST_DEBUG_LEVEL="${GST_DEBUG_LEVEL}"
53-
54-
# Build CLI args for overrides (optional - can also rely on env vars)
45+
# Build CLI args with the same priority rules as run.sh defaults.
5546
- |
5647
CMD="./run.sh"
5748
58-
# Use CLI args to override defaults if needed
59-
# Note: Script reads env vars by default, CLI args override env vars
60-
[ -n "${VIDEO_WIDTH}" ] && [ -n "${VIDEO_HEIGHT}" ] && CMD="${CMD} --resolution ${VIDEO_WIDTH}x${VIDEO_HEIGHT}"
49+
# Resolution
50+
if [ -n "${VIDEO_WIDTH}" ] && [ -n "${VIDEO_HEIGHT}" ]; then
51+
CMD="${CMD} --resolution ${VIDEO_WIDTH}x${VIDEO_HEIGHT}"
52+
fi
53+
54+
# Pattern
6155
[ -n "${VIDEO_PATTERN}" ] && CMD="${CMD} --pattern ${VIDEO_PATTERN}"
62-
[ -n "${VIDEO_DURATION}" ] && CMD="${CMD} --duration ${VIDEO_DURATION}"
56+
57+
# Duration (VIDEO_DURATION > RUNTIMESEC)
58+
DUR="${VIDEO_DURATION}"
59+
[ -z "${DUR}" ] && DUR="${RUNTIMESEC}"
60+
[ -n "${DUR}" ] && CMD="${CMD} --duration ${DUR}"
61+
62+
# Framerate
6363
[ -n "${VIDEO_FRAMERATE}" ] && CMD="${CMD} --framerate ${VIDEO_FRAMERATE}"
64-
[ -n "${VIDEO_GST_DEBUG}" ] && CMD="${CMD} --gst-debug ${VIDEO_GST_DEBUG}"
64+
65+
# GST debug (VIDEO_GST_DEBUG > GST_DEBUG_LEVEL)
66+
DBG="${VIDEO_GST_DEBUG}"
67+
[ -z "${DBG}" ] && DBG="${GST_DEBUG_LEVEL}"
68+
[ -n "${DBG}" ] && CMD="${CMD} --gst-debug ${DBG}"
6569
6670
echo "[LAVA] Running: ${CMD}"
6771
sh -c "${CMD}" || true
6872
69-
# Send result to LAVA
70-
- "${REPO_PATH}/Runner/utils/send-to-lava.sh Waylandsink_Playback.res || true"
73+
- Runner/utils/send-to-lava.sh ${TESTNAME}.res

Runner/suites/Multimedia/GSTreamer/Display/Waylandsink_Playback/run.sh

Lines changed: 102 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,18 @@ SCRIPT_DIR="$(
1111
pwd
1212
)"
1313

14+
TESTNAME="Waylandsink_Playback"
15+
RES_FILE="${SCRIPT_DIR}/${TESTNAME}.res"
16+
LOG_DIR="${SCRIPT_DIR}/logs"
17+
OUTDIR="$LOG_DIR/$TESTNAME"
18+
GST_LOG="$OUTDIR/gst.log"
19+
RUN_LOG="$OUTDIR/run.log"
20+
21+
mkdir -p "$OUTDIR" >/dev/null 2>&1 || true
22+
: >"$RES_FILE"
23+
: >"$GST_LOG"
24+
: >"$RUN_LOG"
25+
1426
INIT_ENV=""
1527
SEARCH="$SCRIPT_DIR"
1628
while [ "$SEARCH" != "/" ]; do
@@ -38,38 +50,31 @@ fi
3850
# shellcheck disable=SC1091
3951
[ -f "$TOOLS/lib_display.sh" ] && . "$TOOLS/lib_display.sh"
4052

41-
TESTNAME="Waylandsink_Playback"
42-
RES_FILE="${SCRIPT_DIR}/${TESTNAME}.res"
43-
LOG_DIR="${SCRIPT_DIR}/logs"
44-
OUTDIR="$LOG_DIR/$TESTNAME"
45-
GST_LOG="$OUTDIR/gst.log"
46-
RUN_LOG="$OUTDIR/run.log"
47-
48-
mkdir -p "$OUTDIR" >/dev/null 2>&1 || true
49-
: >"$RES_FILE"
50-
: >"$GST_LOG"
51-
: >"$RUN_LOG"
52-
5353
result="FAIL"
5454
reason="unknown"
5555

5656
# -------------------- Defaults --------------------
5757
# Validate environment variables if set
58-
if [ -n "$VIDEO_DURATION" ] && ! echo "$VIDEO_DURATION" | grep -q "^[0-9]\+$"; then
58+
if [ -n "${VIDEO_DURATION:-}" ] && ! echo "$VIDEO_DURATION" | grep -q "^[0-9]\+$"; then
5959
log_warn "VIDEO_DURATION must be numeric (got '$VIDEO_DURATION')"
6060
echo "$TESTNAME SKIP" >"$RES_FILE"
6161
exit 0
6262
fi
63-
if [ -n "$RUNTIMESEC" ] && ! echo "$RUNTIMESEC" | grep -q "^[0-9]\+$"; then
63+
if [ -n "${RUNTIMESEC:-}" ] && ! echo "$RUNTIMESEC" | grep -q "^[0-9]\+$"; then
6464
log_warn "RUNTIMESEC must be numeric (got '$RUNTIMESEC')"
6565
echo "$TESTNAME SKIP" >"$RES_FILE"
6666
exit 0
6767
fi
68-
if [ -n "$VIDEO_FRAMERATE" ] && ! echo "$VIDEO_FRAMERATE" | grep -q "^[0-9]\+$"; then
68+
if [ -n "${VIDEO_FRAMERATE:-}" ] && ! echo "$VIDEO_FRAMERATE" | grep -q "^[0-9]\+$"; then
6969
log_warn "VIDEO_FRAMERATE must be numeric (got '$VIDEO_FRAMERATE')"
7070
echo "$TESTNAME SKIP" >"$RES_FILE"
7171
exit 0
7272
fi
73+
if [ -n "${VIDEO_GST_DEBUG:-${GST_DEBUG_LEVEL:-}}" ] && ! echo "${VIDEO_GST_DEBUG:-${GST_DEBUG_LEVEL:-}}" | grep -q "^[0-9]\+$"; then
74+
log_warn "GST debug level must be numeric (got '${VIDEO_GST_DEBUG:-${GST_DEBUG_LEVEL:-}}')"
75+
echo "$TESTNAME SKIP" >"$RES_FILE"
76+
exit 0
77+
fi
7378

7479
duration="${VIDEO_DURATION:-${RUNTIMESEC:-30}}"
7580
pattern="${VIDEO_PATTERN:-smpte}"
@@ -79,7 +84,10 @@ framerate="${VIDEO_FRAMERATE:-30}"
7984
gstDebugLevel="${VIDEO_GST_DEBUG:-${GST_DEBUG_LEVEL:-2}}"
8085

8186
cleanup() {
82-
pkill -x gst-launch-1.0 >/dev/null 2>&1 || true
87+
# Best-effort: try to kill only children first; fall back to name-based kill
88+
if ! pkill -P "$$" -x gst-launch-1.0 >/dev/null 2>&1; then
89+
pkill -x gst-launch-1.0 >/dev/null 2>&1 || true
90+
fi
8391
}
8492
trap cleanup INT TERM EXIT
8593

@@ -201,8 +209,12 @@ while [ $# -gt 0 ]; do
201209
echo "$TESTNAME SKIP" >"$RES_FILE"
202210
exit 0
203211
fi
204-
# If $2 is empty, keep default and shift 2
205-
[ -n "$2" ] && gstDebugLevel="$2"
212+
if ! echo "$2" | grep -q "^[0-9]\+$"; then
213+
log_warn "GST debug level must be numeric (got '$2')"
214+
echo "$TESTNAME SKIP" >"$RES_FILE"
215+
exit 0
216+
fi
217+
gstDebugLevel="$2"
206218
shift 2
207219
;;
208220

@@ -266,9 +278,16 @@ EOF
266278
esac
267279
done
268280

281+
# Basic sanity
282+
if [ "$duration" -le 0 ] || [ "$width" -le 0 ] || [ "$height" -le 0 ] || [ "$framerate" -le 0 ]; then
283+
log_warn "Invalid parameters: duration=$duration width=$width height=$height framerate=$framerate"
284+
echo "$TESTNAME SKIP" >"$RES_FILE"
285+
exit 0
286+
fi
287+
269288
# -------------------- Pre-checks --------------------
270-
check_dependencies "gst-launch-1.0 gst-inspect-1.0 grep head sed" >/dev/null 2>&1 || {
271-
log_skip "Missing required tools (gst-launch-1.0, gst-inspect-1.0, grep, head, sed)"
289+
check_dependencies "gst-launch-1.0 gst-inspect-1.0 grep head sed tail date mktemp" >/dev/null 2>&1 || {
290+
log_skip "Missing required tools (gst-launch-1.0, gst-inspect-1.0, grep, head, sed, tail, date, mktemp)"
272291
echo "$TESTNAME SKIP" >"$RES_FILE"
273292
exit 0
274293
}
@@ -293,6 +312,22 @@ if command -v display_connected_summary >/dev/null 2>&1; then
293312
fi
294313
fi
295314

315+
# Fallback: check /sys/class/drm/*/status
316+
if [ "$have_connector" -eq 0 ]; then
317+
drm_connected=""
318+
for st in /sys/class/drm/card*-*/status; do
319+
[ -f "$st" ] || continue
320+
if grep -qi "connected" "$st"; then
321+
conn=$(basename "$(dirname "$st")")
322+
drm_connected="${drm_connected}${drm_connected:+,}${conn}"
323+
fi
324+
done
325+
if [ -n "$drm_connected" ]; then
326+
have_connector=1
327+
log_info "Connected display (drm sysfs): $drm_connected"
328+
fi
329+
fi
330+
296331
if [ "$have_connector" -eq 0 ]; then
297332
log_warn "No connected DRM display found, skipping ${TESTNAME}."
298333
echo "$TESTNAME SKIP" >"$RES_FILE"
@@ -330,6 +365,9 @@ if [ -z "$sock" ]; then
330365
fi
331366
if [ -n "$sock" ]; then
332367
log_info "Weston started successfully with socket: $sock"
368+
if command -v adopt_wayland_env_from_socket >/dev/null 2>&1; then
369+
adopt_wayland_env_from_socket "$sock" >/dev/null 2>&1 || true
370+
fi
333371
fi
334372
else
335373
log_warn "weston_pick_env_or_start failed"
@@ -340,10 +378,10 @@ if [ -z "$sock" ]; then
340378
if command -v discover_wayland_socket_anywhere >/dev/null 2>&1; then
341379
sock=$(discover_wayland_socket_anywhere | head -n 1 || true)
342380
fi
343-
if [ -n "$sock" ] && command -v adopt_wayland_env_from_socket >/dev/null 2>&1; then
381+
if [ -n "$sock" ]; then
344382
log_info "Weston created Wayland socket: $sock"
345-
if ! adopt_wayland_env_from_socket "$sock"; then
346-
log_warn "Failed to adopt env from $sock"
383+
if command -v adopt_wayland_env_from_socket >/dev/null 2>&1; then
384+
adopt_wayland_env_from_socket "$sock" >/dev/null 2>&1 || true
347385
fi
348386
fi
349387
fi
@@ -362,7 +400,7 @@ fi
362400
# Verify Wayland connection
363401
if command -v wayland_connection_ok >/dev/null 2>&1; then
364402
if ! wayland_connection_ok; then
365-
log_fail "Wayland connection test failed; cannot run ${TESTNAME}."
403+
log_warn "Wayland connection test failed; skipping ${TESTNAME}."
366404
echo "$TESTNAME SKIP" >"$RES_FILE"
367405
exit 0
368406
fi
@@ -384,16 +422,20 @@ export GST_DEBUG="$gstDebugLevel"
384422
export GST_DEBUG_FILE="$GST_LOG"
385423

386424
# -------------------- Build and run pipeline --------------------
425+
# Make source real-time to match duration validation.
387426
num_buffers=$((duration * framerate))
388427

389-
pipeline="videotestsrc num-buffers=${num_buffers} pattern=${pattern} ! video/x-raw,width=${width},height=${height},framerate=${framerate}/1 ! videoconvert ! waylandsink"
428+
pipeline="videotestsrc is-live=true num-buffers=${num_buffers} pattern=${pattern} ! video/x-raw,width=${width},height=${height},framerate=${framerate}/1 ! videoconvert ! waylandsink"
390429

391430
log_info "Pipeline: $pipeline"
392431

393432
# Run with timeout
394433
start_ts=$(date +%s)
395434

396-
if gstreamer_run_gstlaunch_timeout "$((duration + 10))" "$pipeline" >>"$RUN_LOG" 2>&1; then
435+
# Give some slack, but timeout should still be treated as a real failure for this test
436+
timeout_sec=$((duration + 15))
437+
438+
if gstreamer_run_gstlaunch_timeout "$timeout_sec" "$pipeline" >>"$RUN_LOG" 2>&1; then
397439
gstRc=0
398440
else
399441
gstRc=$?
@@ -405,8 +447,11 @@ elapsed=$((end_ts - start_ts))
405447
log_info "Playback finished: rc=${gstRc} elapsed=${elapsed}s"
406448

407449
# -------------------- Validation --------------------
408-
# Duration threshold (allow 2s slack)
409-
min_duration=$((duration - 2))
450+
if [ "$duration" -gt 2 ]; then
451+
min_duration=$((duration - 2))
452+
else
453+
min_duration=0
454+
fi
410455

411456
# Check for GStreamer errors in both run log and GST debug log
412457
run_log_ok=1
@@ -419,10 +464,18 @@ fi
419464

420465
# Validate last 1000 lines of GST debug log if it exists and has content
421466
if [ -s "$GST_LOG" ]; then
422-
# Create temp file with last 1000 lines
423-
tail -n 1000 "$GST_LOG" > "${GST_LOG}.tail"
424-
if ! gstreamer_validate_log "${GST_LOG}.tail" "$TESTNAME"; then
425-
gst_log_ok=0
467+
tmp_tail=$(mktemp "${OUTDIR}/gst.tail.XXXXXX" 2>/dev/null || mktemp) || tmp_tail=""
468+
if [ -n "$tmp_tail" ]; then
469+
tail -n 1000 "$GST_LOG" >"$tmp_tail" 2>/dev/null || true
470+
if ! gstreamer_validate_log "$tmp_tail" "$TESTNAME"; then
471+
gst_log_ok=0
472+
fi
473+
rm -f "$tmp_tail" >/dev/null 2>&1 || true
474+
else
475+
# If mktemp failed, fall back to validating the full GST log
476+
if ! gstreamer_validate_log "$GST_LOG" "$TESTNAME"; then
477+
gst_log_ok=0
478+
fi
426479
fi
427480
rm -f "${GST_LOG}.tail"
428481
fi
@@ -445,9 +498,13 @@ else
445498
result="PASS"
446499
reason="Playback completed successfully (elapsed=${elapsed}/${duration}s)"
447500
;;
448-
124|137|143) # Timeout/kill signals - expected for long duration tests
449-
result="PASS"
450-
reason="Playback completed via ${gstRc} (SIGTERM=143, SIGKILL=137, GNU timeout=124) after ${elapsed}/${duration}s"
501+
124)
502+
result="FAIL"
503+
reason="Playback timed out (timeout=${timeout_sec}s, elapsed=${elapsed}s) - pipeline did not exit cleanly"
504+
;;
505+
137|143)
506+
result="FAIL"
507+
reason="Playback killed by signal (rc=$gstRc, elapsed=${elapsed}s) - unexpected termination"
451508
;;
452509
*) # Unexpected return code
453510
result="FAIL"
@@ -461,6 +518,16 @@ else
461518
fi
462519
fi
463520

521+
# Helpful tails on failure (stdout visibility in CI)
522+
if [ "$result" != "PASS" ]; then
523+
log_info "---- gst-launch output (tail) ----"
524+
tail -n 120 "$RUN_LOG" 2>/dev/null || true
525+
if [ -s "$GST_LOG" ]; then
526+
log_info "---- GST debug log (tail) ----"
527+
tail -n 120 "$GST_LOG" 2>/dev/null || true
528+
fi
529+
fi
530+
464531
# -------------------- Emit result --------------------
465532
case "$result" in
466533
PASS)

Runner/suites/Multimedia/GSTreamer/Video/Video_Encode_Decode/Video_Encode_Decode.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,4 @@ run:
8282
sh -c "${CMD}" || true
8383
8484
# Send result to LAVA
85-
- "${REPO_PATH}/Runner/utils/send-to-lava.sh Video_Encode_Decode.res || true"
85+
- Runner/utils/send-to-lava.sh Video_Encode_Decode.res

0 commit comments

Comments
 (0)