> did you run the tests? they fail for me.
With this patch the tests are passing.
Also I found out nice interesting thing. To test those changes I have
to use the same xdist version (e.g installed setup.py develope) for
testing. This is interesting paradox. How do you setup your
development environment properly?
_
jakub
diff -r 14d2f8b74c94 testing/test_txnode.py
--- a/testing/test_txnode.py Wed May 26 18:52:58 2010 +0200
+++ b/testing/test_txnode.py Fri Jun 25 16:28:51 2010 +0000
@@ -42,13 +42,13 @@
eq = EventQueue(self.config.pluginmanager, self.queue)
return eq.geteventargs(eventname, timeout=timeout)
- def makenode(self, config=None):
+ def makenode(self, config=None, xspec="popen"):
if config is None:
testdir = self.request.getfuncargvalue("testdir")
config = testdir.reparseconfig([])
self.config = config
self.queue = Queue()
- self.xspec = execnet.XSpec("popen")
+ self.xspec = execnet.XSpec(xspec)
self.gateway = execnet.makegateway(self.xspec)
self.id += 1
self.gateway.id = str(self.id)
@@ -147,3 +147,24 @@
for outcome in "passed failed skipped".split():
rep = mysetup.geteventargs("pytest_runtest_logreport")['report']
assert getattr(rep, outcome)
+
+ def test_send_one_with_env(self, testdir, mysetup, monkeypatch):
+ monkeypatch.delenv('ENV1', raising=False)
+ monkeypatch.delenv('ENV2', raising=False)
+ monkeypatch.setenv('ENV3', 'var3')
+
+ item = testdir.getitem("""
+ def test_func():
+ import os
+ # ENV1, ENV2 set by xspec; ENV3 inherited from parent process
+ assert os.getenv('ENV2') == 'var2'
+ assert os.getenv('ENV1') == 'var1'
+ assert os.getenv('ENV3') == 'var3'
+ """)
+ node = mysetup.makenode(item.config,
+ xspec="popen//env:ENV1=var1//env:ENV2=var2")
+ node.send(item)
+ kwargs = mysetup.geteventargs("pytest_runtest_logreport")
+ rep = kwargs['report']
+ assert rep.passed
+
diff -r 14d2f8b74c94 xdist/txnode.py
--- a/xdist/txnode.py Wed May 26 18:52:58 2010 +0200
+++ b/xdist/txnode.py Fri Jun 25 16:28:51 2010 +0000
@@ -18,7 +18,10 @@
self.config = config
self.putevent = putevent
self.gateway = gateway
- self.slaveinput = {}
+ self.env = [(env[4:], value)
+ for env, value in self.gateway.spec.__dict__.iteritems()
+ if env.startswith('env:')]
+ self.slaveinput = {'env': self.env}
self.channel = install_slave(self)
self.channel.setcallback(self.callback, endmarker=self.ENDMARK)
self._down = False
@@ -31,7 +34,7 @@
def notify(self, eventname, *args, **kwargs):
assert not args
self.putevent((eventname, args, kwargs))
-
+
def callback(self, eventcall):
""" this gets called for each object we receive from
the other side and if the channel closes.
@@ -102,6 +105,7 @@
config.nodeid = nodeid
config.pluginmanager.do_configure(config)
session = SlaveSession(config, channel, nodeid)
+ os.environ.update(slaveinput['env'])
session.dist_main()
""")
channel.receive()
_______________________________________________
py-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/py-dev