[py-svn] r57145 - in py/branch/event/py/test2: . rep rep/testing rsession rsession/testing testing
hpk at codespeak.net
hpk at codespeak.net
Sat Aug 9 18:57:18 CEST 2008
Author: hpk
Date: Sat Aug 9 18:57:15 2008
New Revision: 57145
Added:
py/branch/event/py/test2/rsession/testing/test_async_functional.py
- copied, changed from r57112, py/branch/event/py/test2/rsession/testing/test_rsession.py
Removed:
py/branch/event/py/test2/rsession/rsession.py
py/branch/event/py/test2/rsession/testing/test_rsession.py
Modified:
py/branch/event/py/test2/config.py
py/branch/event/py/test2/rep/terminal.py
py/branch/event/py/test2/rep/testing/test_terminal.py
py/branch/event/py/test2/repevent.py
py/branch/event/py/test2/rsession/async.py
py/branch/event/py/test2/rsession/masterslave.py
py/branch/event/py/test2/rsession/testing/test_async.py
py/branch/event/py/test2/rsession/testing/test_masterslave.py
py/branch/event/py/test2/testing/test_config.py
Log:
* getting rid of "pending" attributes on nodes
* various fixes
Modified: py/branch/event/py/test2/config.py
==============================================================================
--- py/branch/event/py/test2/config.py (original)
+++ py/branch/event/py/test2/config.py Sat Aug 9 18:57:15 2008
@@ -178,7 +178,7 @@
""" return default session name as determined from options. """
name = 'Session'
if self.option.dist:
- name = 'RSession'
+ name = 'AsyncSession'
else:
if self.option.looponfailing or self.option.executable:
name = 'RemoteTerminalSession'
@@ -217,7 +217,7 @@
Session = 'py.__.test2.session'
RemoteTerminalSession = 'py.__.test2.terminal.remote'
-RSession = 'py.__.test2.rsession.rsession'
+AsyncSession = 'py.__.test2.rsession.async'
#
# helpers
Modified: py/branch/event/py/test2/rep/terminal.py
==============================================================================
--- py/branch/event/py/test2/rep/terminal.py (original)
+++ py/branch/event/py/test2/rep/terminal.py Sat Aug 9 18:57:15 2008
@@ -40,8 +40,8 @@
def rep_HostDown(self, ev):
host = ev.host
error = ev.error
- if error or ev.pending:
- self.write_line("HostDown %s: pending=%r" %(host.hostid, ev.pending))
+ if error:
+ self.write_line("HostDown %s: " %(host.hostid, ))
for line in str(error).split("\n"):
self.write_line("Error: %s" %(line))
Modified: py/branch/event/py/test2/rep/testing/test_terminal.py
==============================================================================
--- py/branch/event/py/test2/rep/testing/test_terminal.py (original)
+++ py/branch/event/py/test2/rep/testing/test_terminal.py Sat Aug 9 18:57:15 2008
@@ -80,7 +80,7 @@
rep.processevent(repevent.HostReady(host1, None))
s = popvalue(stringio)
assert s.find("HostReady") != -1
- rep.processevent(repevent.HostDown(host1, [], "myerror"))
+ rep.processevent(repevent.HostDown(host1, "myerror"))
s = popvalue(stringio)
assert s.find("HostDown") != -1
assert s.find("myerror") != -1
Modified: py/branch/event/py/test2/repevent.py
==============================================================================
--- py/branch/event/py/test2/repevent.py (original)
+++ py/branch/event/py/test2/repevent.py Sat Aug 9 18:57:15 2008
@@ -97,9 +97,8 @@
self.roots = roots
class HostDown(BaseEvent):
- def __init__(self, host, pending, error):
+ def __init__(self, host, error):
self.host = host
- self.pending = pending
self.error = error
class SendItem(BaseEvent):
Modified: py/branch/event/py/test2/rsession/async.py
==============================================================================
--- py/branch/event/py/test2/rsession/async.py (original)
+++ py/branch/event/py/test2/rsession/async.py Sat Aug 9 18:57:15 2008
@@ -86,6 +86,8 @@
if ev.passed:
colitems = ev.result
except KeyboardInterrupt:
+ #print py.code.ExceptionInfo().getrepr(funcargs=True)
+ #raise
exitstatus = self.EXIT_INTERRUPTED
except:
self.bus.notify(repevent.InternalException())
Modified: py/branch/event/py/test2/rsession/masterslave.py
==============================================================================
--- py/branch/event/py/test2/rsession/masterslave.py (original)
+++ py/branch/event/py/test2/rsession/masterslave.py Sat Aug 9 18:57:15 2008
@@ -14,7 +14,6 @@
self.notify = notify
self.channel = install_slave(host, config)
self.channel.setcallback(self.callback, endmarker=self.ENDMARK)
- self.pending = []
self._down = False
def callback(self, ev):
@@ -31,18 +30,12 @@
if not self._down:
if not err:
err = "TERMINATED"
- self.notify(repevent.HostDown(self.host, self.pending, err))
+ self.notify(repevent.HostDown(self.host, err))
return
if ev is None:
self._down = True
- self.notify(repevent.HostDown(self.host, self.pending, None))
+ self.notify(repevent.HostDown(self.host, None))
return
- if isinstance(ev, repevent.ItemTestReport):
- item = self.pending.pop()
- else:
- import pdb
- pdb.post_mortem(ev._excinfo[2])
- raise ValueError("received unexpected object")
except KeyboardInterrupt:
raise
except:
@@ -54,11 +47,9 @@
def send(self, item):
assert item is not None
self.channel.send(item)
- self.pending.append(item)
def sendlist(self, itemlist):
self.channel.send(itemlist)
- self.pending.extend(itemlist)
def shutdown(self):
self.channel.send(None)
Deleted: /py/branch/event/py/test2/rsession/rsession.py
==============================================================================
--- /py/branch/event/py/test2/rsession/rsession.py Sat Aug 9 18:57:15 2008
+++ (empty file)
@@ -1,50 +0,0 @@
-"""
- Remote Session Base Class
-"""
-
-import os
-import py
-
-from py.__.test2.session import Session
-from py.__.test2.rsession.hostmanage import HostManager
-
-class RSession(Session):
- """ A session that sends tests to remote places.
- It reuses the Session's main() loop and overrides
- runtest() for implementing the sending.
- """
- def fixoptions(self):
- super(RSession, self).fixoptions()
- option = self.config.option
- config = self.config
- try:
- config.getvalue('dist_hosts')
- except KeyError:
- print "For running distributed tests you need to specify"
- print "dist_hosts in a local conftest.py file, for example:"
- print
- print " dist_hosts = ['localhost'] * 4 # for 3 processors"
- print " dist_hosts = ['you at remote.com', '...'] # for testing on ssh accounts"
- print " # with your remote ssh accounts"
- print
- print "see also: http://codespeak.net/py/current/doc/test.html#automated-distributed-testing"
- raise SystemExit
-
- def sessionstarts(self):
- super(RSession, self).sessionstarts()
- self.hm = HostManager(self)
- self.hm.setup_hosts()
-
- def sessionfinishes(self, exitstatus=0):
- #self.hm.wait_for_completion()
- super(RSession, self).sessionfinishes(exitstatus)
-
- def runtest(self, item):
- # let the host manager distribute tests
- sent = self.hm.trysendtest(item)
- if not sent and not self.shouldstop:
- self.sleepabit()
- self.runtest(item)
-
- def sleepabit(self):
- py.std.time.sleep(0.1)
Modified: py/branch/event/py/test2/rsession/testing/test_async.py
==============================================================================
--- py/branch/event/py/test2/rsession/testing/test_async.py (original)
+++ py/branch/event/py/test2/rsession/testing/test_async.py Sat Aug 9 18:57:15 2008
@@ -114,7 +114,7 @@
host1 = Host("localhost")
host1.node = MockNode()
session.addhost(host1)
- ev = repevent.HostDown(host1, [], None)
+ ev = repevent.HostDown(host1, None)
session.queue.put(ev)
events = []
session.bus.subscribe(events.append)
Copied: py/branch/event/py/test2/rsession/testing/test_async_functional.py (from r57112, py/branch/event/py/test2/rsession/testing/test_rsession.py)
==============================================================================
--- py/branch/event/py/test2/rsession/testing/test_rsession.py (original)
+++ py/branch/event/py/test2/rsession/testing/test_async_functional.py Sat Aug 9 18:57:15 2008
@@ -4,15 +4,14 @@
import py
from py.__.test2 import repevent
-from py.__.test2.rsession.rsession import RSession
+from py.__.test2.rsession.async import AsyncSession
from py.__.test2.rsession.hostmanage import HostManager, Host
from basetest import BasicRsessionTest, DirSetup
from py.__.test2.testing import suptest
def setup_module(mod):
- if py.std.sys.platform == "win32":
- py.test.skip("rsession tests disabled for win32")
+ py.test.skip("XXX")
def eventreader(session):
@@ -32,7 +31,7 @@
events.append(ev)
return readevent
-class TestRSessionRemote(DirSetup, BasicRsessionTest):
+class TestAsyncFunctional(DirSetup, BasicRsessionTest):
def setup_method(self, method):
DirSetup.setup_method(self, method)
BasicRsessionTest.setup_method(self, method)
@@ -51,7 +50,7 @@
assert 0
"""))
config = py.test2.config._reparse([self.source.join("sub")])
- rsession = RSession(config)
+ rsession = AsyncSession(config)
readevent = eventreader(rsession)
rsession.main()
ev = readevent(repevent.ItemTestReport)
@@ -61,41 +60,6 @@
ev = readevent(repevent.ItemTestReport)
assert ev.failed
- def test_example_distribution_minus_x(self):
- self.source.ensure("sub", "conftest.py").write(py.code.Source("""
- dist_hosts = ['localhost:%s']
- """ % self.dest))
- self.source.ensure("sub", "__init__.py")
- self.source.ensure("sub", "test_one.py").write(py.code.Source("""
- def test_1():
- pass
- def test_x():
- import py
- py.test2.skip("aaa")
- def test_2():
- assert 0
- def test_3():
- import time
- time.sleep(0.5)
- def test_4():
- assert 0
- """))
- config = py.test2.config._reparse([self.source.join("sub"), '-x', '--dist'])
- rsession = RSession(config)
- sorter = suptest.events_from_session(rsession)
- testevents = sorter.get(repevent.ItemTestReport)
-
- py.test.skip("XXX need for different way to test -x --dist")
- assert len([x for x in testevents if x.passed]) == 2
- assert len([x for x in testevents if x.failed]) == 1
- assert len([x for x in testevents if x.skipped]) == 1
-
- #passed, skipped, failed = sorter.listoutcomes()
- #assert len(passed) == 1
- #assert len(skipped) == 1
- #assert len(failed) == 1
- #assert failed[0].item.name == "test_2"
-
def test_distribution_rsync_roots_example(self):
destdir = py.test2.ensuretemp("example_dist_destdir")
subdir = "sub_example_dist"
@@ -124,7 +88,7 @@
config = py.test2.config._reparse([tmpdir.join(subdir)])
assert config.topdir == tmpdir
assert not tmpdir.join("__init__.py").check()
- rsession = RSession(config)
+ rsession = AsyncSession(config)
sorter = suptest.events_from_session(rsession)
testevents = sorter.get(repevent.ItemTestReport)
assert len([x for x in testevents if x.passed]) == 2
Modified: py/branch/event/py/test2/rsession/testing/test_masterslave.py
==============================================================================
--- py/branch/event/py/test2/rsession/testing/test_masterslave.py (original)
+++ py/branch/event/py/test2/rsession/testing/test_masterslave.py Sat Aug 9 18:57:15 2008
@@ -38,7 +38,6 @@
self.node.send(123) # invalid item
ev = self.getevent(repevent.HostDown)
assert ev.host == self.host
- assert ev.pending == [123]
assert str(ev.error).find("AttributeError") != -1
def test_crash_killed(self):
@@ -46,14 +45,12 @@
self.node.send(item) # invalid item
ev = self.getevent(repevent.HostDown)
assert ev.host == self.host
- assert ev.pending == [item]
assert str(ev.error).find("TERMINATED") != -1
def test_node_down(self):
self.node.shutdown()
event = self.getevent(repevent.HostDown)
assert event.host == self.host
- assert event.pending == []
assert not event.error
self.node.callback(self.node.ENDMARK)
excinfo = py.test.raises(IOError,
@@ -71,7 +68,6 @@
self.node.send(self.getfunc("passed"))
ev = self.getevent()
assert ev.passed
- assert not self.node.pending
assert ev.colitem == item
#assert event.item == item
#assert event.item is not item
@@ -81,7 +77,6 @@
self.node.send(self.getfunc(outcome))
ev = self.getevent()
assert getattr(ev, outcome)
- assert not self.node.pending
def test_send_list(self):
l = []
@@ -91,4 +86,3 @@
for outcome in "passed failed skipped".split():
ev = self.getevent()
assert getattr(ev, outcome)
- assert not self.node.pending
Deleted: /py/branch/event/py/test2/rsession/testing/test_rsession.py
==============================================================================
--- /py/branch/event/py/test2/rsession/testing/test_rsession.py Sat Aug 9 18:57:15 2008
+++ (empty file)
@@ -1,195 +0,0 @@
-
-""" Tests various aspects of rsession, like ssh hosts setup/teardown
-"""
-
-import py
-from py.__.test2 import repevent
-from py.__.test2.rsession.rsession import RSession
-from py.__.test2.rsession.hostmanage import HostManager, Host
-from basetest import BasicRsessionTest, DirSetup
-
-from py.__.test2.testing import suptest
-
-def setup_module(mod):
- if py.std.sys.platform == "win32":
- py.test.skip("rsession tests disabled for win32")
-
-
-def eventreader(session):
- queue = py.std.Queue.Queue()
- session.bus.subscribe(queue.put)
- def readevent(eventtype=repevent.ItemTestReport, timeout=2.0):
- events = []
- while 1:
- try:
- ev = queue.get(timeout=timeout)
- except py.std.Queue.Empty:
- print "seen events", events
- raise IOError("did not see %r events" % (eventtype))
- else:
- if isinstance(ev, eventtype):
- return ev
- events.append(ev)
- return readevent
-
-class TestRSessionRemote(DirSetup, BasicRsessionTest):
- def setup_method(self, method):
- DirSetup.setup_method(self, method)
- BasicRsessionTest.setup_method(self, method)
-
- def test_dist_some_tests(self):
- self.source.ensure("conftest.py").write(py.code.Source("""
- dist_hosts = ['localhost']
- """))
- self.source.ensure("sub", "test_one.py").write(py.code.Source("""
- def test_1():
- pass
- def test_x():
- import py
- py.test2.skip("aaa")
- def test_fail():
- assert 0
- """))
- config = py.test2.config._reparse([self.source.join("sub")])
- rsession = RSession(config)
- readevent = eventreader(rsession)
- rsession.main()
- ev = readevent(repevent.ItemTestReport)
- assert ev.passed
- ev = readevent(repevent.ItemTestReport)
- assert ev.skipped
- ev = readevent(repevent.ItemTestReport)
- assert ev.failed
-
- def test_example_distribution_minus_x(self):
- self.source.ensure("sub", "conftest.py").write(py.code.Source("""
- dist_hosts = ['localhost:%s']
- """ % self.dest))
- self.source.ensure("sub", "__init__.py")
- self.source.ensure("sub", "test_one.py").write(py.code.Source("""
- def test_1():
- pass
- def test_x():
- import py
- py.test2.skip("aaa")
- def test_2():
- assert 0
- def test_3():
- import time
- time.sleep(0.5)
- def test_4():
- assert 0
- """))
- config = py.test2.config._reparse([self.source.join("sub"), '-x', '--dist'])
- rsession = RSession(config)
- sorter = suptest.events_from_session(rsession)
- testevents = sorter.get(repevent.ItemTestReport)
-
- py.test.skip("XXX need for different way to test -x --dist")
- assert len([x for x in testevents if x.passed]) == 2
- assert len([x for x in testevents if x.failed]) == 1
- assert len([x for x in testevents if x.skipped]) == 1
-
- #passed, skipped, failed = sorter.listoutcomes()
- #assert len(passed) == 1
- #assert len(skipped) == 1
- #assert len(failed) == 1
- #assert failed[0].item.name == "test_2"
-
- def test_distribution_rsync_roots_example(self):
- destdir = py.test2.ensuretemp("example_dist_destdir")
- subdir = "sub_example_dist"
- tmpdir = self.source
- tmpdir.ensure(subdir, "conftest.py").write(py.code.Source("""
- dist_hosts = ["localhost:%s"]
- dist_rsync_roots = ["%s", "../py"]
- """ % (destdir, tmpdir.join(subdir), )))
- tmpdir.ensure(subdir, "__init__.py")
- tmpdir.ensure(subdir, "test_one.py").write(py.code.Source("""
- def test_1():
- pass
- def test_2():
- assert 0
- def test_3():
- raise ValueError(23)
- def test_4(someargs):
- pass
- def test_5():
- assert __file__ != '%s'
- #def test_6():
- # import py
- # assert py.__file__ != '%s'
- """ % (tmpdir.join(subdir), py.__file__)))
- destdir.join("py").mksymlinkto(py.path.local(py.__file__).dirpath())
- config = py.test2.config._reparse([tmpdir.join(subdir)])
- assert config.topdir == tmpdir
- assert not tmpdir.join("__init__.py").check()
- rsession = RSession(config)
- sorter = suptest.events_from_session(rsession)
- testevents = sorter.get(repevent.ItemTestReport)
- assert len([x for x in testevents if x.passed]) == 2
- assert len([x for x in testevents if x.failed]) == 3
- assert len([x for x in testevents if x.skipped]) == 0
-
- def test_setup_teardown_run_ssh(self):
- hosts = [Host('localhost:%s' % self.dest)]
-
- queue = py.std.Queue.Queue()
- self.session.bus.subscribe(queue.put)
- hm = HostManager(self.session, hosts=hosts)
- hm.setup_hosts()
-
- # actually run some tests
- for host in hm.hosts:
- node = host.node
- node.send(self.getfunc("passed"))
- node.send(self.getfunc("failed"))
- node.send(self.getfunc("skipped"))
- node.send(self.getfunc("print"))
-
- num_hosts = len(hm.hosts)
- events = []
- while len(events) < 4 * num_hosts:
- item = queue.get(timeout=1.0)
- if isinstance(item, repevent.ItemTestReport):
- events.append(item)
- print "got all events", events
- hm.wait_for_completion()
- passed = [ev for ev in events
- if ev.passed]
- skipped = [ev for ev in events
- if ev.skipped]
- assert len(passed) == 2 * num_hosts
- assert len(skipped) == num_hosts
- assert len(events) == 4 * num_hosts
- # one of passed for each node has non-empty stdout
- #passed_stdout = [i for i in passed if i.outcome.stdout.find('samfing') != -1]
- #assert len(passed_stdout) == len(nodes), passed
-
- def test_nice_level(self):
- """ Tests if nice level behaviour is ok
- """
- hosts = [Host('localhost:%s' % self.dest)]
- tmpdir = self.source
- tmpdir.ensure("__init__.py")
- tmpdir.ensure("conftest.py").write(py.code.Source("""
- dist_hosts = ['localhost:%s']
- dist_nicelevel = 10
- """ % self.dest))
- tmpdir.ensure("test_one.py").write("""def test_nice():
- import os
- assert os.nice(0) == 10
- """)
-
- config = py.test2.config._reparse([tmpdir])
- rsession = RSession(config)
- sorter = suptest.events_from_session(rsession)
- testevents = sorter.get(repevent.ItemTestReport)
- passevents = [x for x in testevents if x.passed]
- assert len(passevents) == 1
-
-def test_rsession_no_disthost():
- tmpdir = py.test2.ensuretemp("rsession_no_disthost")
- tmpdir.ensure("conftest.py")
- config = py.test2.config._reparse([str(tmpdir), '-d'])
- py.test2.raises(SystemExit, "config.initsession()")
Modified: py/branch/event/py/test2/testing/test_config.py
==============================================================================
--- py/branch/event/py/test2/testing/test_config.py (original)
+++ py/branch/event/py/test2/testing/test_config.py Sat Aug 9 18:57:15 2008
@@ -194,7 +194,7 @@
def test_sessionname_dist(self):
config = py.test2.config._reparse([self.tmpdir, '--dist'])
- assert config._getsessionname() == 'RSession'
+ assert config._getsessionname() == 'AsyncSession'
def test_session_eventlog(self):
eventlog = self.tmpdir.join("test_session_eventlog")
@@ -213,7 +213,7 @@
for x in 'startserver runbrowser rest'.split():
config = py.test2.config._reparse([self.tmpdir, '--dist', '--%s' % x])
- assert config._getsessionname() == 'RSession'
+ assert config._getsessionname() == 'AsyncSession'
def test_implied_different_sessions(self):
config = py.test2.config._reparse([self.tmpdir, '--looponfailing'])
@@ -221,7 +221,7 @@
config = py.test2.config._reparse([self.tmpdir, '--exec=x'])
assert config._getsessionname() == 'RemoteTerminalSession'
config = py.test2.config._reparse([self.tmpdir, '--dist', '--exec=x'])
- assert config._getsessionname() == 'RSession'
+ assert config._getsessionname() == 'AsyncSession'
def test_sessionname_lookup_custom(self):
self.tmpdir.join("conftest.py").write(py.code.Source("""
@@ -270,10 +270,6 @@
config.initsession()
assert config.option.boxed
- def test_dist_session_no_capturedisable(self):
- config = py.test2.config._reparse([self.tmpdir, '-d', '-s'])
- py.test2.raises(SystemExit, "config.initsession()")
-
def test_getvalue_pathlist(self):
tmpdir = self.tmpdir
somepath = tmpdir.join("x", "y", "z")
@@ -321,6 +317,7 @@
py.test2.raises((ValueError, SystemExit), """
config.initsession()
""")
+ py.test.skip("check on conflict options")
conflict_options = (
'--looponfailing --pdb',
'--dist --pdb',
More information about the pytest-commit
mailing list