TG2.2 Testing Issues

26 views
Skip to first unread message

Michael Pedersen

unread,
Apr 9, 2012, 12:01:47 AM4/9/12
to tg-trunk
So, I've begun working on getting jenkins fixed. Now that 2.1.5 is out, it seemed like the next logical step.

I've run into a pair of issues, though, and I think they might be related. Since I've been out of the code for so long, and so many improvements have occurred, asking here seems like the better choice.

Are we now using the multiprocessing module? If so, we need to add it to the list of requirements when python version is 2.5.

Second, when running nosetests on python 2.7 on jenkins, I get a failure. Specifically, this error:

======================================================================
ERROR: test_not_found (tests.test_tg_controller_dispatch.TestNotFoundWithIndexController)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/hudson/.hudson/jobs/tg-2.2-py2.7/workspace/tests/test_tg_controller_dispatch.py", line 492, in test_not_found
    r = self.app.get('/something', status=404)
  File "/home/hudson/.hudson/jobs/tg-2.2-py2.7/workspace/tg2env/lib/python2.7/site-packages/WebTest-1.2.4-py2.7.egg/webtest/__init__.py", line 734, in get
    expect_errors=expect_errors)
  File "/home/hudson/.hudson/jobs/tg-2.2-py2.7/workspace/tg2env/lib/python2.7/site-packages/WebTest-1.2.4-py2.7.egg/webtest/__init__.py", line 974, in do_request
    self._check_status(status, res)
  File "/home/hudson/.hudson/jobs/tg-2.2-py2.7/workspace/tg2env/lib/python2.7/site-packages/WebTest-1.2.4-py2.7.egg/webtest/__init__.py", line 1012, in _check_status
    "Bad response: %s (not %s)" % (res.status, status))
AppError: Bad response: 200 OK (not 404)

Any clues as to why before I dig in? My next immediate task is to prepare the 2.2 beta release, and get every package for it upgraded as high as possible, so any help fixing this one error would be most appreciated.

--
Michael J. Pedersen
My Online Resume: http://www.icelus.org/ -- Google+ http://plus.ly/pedersen
Google Talk: m.ped...@icelus.org -- Twitter: pedersentg

Alessandro Molina

unread,
Apr 9, 2012, 5:59:26 AM4/9/12
to turbogea...@googlegroups.com
That test has been added to reproduce a crank issue that should have
been fixed in crank 0.6.2,
check that you are actually testing with the last crank release.

> --
> You received this message because you are subscribed to the Google Groups
> "TurboGears Trunk" group.
> To post to this group, send email to turbogea...@googlegroups.com.
> To unsubscribe from this group, send email to
> turbogears-tru...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/turbogears-trunk?hl=en.

Michael Pedersen

unread,
Apr 9, 2012, 9:06:44 AM4/9/12
to turbogea...@googlegroups.com
Thank you. That problem has been fixed, but I'm afraid we might have a more serious problem. In Jenkins, I've upgraded all the tests to use Python 2.5 and 2.7 (instead of 2.4 and 2.6). On 2.5, I get the traceback below. Since I do not get this on 2.7, I have to think we've got a language incompatibility happening (though it could be packages needing to be upgraded, too, and that's the focus of my work tonight).

Traceback (most recent call last):
  File "setup.py", line 79, in <module>
    zip_safe=False
  File "/usr/lib/python2.5/distutils/core.py", line 151, in setup
    dist.run_commands()
  File "/usr/lib/python2.5/distutils/dist.py", line 974, in run_commands
    self.run_command(cmd)
  File "/usr/lib/python2.5/distutils/dist.py", line 994, in run_command
    cmd_obj.run()
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/commands.py", line 137, in run
    TestProgram(argv=argv, config=self.__config)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/core.py", line 118, in __init__
    **extra_args)
  File "/usr/lib/python2.5/unittest.py", line 767, in __init__
    self.parseArgs(argv)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/core.py", line 135, in parseArgs
    self.config.configure(argv, doc=self.usage())
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/config.py", line 330, in configure
    self.plugins.begin()
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/plugins/manager.py", line 94, in __call__
    return self.call(*arg, **kw)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/plugins/manager.py", line 162, in simple
    result = meth(*arg, **kw)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/Pylons-1.0-py2.5.egg/pylons/test.py", line 74, in begin
    relative_to=path)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 203, in loadapp
    return loadobj(APP, uri, name=name, **kw)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 223, in loadobj
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 247, in loadcontext
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 270, in _loadconfig
    return loader.get_context(object_type, name, global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 401, in get_context
    section)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 423, in _context_from_use
    object_type, name=use, global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 353, in get_context
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 247, in loadcontext
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 270, in _loadconfig
    return loader.get_context(object_type, name, global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 401, in get_context
    section)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 423, in _context_from_use
    object_type, name=use, global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 353, in get_context
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 247, in loadcontext
    global_conf=global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 277, in _loadegg
    return loader.get_context(object_type, name, global_conf)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 553, in get_context
    object_type, name=name)
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg2env/lib/python2.5/site-packages/PasteDeploy-1.3.4-py2.5.egg/paste/deploy/loadwsgi.py", line 579, in find_egg_entry_point
    possible.append((entry.load(), protocol, entry.name))
  File "build/bdist.linux-i686/egg/pkg_resources.py", line 1954, in load
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg21inst/tg21teststd/tg21teststd/config/middleware.py", line 4, in <module>
    from tg21teststd.config.app_cfg import base_config
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg21inst/tg21teststd/tg21teststd/config/app_cfg.py", line 16, in <module>
    from tg.configuration import AppConfig
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg21inst/tg21/tg/__init__.py", line 58, in <module>
    from tg.controllers import TGController, redirect, url, lurl, abort
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg21inst/tg21/tg/controllers/__init__.py", line 5, in <module>
    from tg.controllers.decoratedcontroller import (DecoratedController,
  File "/home/hudson/.hudson/jobs/tg-2.2-devtools-py2.5/workspace/tg21inst/tg21/tg/controllers/decoratedcontroller.py", line 11, in <module>
    strip_string = operator.methodcaller('strip')
AttributeError: 'module' object has no attribute 'methodcaller'

Alessandro Molina

unread,
Apr 9, 2012, 4:26:05 PM4/9/12
to turbogea...@googlegroups.com
You are right, I forgot to check on Python 2.5 and methodcaller wasn't
available there.
I pushed a quick fix for that right now.

Michael Pedersen

unread,
Apr 9, 2012, 4:36:38 PM4/9/12
to turbogea...@googlegroups.com
Heh, I just found the exact same fix. We do have a new problem, though, and this one is kinda large.

tw2.core is using syntax like this:

======================================================================
ERROR: Failure: SyntaxError (invalid syntax (i18n.py, line 19))
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/marvin/venvs/tg2-25/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/loader.py", line 390, in loadTestsFromName
    addr.filename, addr.module)
  File "/home/marvin/venvs/tg2-25/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/importer.py", line 39, in importFromPath
    return self.importFromDir(dir_path, fqname)
  File "/home/marvin/venvs/tg2-25/lib/python2.5/site-packages/nose-1.0.0-py2.5.egg/nose/importer.py", line 86, in importFromDir
    mod = load_module(part_fqname, fh, filename, desc)
  File "/home/marvin/src/tg2/tests/test_validation.py", line 9, in <module>
    from tg.controllers import TGController
  File "/home/marvin/src/tg2/tg/__init__.py", line 58, in <module>
    from tg.controllers import TGController, redirect, url, lurl, abort
  File "/home/marvin/src/tg2/tg/controllers/__init__.py", line 5, in <module>
    from tg.controllers.decoratedcontroller import (DecoratedController,
  File "/home/marvin/src/tg2/tg/controllers/decoratedcontroller.py", line 40, in <module>
    from tw2.core import ValidationError as Tw2ValidationError
  File "/home/marvin/src/tg2/tw2.core-2.0.1-py2.5.egg/tw2/core/__init__.py", line 11, in <module>
    from widgets import (Widget, CompoundWidget, RepeatingWidget,
  File "/home/marvin/src/tg2/tw2.core-2.0.1-py2.5.egg/tw2/core/widgets.py", line 12, in <module>
    import validation as vd
  File "/home/marvin/src/tg2/tw2.core-2.0.1-py2.5.egg/tw2/core/validation.py", line 11, in <module>
    from i18n import _
  File "/home/marvin/src/tg2/tw2.core-2.0.1-py2.5.egg/tw2/core/i18n.py", line 19
    except TypeError as e:
                      ^
SyntaxError: invalid syntax


While I'm glad they are, it does require us to make a choice: Either tw2 is not the default, or we're bumping the minimum requirement to Python 2.6. Personally, I prefer Py-2.6, but that's me. Thoughts?

Alessandro Molina

unread,
Apr 9, 2012, 4:54:53 PM4/9/12
to turbogea...@googlegroups.com
Most of tw2 is written with exceptions in python2.5 style,
actually only that exception is written with 2.6+ syntax.

we can probably ask toscawidgets team to change that except clause to
solve the issue.
tw2.0 is not python3 compatible and so there isn't any particular
reason to keep it written that way.

python3 compatibility won't probably happen before we have tg2.3 which
won't support python2.5 anymore.

Alessandro Molina

unread,
Apr 9, 2012, 5:15:12 PM4/9/12
to turbogea...@googlegroups.com
I checked on tw2.core and actually the exception value wasn't required at all.

I just sent a patch to the toscawidgets2 team.

On Mon, Apr 9, 2012 at 10:54 PM, Alessandro Molina

Michael Pedersen

unread,
Apr 9, 2012, 5:58:44 PM4/9/12
to turbogea...@googlegroups.com
Just a quick note: Alessandro and I spoke with Ralph Bean of TW2, and he fixed the problem. So, we'll be pushing forward with tw2 being available with TG2.2 (along with TW1, don't worry, just TW2 will be the default for new projects).
Reply all
Reply to author
Forward
0 new messages