Skip to content

Commit df7e54f

Browse files
committed
Move query_available_service function outside
1 parent 3e05eb0 commit df7e54f

File tree

1 file changed

+31
-33
lines changed

1 file changed

+31
-33
lines changed

Lib/test/test_socket.py

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,36 @@ def _have_socket_hyperv():
201201
s.close()
202202
return True
203203

204+
def _query_available_service(expected_protocols, services_file = '/etc/services'):
205+
if not os.path.exists(services_file):
206+
return None
207+
services_found = dict()
208+
with open(services_file, 'r') as f:
209+
for line in f:
210+
line = line.strip()
211+
if line.startswith('#'):
212+
# Skip comment line.
213+
continue
214+
tokens = line.split()
215+
if len(tokens) < 2:
216+
continue
217+
if '/' not in tokens[1]:
218+
continue
219+
try:
220+
_, entry_protocol = tokens[1].split('/')
221+
except:
222+
continue
223+
entry_name = tokens[0]
224+
if entry_name not in services_found:
225+
services_found[entry_name] = [entry_protocol]
226+
else:
227+
services_found[entry_name].append(entry_protocol)
228+
for protocol in expected_protocols:
229+
if protocol not in services_found[entry_name]:
230+
break
231+
else:
232+
return entry_name
233+
return None
204234

205235
@contextlib.contextmanager
206236
def socket_setdefaulttimeout(timeout):
@@ -1259,38 +1289,6 @@ def testGetServBy(self):
12591289
# Find one service that exists, then check all the related interfaces.
12601290
# I've ordered this by protocols that have both a tcp and udp
12611291
# protocol, at least for modern Linuxes.
1262-
def query_available_service(*protocols):
1263-
services_file = '/etc/services'
1264-
if not os.path.exists(services_file):
1265-
return None
1266-
services_found = dict()
1267-
with open(services_file, 'r') as f:
1268-
for line in f:
1269-
line = line.strip()
1270-
if line.startswith('#'):
1271-
# Skip comment line.
1272-
continue
1273-
tokens = line.split()
1274-
if len(tokens) < 2:
1275-
continue
1276-
if '/' not in tokens[1]:
1277-
continue
1278-
try:
1279-
_, entry_protocol = tokens[1].split('/')
1280-
except:
1281-
continue
1282-
entry_name = tokens[0]
1283-
if entry_name not in services_found:
1284-
services_found[entry_name] = [entry_protocol]
1285-
else:
1286-
services_found[entry_name].append(entry_protocol)
1287-
for protocol in protocols:
1288-
if protocol not in services_found[entry_name]:
1289-
break
1290-
else:
1291-
return entry_name
1292-
return None
1293-
12941292
if (
12951293
sys.platform.startswith(
12961294
('linux', 'android', 'freebsd', 'netbsd', 'gnukfreebsd'))
@@ -1308,7 +1306,7 @@ def query_available_service(*protocols):
13081306
except OSError:
13091307
pass
13101308
else:
1311-
service = query_available_service('tcp')
1309+
service = _query_available_service(('tcp'))
13121310
if service is None:
13131311
self.skipTest('No available service found.')
13141312
port = socket.getservbyname(service, 'tcp')

0 commit comments

Comments
 (0)