gstreamer/subprojects/gst-integration-testsuites/testsuites/validate/dash/retry_on_failure.validatetest

51 lines
3.2 KiB
Text

meta,
handles-states=true,
ignore-eos=true,
allow-errors=true,
args = {
"playbin3 name=pb video-sink=fakesink audio-sink=fakesink",
},
expected-issues = {
# First attempt to play while the mpd is not available
"expected-issue, issue-id=\"runtime::error-on-bus\", details=\".*Service Unavailable.*\"",
"expected-issue, issue-id=\"runtime::error-on-bus\", details=\".*Got error: Internal data stream error.*\"",
"expected-issue, issue-id=\"scenario::execution-error\", details=\".*Error message happened while executing action.*\"",
# Spurious error that happens racily when tearing down the pipeline
"expected-issue, issue-id=\"runtime::error-on-bus\", details=\".*Stream doesn't contain enough.*\", sometimes=true",
# Second attempt to play while the first chunk is not available
"expected-issue, issue-id=\"runtime::error-on-bus\", details=\".*Fragment downloading has failed consecutive times.*\"",
"expected-issue, issue-id=\"scenario::execution-error\", details=\".*Error message happened while executing action.*\"",
}
start-http-server, working-directory="$(test_dir)/../../../medias/defaults/dash/webm/"
set-properties, pb::uri="http://127.0.0.1:$(http_server_port)/output.mpd"
# Force the HTTP server to return 503 (Service Unavailable) for the first 3 attempts
# to download the DASH manifest (output.mpd). souphttpsrc will retry 3 times by
# default, and then fail. After these 3 failures, we get the
# "First attempt to play while the mpd is not available" expected issues
http-request, uri="http://127.0.0.1:$(http_server_port)/admin/status-rules", method=PUT, headers="application/json",
body="{\"path\": \"/output.mpd\", \"repeat\": 3, \"status_code\": 503}"
play, description="Playing will fail as souphttpsrc::retries=3 by default"
# 1. Force HTTP 503 errors for the first media segment (chunk-stream0-00001.webm)
# 2. The manifest download will succeed (previous errors cleared)
# 3. dashdemux will start downloading media segments
# 4. The first segment download will fail 3 times (adaptivedemux retry limit)
# 5. Pipeline should fail with "Fragment downloading has failed consecutive times"
http-request, uri="http://127.0.0.1:$(http_server_port)/admin/status-rules", method=PUT, headers="application/json",
body="{\"path\": \"/chunk-stream0-00001.webm\", \"repeat\": 3, \"status_code\": 503}"
play, description="Playing will fail as adaptivedemux retries max 3 times"
# Make sure that if download errors happen only twice, either for the manifest or chunks, the pipeline plays
http-request, uri="http://127.0.0.1:$(http_server_port)/admin/status-rules", method=PUT, headers="application/json",
body="{\"path\": \"/output.mpd\", \"repeat\": 2, \"status_code\": 503}"
play, description="Playing now that all errors have been cleared and content is available"
set-state, state=null, playback-time=1.0
http-request, uri="http://127.0.0.1:$(http_server_port)/admin/status-rules", method=PUT, headers="application/json",
body="{\"path\": \"/chunk-stream0-00001.webm\", \"repeat\": 2, \"status_code\": 503}"
play, description="Playing now that all errors have been cleared and content is available"
stop, playback-time=1.0