55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Python
		
	
	
	
| """
 | |
| cleanup gateways that were instantiated during a test function run. 
 | |
| """
 | |
| import py
 | |
| 
 | |
| pytest_plugins = "xfail"
 | |
| 
 | |
| def pytest_configure(config):
 | |
|     config.pluginmanager.register(Execnetcleanup())
 | |
| 
 | |
| class Execnetcleanup:
 | |
|     _gateways = None
 | |
|     def __init__(self, debug=False):
 | |
|         self._debug = debug 
 | |
| 
 | |
|     def pyexecnet_gateway_init(self, gateway):
 | |
|         if self._gateways is not None:
 | |
|             self._gateways.append(gateway)
 | |
|         
 | |
|     def pyexecnet_gateway_exit(self, gateway):
 | |
|         if self._gateways is not None:
 | |
|             self._gateways.remove(gateway)
 | |
| 
 | |
|     def pytest_sessionstart(self, session):
 | |
|         self._gateways = []
 | |
| 
 | |
|     def pytest_sessionfinish(self, session, exitstatus, excrepr=None):
 | |
|         l = []
 | |
|         for gw in self._gateways:
 | |
|             gw.exit()
 | |
|             l.append(gw)
 | |
|         #for gw in l:
 | |
|         #    gw.join()
 | |
|         
 | |
|     def pytest_pyfunc_call(self, __call__, pyfuncitem):
 | |
|         if self._gateways is not None:
 | |
|             gateways = self._gateways[:]
 | |
|             res = __call__.execute(firstresult=True)
 | |
|             while len(self._gateways) > len(gateways):
 | |
|                 self._gateways[-1].exit()
 | |
|             return res
 | |
|   
 | |
| def test_execnetplugin(testdir):
 | |
|     reprec = testdir.inline_runsource("""
 | |
|         import py
 | |
|         import sys
 | |
|         def test_hello():
 | |
|             sys._gw = py.execnet.PopenGateway()
 | |
|         def test_world():
 | |
|             assert hasattr(sys, '_gw')
 | |
|             py.test.raises(KeyError, "sys._gw.exit()") # already closed 
 | |
|             
 | |
|     """, "-s", "--debug")
 | |
|     reprec.assertoutcome(passed=2)
 |