diff --git a/lib/galaxy/tools/parser/xml.py b/lib/galaxy/tools/parser/xml.py index 216469613a8..8434a9bafc2 100644 --- a/lib/galaxy/tools/parser/xml.py +++ b/lib/galaxy/tools/parser/xml.py @@ -306,6 +306,7 @@ def _test_elem_to_dict(test_elem, i): stderr=__parse_assert_list_from_elem( test_elem.find("assert_stderr") ), expect_exit_code=test_elem.get("expect_exit_code"), expect_failure=string_as_bool(test_elem.get("expect_failure", False)), + maxseconds=test_elem.get("maxseconds", None), ) _copy_to_dict_if_present(test_elem, rval, ["interactor", "num_outputs"]) return rval diff --git a/lib/galaxy/tools/test.py b/lib/galaxy/tools/test.py index 5e34e4235e0..c507ba23877 100644 --- a/lib/galaxy/tools/test.py +++ b/lib/galaxy/tools/test.py @@ -14,7 +14,7 @@ log = logging.getLogger( __name__ ) DEFAULT_FTYPE = 'auto' DEFAULT_DBKEY = 'hg17' DEFAULT_INTERACTOR = "api" # Default mechanism test code uses for interacting with Galaxy instance. -DEFAULT_MAX_SECS = 120 +DEFAULT_MAX_SECS = None @nottest @@ -42,7 +42,9 @@ class ToolTestBuilder( object ): def __init__( self, tool, test_dict, i, default_interactor ): name = test_dict.get( 'name', 'Test-%d' % (i + 1) ) - maxseconds = int( test_dict.get( 'maxseconds', DEFAULT_MAX_SECS ) ) + maxseconds = test_dict.get( 'maxseconds', DEFAULT_MAX_SECS ) + if maxseconds is not None: + maxseconds = int( maxseconds ) self.tool = tool self.name = name diff --git a/test/base/twilltestcase.py b/test/base/twilltestcase.py index 9ecdea3050f..c285f95fb5e 100644 --- a/test/base/twilltestcase.py +++ b/test/base/twilltestcase.py @@ -37,6 +37,8 @@ tc.config( 'use_tidy', 0 ) logging.getLogger( "ClientCookie.cookies" ).setLevel( logging.WARNING ) log = logging.getLogger( __name__ ) +DEFAULT_TOOL_TEST_WAIT = os.environ.get("GALAXY_TEST_DEFAULT_WAIT", 86400) + class TwillTestCase( unittest.TestCase ): @@ -2440,15 +2442,16 @@ class TwillTestCase( unittest.TestCase ): def wait_for( self, func, **kwd ): sleep_amount = 0.2 slept = 0 - walltime_exceeded = 86400 + walltime_exceeded = kwd.get("maxseconds", None) + if walltime_exceeded is None: + walltime_exceeded = DEFAULT_TOOL_TEST_WAIT + log.info("walltime_exceeded is %s" % walltime_exceeded) while slept <= walltime_exceeded: result = func() if result: time.sleep( sleep_amount ) slept += sleep_amount sleep_amount *= 2 - if slept + sleep_amount > walltime_exceeded: - sleep_amount = walltime_exceeded - slept # don't overshoot maxseconds else: break assert slept < walltime_exceeded, 'Tool run exceeded reasonable walltime of 24 hours, terminating.' diff --git a/test/functional/tools/maxseconds.xml b/test/functional/tools/maxseconds.xml new file mode 100644 index 00000000000..a36c3da09db --- /dev/null +++ b/test/functional/tools/maxseconds.xml @@ -0,0 +1,16 @@ + + + sleep 100 + + + + + + + + + + + + + diff --git a/test/functional/tools/samples_tool_conf.xml b/test/functional/tools/samples_tool_conf.xml index 890b006bb5b..68a04a0ea65 100644 --- a/test/functional/tools/samples_tool_conf.xml +++ b/test/functional/tools/samples_tool_conf.xml @@ -24,6 +24,7 @@ +