Hi all,
I'm having trouble with the Galaxy functional tests. On our Linux server
things seem to work, but I'm having trouble on my Mac. This affects
multiple tests.
For example, using a test for my own tool wrapper, on Linux my test
passes. On my Mac, the tool is missing the required binary so I
expect the test to fail with error level 127 and a message to stderr.
However, I get the following cryptic error:
$ ./run_functional_tests.sh -id tmhmm2
...
functional_tests.py INFO 2010-10-28 11:57:01,129 Embedded web server started
functional_tests.py INFO 2010-10-28 11:57:01,185 Functional tests will
be run against localhost:8980
nose.plugins.manager DEBUG 2010-10-28 11:57:01,210
DefaultPluginManager load plugin sqlalchemy =
sqlalchemy.test.noseplugin:NoseSQLAlchemy
nose.plugins.manager DEBUG 2010-10-28 11:57:01,215
DefaultPluginManager load plugin nosehtml = nosehtml.plugin:NoseHTML
TMHMM 2.0 ( tmhmm2 ) > Test-1 ... Error - <type
'exceptions.TypeError'>: 'NoneType' object is not callable
URL:
http://localhost:8980/history
File
'/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/Paste-1.7.2-py2.5.egg/paste/exceptions/errormiddleware.py',
line 144 in __call__
app_iter = self.application(environ, sr_checker)
File
'/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/Paste-1.7.2-py2.5.egg/paste/recursive.py',
line 80 in __call__
return self.application(environ, start_response)
File
'/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/Paste-1.7.2-py2.5.egg/paste/httpexceptions.py',
line 636 in __call__
return self.application(environ, start_response)
File '/Users/xxx/repositories/galaxy-central/lib/galaxy/web/framework/base.py',
line 154 in __call__
return body( environ, start_response )
File
'/Users/xxx/repositories/galaxy-central/lib/galaxy/web/framework/__init__.py',
line 668 in render
template.render_context( context )
File
'/Users/xxx/repositories/galaxy-central/eggs/Mako-0.2.5-py2.5.egg/mako/template.py',
line 146 in render_context
runtime._render_context(self, self.callable_, context, *args, **kwargs)
File
'/Users/xxx/repositories/galaxy-central/eggs/Mako-0.2.5-py2.5.egg/mako/runtime.py',
line 381 in _render_context
_exec_template(inherit, lclcontext, args=args, kwargs=kwargs)
File
'/Users/xxx/repositories/galaxy-central/eggs/Mako-0.2.5-py2.5.egg/mako/runtime.py',
line 414 in _exec_template
callable_(context, *args, **kwargs)
File
'/Users/xxx/repositories/galaxy-central/database/compiled_templates/root/history.mako.py',
line 55 in render_body
__M_writer(u'\n<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01
Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">\n\n<html>\n\n<head>\n<title>')
File
'/Users/xxx/repositories/galaxy-central/lib/galaxy/web/framework/__init__.py',
line 665 in write
response_write( d.encode( 'utf-8' ) )
TypeError: 'NoneType' object is not callable
CGI Variables
-------------
CONTENT_LENGTH: '0'
HTTP_ACCEPT: 'text/html; */*'
HTTP_ACCEPT_ENCODING: 'identity'
HTTP_CONNECTION: 'close'
HTTP_COOKIE: '$Version=1;
galaxysession=eb142648ac45b770a711a07bbd8189c4a80d9868f9ceff96f0635391728a47dfe5161bca180a2aae;
$Path="/"'
HTTP_HOST: 'localhost:8980'
PATH_INFO: '/history'
REMOTE_ADDR: '127.0.0.1'
REQUEST_METHOD: 'GET'
SERVER_NAME: '127.0.0.1'
SERVER_PORT: '8980'
SERVER_PROTOCOL: 'HTTP/1.1'
Configuration
-------------
static_enabled: False
use_translogger: False
WSGI Variables
--------------
application: <paste.recursive.RecursiveMiddleware object at 0xbfd2e10>
paste.cookies: (<SimpleCookie:
galaxysession='eb142648ac45b770a711a07bbd8189c4a80d9868f9ceff96f0635391728a47dfe5161bca180a2aae'>,
'$Version=1;
galaxysession=eb142648ac45b770a711a07bbd8189c4a80d9868f9ceff96f0635391728a47dfe5161bca180a2aae;
$Path="/"')
paste.expected_exceptions: [<class 'paste.httpexceptions.HTTPException'>]
paste.httpexceptions: <paste.httpexceptions.HTTPExceptionHandler
object at 0xbfd3110>
paste.httpserver.thread_pool: <paste.httpserver.ThreadPool object at
0xccf1f10>
paste.recursive.forward: <paste.recursive.Forwarder from />
paste.recursive.include: <paste.recursive.Includer from />
paste.recursive.include_app_iter: <paste.recursive.IncluderAppIter from />
paste.recursive.script_name: ''
paste.throw_errors: True
webob._parsed_query_vars: (MultiDict([]), '')
wsgi process: 'Multithreaded'
------------------------------------------------------------
ERROR
======================================================================
ERROR: TMHMM 2.0 ( tmhmm2 ) > Test-1
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/Users/xxx/repositories/galaxy-central/test/functional/test_toolbox.py",
line 160, in test_tool
self.do_it( td )
File
"/Users/xxx/repositories/galaxy-central/test/functional/test_toolbox.py",
line 24, in do_it
self.new_history()
File "/Users/xxx/repositories/galaxy-central/test/base/twilltestcase.py",
line 291, in new_history
self.check_history_for_string('Your history is empty')
File "/Users/xxx/repositories/galaxy-central/test/base/twilltestcase.py",
line 215, in check_history_for_string
self.visit_page( "history" )
File "/Users/xxx/repositories/galaxy-central/test/base/twilltestcase.py",
line 1040, in visit_page
tc.code( 200 )
File
"/Users/xxx/repositories/galaxy-central/eggs/twill-0.9-py2.5.egg/twill/commands.py",
line 133, in code
should_be))
TwillAssertionError: code is 500 != 200
----------------------------------------------------------------------
Ran 1 test in 0.824s
FAILED (errors=1)
functional_tests.py INFO 2010-10-28 11:57:02,079 Shutting down
functional_tests.py INFO 2010-10-28 11:57:02,079 Shutting down
embedded web server
...
###############################################################################
Here is my suggested fix:
diff -r 82743fcbf23c lib/galaxy/web/framework/__init__.py
--- a/lib/galaxy/web/framework/__init__.py Thu Oct 28 11:41:18 2010 +0100
+++ b/lib/galaxy/web/framework/__init__.py Thu Oct 28 11:56:16 2010 +0100
@@ -660,6 +660,9 @@
## return template.render( **data )
def render( environ, start_response ):
response_write = start_response(
self.response.wsgi_status(), self.response.wsgi_headeritems() )
+ if response_write is None:
+ log.error( "Error: this request returned None from
start_response: %s" % self.request.browser_url )
+ return []
class StreamBuffer( object ):
def write( self, d ):
response_write( d.encode( 'utf-8' ) )
###############################################################################
With the patch, I get:
$ ./run_functional_tests.sh -id tmhmm2
...
functional_tests.py INFO 2010-10-28 11:52:37,742 Embedded web server started
functional_tests.py INFO 2010-10-28 11:52:37,800 Functional tests will
be run against localhost:9383
nose.plugins.manager DEBUG 2010-10-28 11:52:37,825
DefaultPluginManager load plugin sqlalchemy =
sqlalchemy.test.noseplugin:NoseSQLAlchemy
nose.plugins.manager DEBUG 2010-10-28 11:52:37,829
DefaultPluginManager load plugin nosehtml = nosehtml.plugin:NoseHTML
TMHMM 2.0 ( tmhmm2 ) > Test-1 ... galaxy.web.framework ERROR
2010-10-28 11:52:38,685 Error: this request returned None from
start_response:
http://localhost:9383/history
ERROR
======================================================================
ERROR: TMHMM 2.0 ( tmhmm2 ) > Test-1
----------------------------------------------------------------------
Traceback (most recent call last):
File
"/Users/xxx/repositories/galaxy-central/test/functional/test_toolbox.py",
line 160, in test_tool
self.do_it( td )
File
"/Users/xxx/repositories/galaxy-central/test/functional/test_toolbox.py",
line 24, in do_it
self.new_history()
File "/Users/xxx/repositories/galaxy-central/test/base/twilltestcase.py",
line 291, in new_history
self.check_history_for_string('Your history is empty')
File "/Users/xxx/repositories/galaxy-central/test/base/twilltestcase.py",
line 217, in check_history_for_string
tc.find(subpatt)
File
"/Users/xxx/repositories/galaxy-central/eggs/twill-0.9-py2.5.egg/twill/commands.py",
line 239, in find
raise TwillAssertionError("no match to '%s'" % (what,))
TwillAssertionError: no match to 'Your'
-------------------- >> begin captured logging << --------------------
galaxy.web.framework: ERROR: Error: this request returned None from
start_response:
http://localhost:9383/history
--------------------- >> end captured logging << ---------------------
----------------------------------------------------------------------
Ran 1 test in 0.821s
FAILED (errors=1)
functional_tests.py INFO 2010-10-28 11:52:38,691 Shutting down
functional_tests.py INFO 2010-10-28 11:52:38,691 Shutting down
embedded web server
...
###############################################################################
I'm still puzzled about what is going wrong - this affects other Galaxy tests
as well - not just mine. Is there something obvious wrong with the setup on
this machine? Actually using Galaxy running on this Mac seems to work.
Thanks,
Peter