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 @@
+