@@ -36,6 +36,26 @@ def find_port(port=None):
36
36
port += 1
37
37
return find_port (3300 )
38
38
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
+
39
59
40
60
class RunnerException (object ):
41
61
pass
@@ -122,7 +142,8 @@ def __new__(cls,
122
142
ssl_key_file = None ,
123
143
ssl_cert_file = None ,
124
144
ssl_ca_file = None ,
125
- ssl_ciphers = None ):
145
+ ssl_ciphers = None ,
146
+ create_unix_socket = False ):
126
147
if os .name == 'nt' :
127
148
from .remote_tarantool_server import RemoteTarantoolServer
128
149
return RemoteTarantoolServer ()
@@ -133,12 +154,21 @@ def __init__(self,
133
154
ssl_key_file = None ,
134
155
ssl_cert_file = None ,
135
156
ssl_ca_file = None ,
136
- ssl_ciphers = None ):
157
+ ssl_ciphers = None ,
158
+ create_unix_socket = False ):
137
159
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
+
142
172
self ._admin = self .args ['admin' ]
143
173
self .vardir = tempfile .mkdtemp (prefix = 'var_' , dir = os .getcwd ())
144
174
self .find_exe ()
@@ -244,6 +274,9 @@ def clean(self):
244
274
if os .path .isdir (self .vardir ):
245
275
shutil .rmtree (self .vardir )
246
276
277
+ if os .path .exists (self .args ['primary' ]):
278
+ os .remove (self .args ['primary' ])
279
+
247
280
def __del__ (self ):
248
281
self .stop ()
249
282
self .clean ()
0 commit comments