@@ -106,16 +106,12 @@ class SocketCANTest(unittest.TestCase):
106106
107107 def setUp (self ):
108108 self .s = socket .socket (socket .PF_CAN , socket .SOCK_RAW , socket .CAN_RAW )
109+ self .addCleanup (self .s .close )
109110 try :
110111 self .s .bind ((self .interface ,))
111112 except socket .error :
112113 self .skipTest ('network interface `%s` does not exist' %
113114 self .interface )
114- self .s .close ()
115-
116- def tearDown (self ):
117- self .s .close ()
118- self .s = None
119115
120116class ThreadableTest :
121117 """Threadable Test class
@@ -174,6 +170,7 @@ def _setUp(self):
174170 self .client_ready = threading .Event ()
175171 self .done = threading .Event ()
176172 self .queue = queue .Queue (1 )
173+ self .server_crashed = False
177174
178175 # Do some munging to start the client test.
179176 methodname = self .id ()
@@ -183,8 +180,12 @@ def _setUp(self):
183180 self .client_thread = thread .start_new_thread (
184181 self .clientRun , (test_method ,))
185182
186- self .__setUp ()
187- if not self .server_ready .is_set ():
183+ try :
184+ self .__setUp ()
185+ except :
186+ self .server_crashed = True
187+ raise
188+ finally :
188189 self .server_ready .set ()
189190 self .client_ready .wait ()
190191
@@ -200,6 +201,9 @@ def clientRun(self, test_func):
200201 self .server_ready .wait ()
201202 self .clientSetUp ()
202203 self .client_ready .set ()
204+ if self .server_crashed :
205+ self .clientTearDown ()
206+ return
203207 if not hasattr (test_func , '__call__' ):
204208 raise TypeError ("test_func must be a callable function" )
205209 try :
@@ -258,9 +262,9 @@ def clientSetUp(self):
258262 try :
259263 self .cli .bind ((self .interface ,))
260264 except socket .error :
261- self . skipTest ( 'network interface `%s` does not exist' %
262- self . interface )
263- self . cli . close ()
265+ # skipTest should not be called here, and will be called in the
266+ # server instead
267+ pass
264268
265269 def clientTearDown (self ):
266270 self .cli .close ()
0 commit comments