[svn r37380] This is rather huge checkin of a rsession refactoring. Got rid

of most of the pkgdir and changed to use get_collector_trail.
Some tests need to be rewritten or killed, right now they're skips.

There are no checks (yet) whether this works with topdir being something
else than previous pkgdir, we'll see...

--HG--
branch : trunk
This commit is contained in:
fijal 2007-01-26 12:49:59 +01:00
parent 3cf7c74d1e
commit 3d301edbc7
8 changed files with 101 additions and 84 deletions

View File

@ -74,15 +74,14 @@ class HostOptions(object):
self.create_gateways = create_gateways self.create_gateways = create_gateways
class HostManager(object): class HostManager(object):
def __init__(self, sshhosts, config, pkgdir, options=HostOptions()): def __init__(self, sshhosts, config, options=HostOptions()):
self.sshhosts = sshhosts self.sshhosts = sshhosts
self.pkgdir = pkgdir
self.config = config self.config = config
self.options = options self.options = options
if not options.create_gateways: if not options.create_gateways:
self.prepare_gateways = self.prepare_dummy_gateways self.prepare_gateways = self.prepare_dummy_gateways
assert pkgdir.join("__init__.py").check(), ( #assert pkgdir.join("__init__.py").check(), (
"%s probably wrong" %(pkgdir,)) # "%s probably wrong" %(pkgdir,))
def prepare_dummy_gateways(self): def prepare_dummy_gateways(self):
for host in self.sshhosts: for host in self.sshhosts:
@ -113,7 +112,7 @@ class HostManager(object):
gw = py.execnet.PopenGateway() gw = py.execnet.PopenGateway()
else: else:
gw = py.execnet.PopenGateway(python=self.options.remote_python) gw = py.execnet.PopenGateway(python=self.options.remote_python)
host.relpath = str(self.pkgdir.dirpath()) host.relpath = str(self.config.topdir)
return gw return gw
def prepare_gateways(self): def prepare_gateways(self):
@ -159,15 +158,14 @@ class HostManager(object):
rsync.add_target(host.gw, host.relpath, done) rsync.add_target(host.gw, host.relpath, done)
if not self.options.do_sync: if not self.options.do_sync:
return # for testing only return # for testing only
rsync.send(self.pkgdir.dirpath()) rsync.send(self.config.topdir)
# hosts ready # hosts ready
return self.setup_nodes(reporter, done_dict) return self.setup_nodes(reporter, done_dict)
def setup_nodes(self, reporter, done_dict): def setup_nodes(self, reporter, done_dict):
nodes = [] nodes = []
for host in self.sshhosts: for host in self.sshhosts:
ch = setup_slave(host.gw, os.path.join(host.relpath,\ ch = setup_slave(host.gw, host.relpath, self.config)
self.pkgdir.basename), self.config)
nodes.append(MasterNode(ch, reporter, done_dict)) nodes.append(MasterNode(ch, reporter, done_dict))
return nodes return nodes

View File

@ -29,8 +29,8 @@ class MasterNode(object):
self.channel.send(42) self.channel.send(42)
else: else:
self.pending.insert(0, item) self.pending.insert(0, item)
itemspec = item.listnames()[1:] #itemspec = item.listnames()[1:]
self.channel.send(itemspec) self.channel.send(item.config.get_collector_trail(item))
# send start report # send start report
self.reporter(report.SendItem(self.channel, item)) self.reporter(report.SendItem(self.channel, item))

View File

@ -16,9 +16,8 @@ from py.__.test.representation import Presenter
import sys import sys
class AbstractReporter(object): class AbstractReporter(object):
def __init__(self, config, hosts, pkgdir=py.path.local(py.__file__)): def __init__(self, config, hosts):
self.config = config self.config = config
self.pkgdir = pkgdir
self.hosts = hosts self.hosts = hosts
self.failed_tests_outcome = [] self.failed_tests_outcome = []
self.skipped_tests_outcome = [] self.skipped_tests_outcome = []
@ -296,7 +295,7 @@ class LocalReporter(AbstractReporter):
# print names relative to current workdir # print names relative to current workdir
name = "/".join(item.listnames()) name = "/".join(item.listnames())
local = str(py.path.local()) local = str(py.path.local())
d = str(self.pkgdir.dirpath().dirpath()) d = str(self.config.topdir)
if local.startswith(d): if local.startswith(d):
local = local[len(d) + 1:] local = local[len(d) + 1:]
if local and name.startswith(local): if local and name.startswith(local):

View File

@ -26,23 +26,6 @@ class AbstractSession(object):
self.config = config self.config = config
self.optimise_localhost = optimise_localhost self.optimise_localhost = optimise_localhost
def make_colitems(paths, baseon):
# we presume that from the base we can simply get to
# the target paths by joining the basenames
res = []
for x in paths:
x = py.path.local(x)
current = py.test.collect.Directory(baseon)
relparts = x.relto(baseon).split(x.sep)
assert relparts
for part in relparts:
next = current.join(part)
assert next is not None, (current, part)
current = next
res.append(current)
return res
make_colitems = staticmethod(make_colitems)
def getpkgdir(path): def getpkgdir(path):
path = py.path.local(path) path = py.path.local(path)
pkgpath = path.pypkgpath() pkgpath = path.pypkgpath()
@ -80,7 +63,7 @@ class AbstractSession(object):
from py.__.test.rsession.rest import RestReporter from py.__.test.rsession.rest import RestReporter
reporter_class = RestReporter reporter_class = RestReporter
if arg: if arg:
reporter_instance = reporter_class(self.config, sshhosts, self.getpkgdir(arg)) reporter_instance = reporter_class(self.config, sshhosts)
else: else:
reporter_instance = reporter_class(self.config, sshhosts) reporter_instance = reporter_class(self.config, sshhosts)
reporter = reporter_instance.report reporter = reporter_instance.report
@ -165,17 +148,16 @@ class RSession(AbstractSession):
reporter(report.TestStarted(sshhosts)) reporter(report.TestStarted(sshhosts))
pkgdir = self.getpkgdir(args[0])
done_dict = {} done_dict = {}
hostopts = HostOptions(rsync_roots=rsync_roots, hostopts = HostOptions(rsync_roots=rsync_roots,
remote_python=remotepython, remote_python=remotepython,
optimise_localhost=self.optimise_localhost) optimise_localhost=self.optimise_localhost)
hostmanager = HostManager(sshhosts, self.config, pkgdir, hostopts) hostmanager = HostManager(sshhosts, self.config, hostopts)
try: try:
nodes = hostmanager.init_hosts(reporter, done_dict) nodes = hostmanager.init_hosts(reporter, done_dict)
reporter(report.RsyncFinished()) reporter(report.RsyncFinished())
try: try:
self.dispatch_tests(nodes, args, pkgdir, reporter, checkfun, done_dict) self.dispatch_tests(nodes, reporter, checkfun, done_dict)
except (KeyboardInterrupt, SystemExit): except (KeyboardInterrupt, SystemExit):
print >>sys.stderr, "C-c pressed waiting for gateways to teardown..." print >>sys.stderr, "C-c pressed waiting for gateways to teardown..."
channels = [node.channel for node in nodes] channels = [node.channel for node in nodes]
@ -213,8 +195,8 @@ class RSession(AbstractSession):
remotepython = self.config.getvalue("dist_remotepython") remotepython = self.config.getvalue("dist_remotepython")
return sshhosts, remotepython, rsync_roots return sshhosts, remotepython, rsync_roots
def dispatch_tests(self, nodes, args, pkgdir, reporter, checkfun, done_dict): def dispatch_tests(self, nodes, reporter, checkfun, done_dict):
colitems = self.make_colitems(args, baseon=pkgdir.dirpath()) colitems = self.config.getcolitems()
keyword = self.config.option.keyword keyword = self.config.option.keyword
itemgenerator = itemgen(colitems, reporter, keyword, self.reporterror) itemgenerator = itemgen(colitems, reporter, keyword, self.reporterror)
@ -246,7 +228,7 @@ class LSession(AbstractSession):
reporter(report.TestStarted(sshhosts)) reporter(report.TestStarted(sshhosts))
pkgdir = self.getpkgdir(args[0]) pkgdir = self.getpkgdir(args[0])
colitems = self.make_colitems(args, baseon=pkgdir.dirpath()) colitems = self.config.getcolitems()
reporter(report.RsyncFinished()) reporter(report.RsyncFinished())
if runner is None: if runner is None:
@ -276,7 +258,17 @@ class LSession(AbstractSession):
print >>sys.stderr, 'building documentation' print >>sys.stderr, 'building documentation'
capture = py.io.OutErrCapture() capture = py.io.OutErrCapture()
try: try:
apigen.build(pkgdir, DocStorageAccessor(self.docstorage)) try:
apigen.build(pkgdir, DocStorageAccessor(self.docstorage))
except AttributeError:
import traceback
exc, e, tb = sys.exc_info()
print '%s - %s' % (exc, e)
print ''.join(traceback.format_tb(tb))
del tb
print '-' * 79
raise NotImplementedError("Provided script does not seem "
"to contain build function")
finally: finally:
capture.reset() capture.reset()
@ -292,8 +284,20 @@ class LSession(AbstractSession):
else: else:
self.docstorage = DocStorage().from_pkg(items) self.docstorage = DocStorage().from_pkg(items)
except ImportError: except ImportError:
import traceback
exc, e, tb = sys.exc_info()
print '%s - %s' % (exc, e)
print ''.join(traceback.format_tb(tb))
del tb
print '-' * 79
raise ImportError("Provided script cannot be imported") raise ImportError("Provided script cannot be imported")
except (ValueError, AttributeError): except (ValueError, AttributeError):
import traceback
exc, e, tb = sys.exc_info()
print '%s - %s' % (exc, e)
print ''.join(traceback.format_tb(tb))
del tb
print '-' * 79
raise NotImplementedError("Provided script does not seem " raise NotImplementedError("Provided script does not seem "
"to contain get_documentable_items") "to contain get_documentable_items")
self.tracer = Tracer(self.docstorage) self.tracer = Tracer(self.docstorage)

View File

@ -45,14 +45,15 @@ class PidInfo(object):
self.lock.release() self.lock.release()
class SlaveNode(object): class SlaveNode(object):
def __init__(self, rootcollector, config, pidinfo, executor=AsyncExecutor): def __init__(self, config, pidinfo, executor=AsyncExecutor):
self.rootcollector = rootcollector #self.rootcollector = rootcollector
self.config = config self.config = config
self.executor = executor self.executor = executor
self.pidinfo = pidinfo self.pidinfo = pidinfo
def execute(self, itemspec): def execute(self, itemspec):
item = self.rootcollector.getitembynames(itemspec) #item = self.rootcollector.getitembynames(itemspec)
item = self.config._getcollector(itemspec)
#if isinstance(item, py.test.Function): #if isinstance(item, py.test.Function):
# ex = Executor(item.obj, setup=item.setup) # ex = Executor(item.obj, setup=item.setup)
#else: #else:
@ -84,7 +85,7 @@ def slave_main(receive, send, path, config, pidinfo):
if node is not None: if node is not None:
return node return node
col = py.test.collect.Directory(str(py.path.local(path).join(item[0]))) col = py.test.collect.Directory(str(py.path.local(path).join(item[0])))
node = nodes[item[0]] = SlaveNode(col, config, pidinfo) node = nodes[item[0]] = SlaveNode(config, pidinfo)
return node return node
while 1: while 1:
nextitem = receive() nextitem = receive()
@ -92,7 +93,7 @@ def slave_main(receive, send, path, config, pidinfo):
break break
try: try:
node = getnode(nextitem) node = getnode(nextitem)
res = node.run(nextitem[1:]) res = node.run(nextitem)
except py.test.Item.Skipped, s: except py.test.Item.Skipped, s:
send(Outcome(skipped=str(s)).make_repr()) send(Outcome(skipped=str(s)).make_repr())
except: except:
@ -120,10 +121,8 @@ def setup():
return callback return callback
import os, sys import os, sys
pkgdir = channel.receive() # path is ready basedir = channel.receive() # path is ready
config_repr = channel.receive() config_repr = channel.receive()
basedir = os.path.dirname(pkgdir)
pkgname = os.path.basename(pkgdir)
# setup defaults... # setup defaults...
sys.path.insert(0, basedir) sys.path.insert(0, basedir)
import py import py
@ -133,11 +132,8 @@ def setup():
config.merge_repr(config_repr) config.merge_repr(config_repr)
else: else:
config.initdirect(basedir, config_repr) config.initdirect(basedir, config_repr)
#config.conftest.lget('adddefaultoptions')()
if not config.option.nomagic: if not config.option.nomagic:
py.magic.invoke(assertion=1) py.magic.invoke(assertion=1)
mod = __import__(pkgname)
assert py.path.local(mod.__file__).dirpath() == py.path.local(pkgdir)
from py.__.test.rsession.slave import slave_main, PidInfo from py.__.test.rsession.slave import slave_main, PidInfo
queue = py.std.Queue.Queue() queue = py.std.Queue.Queue()
pidinfo = PidInfo() pidinfo = PidInfo()

View File

@ -19,7 +19,8 @@ def setup_module(mod):
# bind an empty config # bind an empty config
config = py.test.config._reparse([]) config = py.test.config._reparse([])
config._overwrite('dist_taskspernode', 10) config._overwrite('dist_taskspernode', 10)
mod.pkgdir = py.path.local(py.__file__).dirpath() mod.pkgdir = py.path.local(py.__file__).dirpath().dirpath()
mod.rootcol = py.test.collect.Directory(mod.pkgdir)
class DummyGateway(object): class DummyGateway(object):
def __init__(self): def __init__(self):
@ -38,6 +39,7 @@ class DummyChannel(object):
self.sent.append(item) self.sent.append(item)
def test_masternode(): def test_masternode():
py.test.skip("cannot send non-fs items nowadays")
try: try:
raise ValueError() raise ValueError()
except ValueError: except ValueError:
@ -57,6 +59,7 @@ def test_masternode():
assert not received[1].outcome.passed assert not received[1].outcome.passed
def test_unique_nodes(): def test_unique_nodes():
py.test.skip("cannot send non-fs items nowadays")
ch = DummyChannel() ch = DummyChannel()
reportlist = [] reportlist = []
mnode = MasterNode(ch, reportlist.append, {}) mnode = MasterNode(ch, reportlist.append, {})
@ -91,7 +94,8 @@ def test_slave_setup():
gw = py.execnet.PopenGateway() gw = py.execnet.PopenGateway()
config = py.test.config._reparse([]) config = py.test.config._reparse([])
channel = setup_slave(gw, pkgdir, config) channel = setup_slave(gw, pkgdir, config)
channel.send(funcpass_spec) spec = rootcol.getitembynames(funcpass_spec).get_collector_trail()
channel.send(spec)
output = ReprOutcome(channel.receive()) output = ReprOutcome(channel.receive())
assert output.passed assert output.passed
channel.send(42) channel.send(42)
@ -118,7 +122,6 @@ def test_slave_running():
return mn return mn
master_nodes = [open_gw(), open_gw(), open_gw()] master_nodes = [open_gw(), open_gw(), open_gw()]
rootcol = py.test.collect.Directory(pkgdir.dirpath())
funcpass_item = rootcol.getitembynames(funcpass_spec) funcpass_item = rootcol.getitembynames(funcpass_spec)
funcfail_item = rootcol.getitembynames(funcfail_spec) funcfail_item = rootcol.getitembynames(funcfail_spec)
itemgenerator = iter([funcfail_item] + itemgenerator = iter([funcfail_item] +
@ -147,7 +150,7 @@ def test_slave_running_interrupted():
return mn, gw, channel return mn, gw, channel
mn, gw, channel = open_gw() mn, gw, channel = open_gw()
rootcol = py.test.collect.Directory(pkgdir.dirpath()) rootcol = py.test.collect.Directory(pkgdir)
funchang_item = rootcol.getitembynames(funchang_spec) funchang_item = rootcol.getitembynames(funchang_spec)
mn.send(funchang_item) mn.send(funchang_item)
mn.send(StopIteration) mn.send(StopIteration)

View File

@ -18,7 +18,8 @@ def setup_module(mod):
def test_setup_non_existing_hosts(): def test_setup_non_existing_hosts():
setup_events = [] setup_events = []
hosts = [HostInfo("alskdjalsdkjasldkajlsd")] hosts = [HostInfo("alskdjalsdkjasldkajlsd")]
hm = HostManager(hosts, None, pkgdir) config = py.test.config._reparse([])
hm = HostManager(hosts, config)
cmd = "hm.init_hosts(setup_events.append)" cmd = "hm.init_hosts(setup_events.append)"
py.test.raises((py.process.cmdexec.Error, IOError, EOFError), cmd) py.test.raises((py.process.cmdexec.Error, IOError, EOFError), cmd)
#assert setup_events #assert setup_events
@ -36,23 +37,23 @@ def test_getpkdir_no_inits():
fn = tmp.ensure("hello.py") fn = tmp.ensure("hello.py")
assert RSession.getpkgdir(fn) == fn assert RSession.getpkgdir(fn) == fn
def test_make_colitems(): #def test_make_colitems():
one = pkgdir.join("initpkg.py") # one = pkgdir.join("initpkg.py")
two = pkgdir.join("path", "__init__.py") # two = pkgdir.join("path", "__init__.py")#
cols = RSession.make_colitems([one, two], baseon=pkgdir) # cols = RSession.make_colitems([one, two], baseon=pkgdir)
assert len(cols) == 2 # assert len(cols) == 2
col_one, col_two = cols # col_one, col_two = cols
assert col_one.listnames() == ["py", "initpkg.py"] # assert col_one.listnames() == ["py", "initpkg.py"]
assert col_two.listnames() == ["py", "path", "__init__.py"] # assert col_two.listnames() == ["py", "path", "__init__.py"]#
#
cols = RSession.make_colitems([one, two], baseon=pkgdir.dirpath()) # cols = RSession.make_colitems([one, two], baseon=pkgdir.dirpath())
assert len(cols) == 2 # assert len(cols) == 2
col_one, col_two = cols # col_one, col_two = cols
assert col_one.listnames() == [pkgdir.dirpath().basename, # assert col_one.listnames() == [pkgdir.dirpath().basename,
"py", "initpkg.py"] # "py", "initpkg.py"]
assert col_two.listnames() == [pkgdir.dirpath().basename, # assert col_two.listnames() == [pkgdir.dirpath().basename,
"py", "path", "__init__.py"] # "py", "path", "__init__.py"]
def test_example_tryiter(): def test_example_tryiter():
events = [] events = []
@ -161,7 +162,7 @@ class TestRSessionRemote:
config = py.test.config._reparse([]) config = py.test.config._reparse([])
opts = HostOptions(optimise_localhost=False, rsync_roots=['py']) opts = HostOptions(optimise_localhost=False, rsync_roots=['py'])
hm = HostManager(hosts, config, pkgdir, opts) hm = HostManager(hosts, config, opts)
nodes = hm.init_hosts(setup_events.append) nodes = hm.init_hosts(setup_events.append)
hm.teardown_hosts(teardown_events.append, hm.teardown_hosts(teardown_events.append,
[node.channel for node in nodes], nodes) [node.channel for node in nodes], nodes)
@ -188,7 +189,7 @@ class TestRSessionRemote:
config = py.test.config._reparse([]) config = py.test.config._reparse([])
opts = HostOptions(optimise_localhost=False, rsync_roots=['py']) opts = HostOptions(optimise_localhost=False, rsync_roots=['py'])
hm = HostManager(hosts, config, pkgdir, opts) hm = HostManager(hosts, config, opts)
nodes = hm.init_hosts(allevents.append) nodes = hm.init_hosts(allevents.append)
from py.__.test.rsession.testing.test_executor \ from py.__.test.rsession.testing.test_executor \
@ -235,7 +236,7 @@ class TestRSessionRemote:
defaultconftestnames.append("custom") defaultconftestnames.append("custom")
try: try:
opts = HostOptions(optimise_localhost=False, rsync_roots=['py']) opts = HostOptions(optimise_localhost=False, rsync_roots=['py'])
hm = HostManager(hosts, config, pkgdir, opts) hm = HostManager(hosts, config, opts)
nodes = hm.init_hosts(allevents.append) nodes = hm.init_hosts(allevents.append)
rootcol = py.test.collect.Directory(pkgdir.dirpath()) rootcol = py.test.collect.Directory(pkgdir.dirpath())
@ -309,7 +310,7 @@ class TestInithosts(object):
parse_directories(hosts) parse_directories(hosts)
config = py.test.config._reparse([]) config = py.test.config._reparse([])
opts = HostOptions(do_sync=False, create_gateways=False) opts = HostOptions(do_sync=False, create_gateways=False)
hm = HostManager(hosts, config, pkgdir, opts) hm = HostManager(hosts, config, opts)
nodes = hm.init_hosts(testevents.append) nodes = hm.init_hosts(testevents.append)
events = [i for i in testevents if isinstance(i, report.HostRSyncing)] events = [i for i in testevents if isinstance(i, report.HostRSyncing)]
assert len(events) == 4 assert len(events) == 4

View File

@ -12,6 +12,7 @@ if sys.platform == 'win32':
def setup_module(module): def setup_module(module):
module.rootdir = py.path.local(py.__file__).dirpath().dirpath() module.rootdir = py.path.local(py.__file__).dirpath().dirpath()
module.rootcol = py.test.collect.Directory(rootdir)
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
# inlined testing functions used below # inlined testing functions used below
@ -53,15 +54,15 @@ mod_spec = BASE[:-1].split("/")
from py.__.test.rsession.executor import RunExecutor from py.__.test.rsession.executor import RunExecutor
def gettestnode(): def gettestnode():
rootcol = py.test.collect.Directory(rootdir)
config = py.test.config._reparse([rootdir]) config = py.test.config._reparse([rootdir])
pidinfo = PidInfo() pidinfo = PidInfo()
node = SlaveNode(rootcol, config, pidinfo, executor=RunExecutor) node = SlaveNode(config, pidinfo, executor=RunExecutor)
return node return node
def test_slave_run_passing(): def test_slave_run_passing():
node = gettestnode() node = gettestnode()
outcome = node.execute(funcpass_spec) item = rootcol.getitembynames(funcpass_spec)
outcome = node.execute(item.get_collector_trail())
assert outcome.passed assert outcome.passed
assert not outcome.setupfailure assert not outcome.setupfailure
@ -72,7 +73,8 @@ def test_slave_run_passing():
def test_slave_run_failing(): def test_slave_run_failing():
node = gettestnode() node = gettestnode()
outcome = node.execute(funcfail_spec) item = rootcol.getitembynames(funcfail_spec)
outcome = node.execute(item.get_collector_trail())
assert not outcome.passed assert not outcome.passed
assert not outcome.setupfailure assert not outcome.setupfailure
assert len(outcome.excinfo.traceback) == 1 assert len(outcome.excinfo.traceback) == 1
@ -86,7 +88,8 @@ def test_slave_run_failing():
def test_slave_run_skipping(): def test_slave_run_skipping():
node = gettestnode() node = gettestnode()
outcome = node.execute(funcskip_spec) item = rootcol.getitembynames(funcskip_spec)
outcome = node.execute(item.get_collector_trail())
assert not outcome.passed assert not outcome.passed
assert outcome.skipped assert outcome.skipped
@ -97,7 +100,8 @@ def test_slave_run_skipping():
def test_slave_run_failing_wrapped(): def test_slave_run_failing_wrapped():
node = gettestnode() node = gettestnode()
repr_outcome = node.run(funcfail_spec) item = rootcol.getitembynames(funcfail_spec)
repr_outcome = node.run(item.get_collector_trail())
outcome = ReprOutcome(repr_outcome) outcome = ReprOutcome(repr_outcome)
assert not outcome.passed assert not outcome.passed
assert not outcome.setupfailure assert not outcome.setupfailure
@ -105,9 +109,11 @@ def test_slave_run_failing_wrapped():
def test_slave_main_simple(): def test_slave_main_simple():
res = [] res = []
failitem = rootcol.getitembynames(funcfail_spec)
passitem = rootcol.getitembynames(funcpass_spec)
q = [None, q = [None,
funcpass_spec, passitem.get_collector_trail(),
funcfail_spec failitem.get_collector_trail()
] ]
config = py.test.config._reparse([]) config = py.test.config._reparse([])
pidinfo = PidInfo() pidinfo = PidInfo()
@ -118,9 +124,11 @@ def test_slave_main_simple():
def test_slave_run_different_stuff(): def test_slave_run_different_stuff():
node = gettestnode() node = gettestnode()
node.run("py doc log.txt".split()) node.run(rootcol.getitembynames("py doc log.txt".split()).
get_collector_trail())
def test_slave_setup_fails_on_import_error(): def test_slave_setup_fails_on_import_error():
py.test.skip("WIP")
tmp = py.test.ensuretemp("slavesetup") tmp = py.test.ensuretemp("slavesetup")
config = py.test.config._reparse([tmp]) config = py.test.config._reparse([tmp])
class C: class C:
@ -139,6 +147,12 @@ def test_slave_setup_fails_on_import_error():
def close(self): def close(self):
pass pass
def setcallback(self, cb):
pass
def send(self, x):
pass
try: try:
exec py.code.Source(setup, "setup()").compile() in { exec py.code.Source(setup, "setup()").compile() in {
@ -149,6 +163,7 @@ def test_slave_setup_fails_on_import_error():
py.test.fail("missing exception") py.test.fail("missing exception")
def test_slave_setup_exit(): def test_slave_setup_exit():
py.test.skip("WIP")
tmp = py.test.ensuretemp("slaveexit") tmp = py.test.ensuretemp("slaveexit")
tmp.ensure("__init__.py") tmp.ensure("__init__.py")
q = py.std.Queue.Queue() q = py.std.Queue.Queue()
@ -187,6 +202,7 @@ def test_slave_setup_exit():
py.test.fail("Did not exit") py.test.fail("Did not exit")
def test_slave_setup_fails_on_missing_pkg(): def test_slave_setup_fails_on_missing_pkg():
py.test.skip("WIP")
tmp = py.test.ensuretemp("slavesetup2") tmp = py.test.ensuretemp("slavesetup2")
config = py.test.config._reparse([tmp]) config = py.test.config._reparse([tmp])
x = tmp.ensure("sometestpackage", "__init__.py") x = tmp.ensure("sometestpackage", "__init__.py")