Skip to content

Commit eb5c976

Browse files
test: UNIX socket connect
Add test for `tarantool.connect` with UNIX socket. Add TarantoolServer option to start a Tarantool instance which listens to UNIX socket.
1 parent 0936426 commit eb5c976

File tree

2 files changed

+57
-6
lines changed

2 files changed

+57
-6
lines changed

test/suites/lib/tarantool_server.py

+39-6
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,26 @@ def find_port(port=None):
3636
port += 1
3737
return find_port(3300)
3838

39+
def check_socket(bind_addr):
40+
if os.path.exists(bind_addr):
41+
return False
42+
43+
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
44+
sock.bind(bind_addr)
45+
sock.close()
46+
47+
return True
48+
49+
def find_socket(bind_num=None):
50+
if bind_num is None:
51+
bind_num = random.randrange(0, 99)
52+
while bind_num < 99:
53+
bind_addr = f'/tmp/tarantool_{bind_num}.sock'
54+
if check_socket(bind_addr):
55+
return bind_addr
56+
bind_num += 1
57+
return find_socket(0)
58+
3959

4060
class RunnerException(object):
4161
pass
@@ -122,7 +142,8 @@ def __new__(cls,
122142
ssl_key_file=None,
123143
ssl_cert_file=None,
124144
ssl_ca_file=None,
125-
ssl_ciphers=None):
145+
ssl_ciphers=None,
146+
create_unix_socket=False):
126147
if os.name == 'nt':
127148
from .remote_tarantool_server import RemoteTarantoolServer
128149
return RemoteTarantoolServer()
@@ -133,12 +154,21 @@ def __init__(self,
133154
ssl_key_file=None,
134155
ssl_cert_file=None,
135156
ssl_ca_file=None,
136-
ssl_ciphers=None):
157+
ssl_ciphers=None,
158+
create_unix_socket=False):
137159
os.popen('ulimit -c unlimited')
138-
self.host = 'localhost'
139-
self.args = {}
140-
self.args['primary'] = find_port()
141-
self.args['admin'] = find_port(self.args['primary'] + 1)
160+
161+
if create_unix_socket:
162+
self.host = None
163+
self.args = {}
164+
self.args['primary'] = find_socket()
165+
self.args['admin'] = find_port()
166+
else:
167+
self.host = 'localhost'
168+
self.args = {}
169+
self.args['primary'] = find_port()
170+
self.args['admin'] = find_port(self.args['primary'] + 1)
171+
142172
self._admin = self.args['admin']
143173
self.vardir = tempfile.mkdtemp(prefix='var_', dir=os.getcwd())
144174
self.find_exe()
@@ -244,6 +274,9 @@ def clean(self):
244274
if os.path.isdir(self.vardir):
245275
shutil.rmtree(self.vardir)
246276

277+
if os.path.exists(self.args['primary']):
278+
os.remove(self.args['primary'])
279+
247280
def __del__(self):
248281
self.stop()
249282
self.clean()

test/suites/test_dml.py

+18
Original file line numberDiff line numberDiff line change
@@ -298,8 +298,26 @@ def test_12_update_fields(self):
298298
[[2, 'help', 7]]
299299
)
300300

301+
def test_13_unix_socket_connect(self):
302+
if sys.platform.startswith("win"):
303+
self.skipTest("Skip UNIX socket tests on Windows since it uses remote server")
304+
305+
self.sock_srv = TarantoolServer(create_unix_socket=True)
306+
self.sock_srv.script = 'test/suites/box.lua'
307+
self.sock_srv.start()
308+
309+
self.sock_con = tarantool.connect(self.sock_srv.host, self.sock_srv.args['primary'])
310+
self.assertEqual(self.sock_con.ping(notime=True), "Success")
311+
301312
@classmethod
302313
def tearDownClass(self):
303314
self.con.close()
304315
self.srv.stop()
305316
self.srv.clean()
317+
318+
if hasattr(self, 'sock_srv'):
319+
self.sock_srv.stop()
320+
self.sock_srv.clean()
321+
322+
if hasattr(self, 'sock_con'):
323+
self.sock_con.close()

0 commit comments

Comments
 (0)