mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-04-26 06:54:49 +00:00
validate: tools: Implement the notion of hard timeout
Allowing to define timeout that is not relative to the last observed number.
This commit is contained in:
parent
2391a56714
commit
2520f4f110
2 changed files with 34 additions and 7 deletions
|
@ -78,7 +78,9 @@ class GstValidateLaunchTest(GstValidateTest):
|
||||||
|
|
||||||
super(GstValidateLaunchTest, self).__init__(DEFAULT_GST_VALIDATE, classname,
|
super(GstValidateLaunchTest, self).__init__(DEFAULT_GST_VALIDATE, classname,
|
||||||
options, reporter,
|
options, reporter,
|
||||||
scenario=scenario,)
|
scenario=scenario,
|
||||||
|
timeout=timeout)
|
||||||
|
|
||||||
self.pipeline_desc = pipeline_desc
|
self.pipeline_desc = pipeline_desc
|
||||||
self.file_infos = file_infos
|
self.file_infos = file_infos
|
||||||
|
|
||||||
|
@ -105,11 +107,26 @@ class GstValidateMediaCheckTest(Test):
|
||||||
|
|
||||||
class GstValidateTranscodingTest(GstValidateTest):
|
class GstValidateTranscodingTest(GstValidateTest):
|
||||||
def __init__(self, classname, options, reporter,
|
def __init__(self, classname, options, reporter,
|
||||||
combination, uri, file_infos):
|
combination, uri, file_infos, timeout=DEFAULT_TIMEOUT,
|
||||||
|
scenario=Scenario.get_scenario("play_15s")):
|
||||||
|
|
||||||
|
try:
|
||||||
|
timeout = PROTOCOL_TIMEOUTS[file_infos.get("file-info", "protocol")]
|
||||||
|
except KeyError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
try:
|
||||||
|
# FIXME Come up with a less arbitrary calculation!
|
||||||
|
hard_timeout = 4 * scenario.max_duration + timeout
|
||||||
|
except AttributeError:
|
||||||
|
hard_timeout = None
|
||||||
|
pass
|
||||||
|
|
||||||
super(GstValidateTranscodingTest, self).__init__(
|
super(GstValidateTranscodingTest, self).__init__(
|
||||||
DEFAULT_GST_VALIDATE_TRANSCODING, classname,
|
DEFAULT_GST_VALIDATE_TRANSCODING, classname,
|
||||||
options, reporter, scenario=None)
|
options, reporter, scenario=scenario, timeout=timeout,
|
||||||
|
hard_timeout=hard_timeout)
|
||||||
|
|
||||||
self.file_infos = file_infos
|
self.file_infos = file_infos
|
||||||
self.uri = uri
|
self.uri = uri
|
||||||
self.combination = combination
|
self.combination = combination
|
||||||
|
|
|
@ -36,9 +36,15 @@ class Test(Loggable):
|
||||||
""" A class representing a particular test. """
|
""" A class representing a particular test. """
|
||||||
|
|
||||||
def __init__(self, application_name, classname, options,
|
def __init__(self, application_name, classname, options,
|
||||||
reporter, timeout=DEFAULT_TIMEOUT):
|
reporter, timeout=DEFAULT_TIMEOUT, hard_timeout=None):
|
||||||
|
"""
|
||||||
|
@timeout: The timeout during which the value return by get_current_value
|
||||||
|
keeps being exactly equal
|
||||||
|
@hard_timeout: Max time the test can take in absolute
|
||||||
|
"""
|
||||||
Loggable.__init__(self)
|
Loggable.__init__(self)
|
||||||
self.timeout = timeout
|
self.timeout = timeout
|
||||||
|
self.hard_timeout = hard_timeout
|
||||||
self.classname = classname
|
self.classname = classname
|
||||||
self.options = options
|
self.options = options
|
||||||
self.application = application_name
|
self.application = application_name
|
||||||
|
@ -111,6 +117,7 @@ class Test(Loggable):
|
||||||
def wait_process(self):
|
def wait_process(self):
|
||||||
last_val = 0
|
last_val = 0
|
||||||
last_change_ts = time.time()
|
last_change_ts = time.time()
|
||||||
|
start_ts = time.time()
|
||||||
while True:
|
while True:
|
||||||
self.process.poll()
|
self.process.poll()
|
||||||
if self.process.returncode is not None:
|
if self.process.returncode is not None:
|
||||||
|
@ -137,10 +144,13 @@ class Test(Loggable):
|
||||||
|
|
||||||
if val == last_val:
|
if val == last_val:
|
||||||
delta = time.time() - last_change_ts
|
delta = time.time() - last_change_ts
|
||||||
self.debug("Same value for %d seconds" % delta)
|
self.debug("%s: Same value for %d/%d seconds" % (self, delta, self.timeout))
|
||||||
if delta > self.timeout:
|
if delta > self.timeout:
|
||||||
self.result = Result.TIMEOUT
|
self.result = Result.TIMEOUT
|
||||||
break
|
break
|
||||||
|
elif self.hard_timeout and time.time() - start_ts > self.hard_timeout:
|
||||||
|
self.result = Result.TIMEOUT
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
last_change_ts = time.time()
|
last_change_ts = time.time()
|
||||||
last_val = val
|
last_val = val
|
||||||
|
@ -192,10 +202,10 @@ class GstValidateTest(Test):
|
||||||
|
|
||||||
def __init__(self, application_name, classname,
|
def __init__(self, application_name, classname,
|
||||||
options, reporter, timeout=DEFAULT_TIMEOUT,
|
options, reporter, timeout=DEFAULT_TIMEOUT,
|
||||||
scenario=None):
|
scenario=None, hard_timeout=None):
|
||||||
|
|
||||||
super(GstValidateTest, self).__init__(application_name, classname, options,
|
super(GstValidateTest, self).__init__(application_name, classname, options,
|
||||||
reporter, timeout=DEFAULT_TIMEOUT)
|
reporter, timeout=timeout, hard_timeout=hard_timeout)
|
||||||
|
|
||||||
if scenario is None or scenario.name.lower() == "none":
|
if scenario is None or scenario.name.lower() == "none":
|
||||||
self.scenario = None
|
self.scenario = None
|
||||||
|
|
Loading…
Reference in a new issue