Skip to content

Commit ddd769c

Browse files
committed
Add change note; reduce code repetition.
1 parent 56c65fb commit ddd769c

2 files changed

Lines changed: 31 additions & 31 deletions

File tree

docs/changes/1769.bugfix.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix using gevent's BackdoorServer with Unix sockets.

src/gevent/tests/test__backdoor.py

Lines changed: 30 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,14 @@
1-
from __future__ import print_function
2-
from __future__ import absolute_import
3-
41
import os
5-
import stat
62
import tempfile
73

84
import gevent
9-
from gevent import socket
10-
from gevent import backdoor
11-
125
import gevent.testing as greentest
6+
from gevent import backdoor
7+
from gevent import socket
138
from gevent.testing.params import DEFAULT_BIND_ADDR_TUPLE
149
from gevent.testing.params import DEFAULT_CONNECT
1510

11+
1612
def read_until(conn, postfix):
1713
read = b''
1814
assert isinstance(postfix, bytes)
@@ -64,15 +60,25 @@ def tearDown(self):
6460
gevent.sleep() # let spawned greenlets die
6561
super(Test, self).tearDown()
6662

63+
def _server_listen_argument(self):
64+
return DEFAULT_BIND_ADDR_TUPLE
65+
6766
def _make_and_start_server(self, *args, **kwargs):
68-
server = backdoor.BackdoorServer(DEFAULT_BIND_ADDR_TUPLE, *args, **kwargs)
67+
server = backdoor.BackdoorServer(self._server_listen_argument(), *args, **kwargs)
6968
server.start()
7069
return server
7170

71+
def _connection_arguments(self, server):
72+
return ((DEFAULT_CONNECT, server.server_port),)
73+
74+
def _socket_arguments(self):
75+
return ()
76+
7277
def _create_connection(self, server):
73-
conn = SocketWithBanner()
74-
conn.connect((DEFAULT_CONNECT, server.server_port)) # pylint:disable=not-callable
78+
conn = SocketWithBanner(*self._socket_arguments())
79+
7580
try:
81+
conn.connect(*self._connection_arguments(server)) # pylint:disable=not-callable
7682
banner = self._wait_for_prompt(conn)
7783
except:
7884
conn.close()
@@ -143,7 +149,8 @@ def test_builtins(self):
143149
msg="locals() unusable: %s..." % response)
144150

145151
def test_switch_exc(self):
146-
from gevent.queue import Queue, Empty
152+
from gevent.queue import Empty
153+
from gevent.queue import Queue
147154

148155
def bad():
149156
q = Queue()
@@ -167,20 +174,23 @@ def bad():
167174
'switching out, then throwing in\nGot Empty\nswitching out\nswitched in\n>>> ',
168175
response)
169176

170-
177+
@greentest.skipUnless(
178+
hasattr(socket, 'AF_UNIX'),
179+
"Needs AF_UNIX support"
180+
)
171181
class TestUnixSocket(Test):
172182
def setUp(self):
173-
super(TestUnixSocket, self).setUp()
183+
super().setUp()
174184
# Create a temporary file for the Unix socket
175185
self.unix_socket_path = tempfile.mktemp()
176186

177187
def tearDown(self):
178188
# Clean up the Unix socket file
179189
if os.path.exists(self.unix_socket_path):
180190
os.unlink(self.unix_socket_path)
181-
super(TestUnixSocket, self).tearDown()
191+
super().tearDown()
182192

183-
def _make_and_start_server(self, *args, **kwargs):
193+
def _server_listen_argument(self):
184194
# Use the Unix socket for the BackdoorServer
185195
listener = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
186196
try:
@@ -189,24 +199,13 @@ def _make_and_start_server(self, *args, **kwargs):
189199
except Exception as ex:
190200
listener.close()
191201
raise RuntimeError(f"Failed to bind Unix socket at {self.unix_socket_path}: {ex}")
192-
server = backdoor.BackdoorServer(listener, *args, **kwargs)
193-
server.start()
194-
gevent.sleep(0.5)
195-
return server
196-
197-
def _create_connection(self, server):
198-
# Connect to the Unix socket
199-
conn = SocketWithBanner(socket.AF_UNIX, socket.SOCK_STREAM)
200-
conn.connect(self.unix_socket_path)
201-
try:
202-
banner = self._wait_for_prompt(conn)
203-
except:
204-
conn.close()
205-
raise
202+
return listener
206203

207-
conn.banner = banner
208-
return conn
204+
def _connection_arguments(self, server):
205+
return (self.unix_socket_path,)
209206

207+
def _socket_arguments(self):
208+
return (socket.AF_UNIX, socket.SOCK_STREAM)
210209

211210
if __name__ == '__main__':
212211
greentest.main() # pragma: testrunner-no-combine

0 commit comments

Comments
 (0)