> 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 py-dev@codespeak.net http://codespeak.net/mailman/listinfo/py-dev