Skip to content

Commit 8f128ff

Browse files
committed
Merge pull request influxdata#243 from savoirfairelinux/enh_add_get_free_ports_helper_function
Enh/Fix: add a get_free_ports() "enhanced" helper function.
2 parents 579748d + ade6565 commit 8f128ff

File tree

2 files changed

+31
-19
lines changed

2 files changed

+31
-19
lines changed

influxdb/tests/misc.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,33 @@
1-
1+
# -*- coding: utf-8 -*-
22

33
import socket
4-
import time
54

65

7-
def get_free_port(ip='127.0.0.1'):
8-
sock = socket.socket()
6+
def get_free_ports(num_ports, ip='127.0.0.1'):
7+
"""Get `num_ports` free/available ports on the interface linked to the `ip´
8+
:param int num_ports: The number of free ports to get
9+
:param str ip: The ip on which the ports have to be taken
10+
:return: a set of ports number
11+
"""
12+
sock_ports = []
13+
ports = set()
914
try:
10-
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
11-
sock.bind((ip, 0))
12-
return sock.getsockname()[1]
15+
for _ in range(num_ports):
16+
sock = socket.socket()
17+
cur = [sock, -1]
18+
# append the socket directly,
19+
# so that it'll be also closed (no leaked resource)
20+
# in the finally here after.
21+
sock_ports.append(cur)
22+
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
23+
sock.bind((ip, 0))
24+
cur[1] = sock.getsockname()[1]
1325
finally:
14-
sock.close()
15-
16-
# Is there a better way than a sleep?
17-
# There were issues on Travis where the port was not yet free.
18-
time.sleep(0.1)
26+
for sock, port in sock_ports:
27+
sock.close()
28+
ports.add(port)
29+
assert num_ports == len(ports)
30+
return ports
1931

2032

2133
def is_port_open(port, ip='127.0.0.1'):

influxdb/tests/server_tests/influxdb_instance.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import unittest
1313
import sys
1414

15-
from influxdb.tests.misc import get_free_port, is_port_open
15+
from influxdb.tests.misc import is_port_open, get_free_ports
1616

1717

1818
class InfluxDbInstance(object):
@@ -54,12 +54,12 @@ def _start_server(self, conf_template, udp_enabled):
5454
dir=self.temp_dir_base)
5555

5656
# find a couple free ports :
57-
ports = dict(
58-
http_port=get_free_port(),
59-
admin_port=get_free_port(),
60-
meta_port=get_free_port(),
61-
udp_port=get_free_port() if udp_enabled else -1,
62-
)
57+
free_ports = get_free_ports(4)
58+
ports = {}
59+
for service in 'http', 'admin', 'meta', 'udp':
60+
ports[service + '_port'] = free_ports.pop()
61+
if not udp_enabled:
62+
ports['udp_port'] = -1
6363

6464
conf_data = dict(
6565
meta_dir=os.path.join(tempdir, 'meta'),

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy