[py-dev] Internal Error in xdist remove
Andy Fundinger
andy.fundinger at riskfocusinc.com
Fri Dec 10 15:17:17 CET 2010
Continuing my attempted upgrade to pytest 2.0.0 I'm running into some errors with using xdist for parallel testing, this test is meant to run on two local nodes in parallel and boxed, but somehow it's trying to remove something that isn't there. Any ideas? The full log is below with a few bits removed because they reference my source code, if they're critical I can obscure the data rather than removing them or try to reproduce with non-project code.
Andy Fundinger
scheduling tests via LoadScheduling
INTERNALERROR> config = <_pytest.config.Config object
at 0xff22a90>
INTERNALERROR>
INTERNALERROR> def
pytest_cmdline_main(config):
INTERNALERROR>
""" default command line protocol for initialization, session,
INTERNALERROR>
running tests and reporting. """
INTERNALERROR>
session = Session(config)
INTERNALERROR>
session.exitstatus = EXIT_OK
INTERNALERROR>
try:
INTERNALERROR>
config.pluginmanager.do_configure(config)
INTERNALERROR>
config.hook.pytest_sessionstart(session=session)
INTERNALERROR>
config.hook.pytest_collection(session=session)
INTERNALERROR> > config.hook.pytest_runtestloop(session=session)
INTERNALERROR>
INTERNALERROR> config =
<_pytest.config.Config object at 0xff22a90>
INTERNALERROR> session = <Session
'gauss_tools'>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest-2.0.1.dev5-py2.6.egg/_pytest/main.py:65:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <HookCaller
'pytest_runtestloop'>
INTERNALERROR>
INTERNALERROR> def __call__(self,
**kwargs):
INTERNALERROR>
methods = self.hookrelay._pm.listattr(self.name)
INTERNALERROR> >
return self._docall(methods, kwargs)
INTERNALERROR>
INTERNALERROR> kwargs =
{'session': <Session 'gauss_tools'>}
INTERNALERROR> methods = [<function
pytest_runtestloop at 0x1001b758>, <bound method
DSession.pytest_runtestloop of <xdist.dsession.DSession instance at
0x180b5368>>]
INTERNALERROR> self =
<HookCaller 'pytest_runtestloop'>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest-2.0.1.dev5-py2.6.egg/_pytest/core.py:390:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <HookCaller
'pytest_runtestloop'>
INTERNALERROR> methods = [<function pytest_runtestloop
at 0x1001b758>, <bound method DSession.pytest_runtestloop of
<xdist.dsession.DSession instance at 0x180b5368>>]
INTERNALERROR> kwargs = {'session': <Session
'gauss_tools'>}
INTERNALERROR>
INTERNALERROR> def _docall(self,
methods, kwargs):
INTERNALERROR>
self.trace(self.name, kwargs)
INTERNALERROR>
self.trace.root.indent += 1
INTERNALERROR>
mc = MultiCall(methods, kwargs, firstresult=self.firstresult)
INTERNALERROR>
try:
INTERNALERROR>
> res =
mc.execute()
INTERNALERROR>
INTERNALERROR> kwargs =
{'session': <Session 'gauss_tools'>}
INTERNALERROR>
mc = <MultiCall 0 results, 1
meths, kwargs={'session': <Session 'gauss_tools'>}>
INTERNALERROR> methods = [<function
pytest_runtestloop at 0x1001b758>, <bound method
DSession.pytest_runtestloop of <xdist.dsession.DSession instance at
0x180b5368>>]
INTERNALERROR> self =
<HookCaller 'pytest_runtestloop'>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest-2.0.1.dev5-py2.6.egg/_pytest/core.py:401:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <MultiCall 0 results, 1 meths,
kwargs={'session': <Session 'gauss_tools'>}>
INTERNALERROR>
INTERNALERROR> def execute(self):
INTERNALERROR>
while self.methods:
INTERNALERROR>
method = self.methods.pop()
INTERNALERROR>
kwargs = self.getkwargs(method)
INTERNALERROR>
> res =
method(**kwargs)
INTERNALERROR>
INTERNALERROR> kwargs = {}
INTERNALERROR> method = <bound
method DSession.pytest_runtestloop of <xdist.dsession.DSession instance at
0x180b5368>>
INTERNALERROR> self =
<MultiCall 0 results, 1 meths, kwargs={'session': <Session
'gauss_tools'>}>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest-2.0.1.dev5-py2.6.egg/_pytest/core.py:322:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <xdist.dsession.DSession
instance at 0x180b5368>
INTERNALERROR>
INTERNALERROR> def
pytest_runtestloop(self):
INTERNALERROR>
numnodes = len(self.nodemanager.specs)
INTERNALERROR>
dist = self.config.getvalue("dist")
INTERNALERROR>
if dist == "load":
INTERNALERROR>
self.sched = LoadScheduling(numnodes, log=self.log)
INTERNALERROR>
elif dist == "each":
INTERNALERROR>
self.sched = EachScheduling(numnodes, log=self.log)
INTERNALERROR>
else:
INTERNALERROR>
assert 0, dist
INTERNALERROR>
self.shouldstop = False
INTERNALERROR>
self.session_finished = False
INTERNALERROR>
while not self.session_finished:
INTERNALERROR>
>
self.loop_once()
INTERNALERROR>
INTERNALERROR> dist =
'load'
INTERNALERROR> numnodes = 2
INTERNALERROR> self =
<xdist.dsession.DSession instance at 0x180b5368>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest_xdist-1.6.dev2-py2.6.egg/xdist/dsession.py:204:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <xdist.dsession.DSession
instance at 0x180b5368>
INTERNALERROR>
INTERNALERROR> def
loop_once(self):
INTERNALERROR>
""" process one callback from one of the slaves.
"""
INTERNALERROR> while
1:
INTERNALERROR>
try:
INTERNALERROR>
eventcall = self.queue.get(timeout=2.0)
INTERNALERROR>
break
INTERNALERROR>
except queue.Empty:
INTERNALERROR>
continue
INTERNALERROR> callname,
kwargs = eventcall
INTERNALERROR>
assert callname, kwargs
INTERNALERROR>
method = "slave_" + callname
INTERNALERROR>
call = getattr(self, method)
INTERNALERROR>
self.log("calling method: %s(**%s)" % (method, kwargs))
INTERNALERROR> >
call(**kwargs)
INTERNALERROR>
INTERNALERROR> call =
<bound method DSession.slave_testreport of <xdist.dsession.DSession
instance at 0x180b5368>>
INTERNALERROR> callname = 'testreport'
INTERNALERROR> eventcall = ('testreport', {'node':
<SlaveController gw0>, 'rep': {snip}
when='call' outcome='passed'>})
INTERNALERROR> kwargs = {'node':
<SlaveController gw0>, 'rep': {snip}
when='call' outcome='passed'>}
INTERNALERROR> method =
'slave_testreport'
INTERNALERROR> self =
<xdist.dsession.DSession instance at 0x180b5368>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest_xdist-1.6.dev2-py2.6.egg/xdist/dsession.py:222:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <xdist.dsession.DSession
instance at 0x180b5368>, node = <SlaveController gw0>
INTERNALERROR> rep = <TestReport {snip}
when='call' outcome='passed'>
INTERNALERROR>
INTERNALERROR> def
slave_testreport(self, node, rep):
INTERNALERROR> if
rep.when in ("setup", "call"):
INTERNALERROR>
>
self.sched.remove_item(node, rep.nodeid)
INTERNALERROR>
INTERNALERROR> node =
<SlaveController gw0>
INTERNALERROR>
rep = <TestReport {snip}
when='call' outcome='passed'>
INTERNALERROR> self =
<xdist.dsession.DSession instance at 0x180b5368>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest_xdist-1.6.dev2-py2.6.egg/xdist/dsession.py:283:
INTERNALERROR> _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
INTERNALERROR>
INTERNALERROR> self = <xdist.dsession.LoadScheduling
instance at 0x1930f368>, node = <SlaveController gw0>
{item removed}
INTERNALERROR>
INTERNALERROR> def
remove_item(self, node, item):
INTERNALERROR>
if item not in self.item2nodes:
INTERNALERROR>
raise AssertiDN_XSS_NEUTRALIZE_onError(item, self.item2nodes)
INTERNALERROR>
nodes = self.item2nodes[item]
INTERNALERROR>
if node in nodes: # the node might have gone down already
INTERNALERROR>
nodes.remove(node)
INTERNALERROR>
#if not nodes:
INTERNALERROR>
# del self.item2nodes[item]
INTERNALERROR>
pending = self.node2pending[node]
INTERNALERROR> >
pending.remove(item)
INTERNALERROR> E
ValueError: list.remove(x): x not in list
INTERNALERROR>
{item and pending removed}
INTERNALERROR> node =
<SlaveController gw0>
INTERNALERROR> nodes = []
INTERNALERROR> self =
<xdist.dsession.LoadScheduling instance at 0x1930f368>
INTERNALERROR>
INTERNALERROR>
/home/andy/trunk/ext_linux64/python264/lib/python2.6/site-packages/pytest_xdist-1.6.dev2-py2.6.egg/xdist/dsession.py:103:
ValueError
Regards,
Andy Fundinger
Risk Focus Inc.
424.243.6227
New York Office: +1 917 725 6006 Fax: +1 917 591 1616
London Office: +44 (0) 207 760 7184 Fax: +44 (0) 207 691 7165
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/pytest-dev/attachments/20101210/a68b54d7/attachment.html>
More information about the Pytest-dev
mailing list