> 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

Reply via email to