1
1
import requests
2
2
import pytest
3
3
import subprocess
4
+ import time
4
5
import socket
5
6
from urllib .parse import urljoin
6
7
7
8
8
- @pytest .fixture (scope = 'session' )
9
+ @pytest .fixture ()
9
10
def server_port ():
10
11
sock = socket .socket ()
11
12
sock .bind (('' , 0 ))
12
13
return sock .getsockname ()[1 ]
13
14
14
15
15
- @pytest .fixture (scope = 'session' )
16
- def server (server_port , tmp_path_factory ):
17
- tmp_dir = tmp_path_factory .mktemp ("server" )
18
- data_dir = tmp_dir / 'data'
19
- stderr = tmp_dir / 'server.stderr.log'
16
+ @pytest .fixture ()
17
+ def server (server_port , tmp_path ):
18
+ data_dir = tmp_path / 'data'
19
+ stderr = tmp_path / 'server.stderr.log'
20
20
command = [
21
21
'zig-out/bin/fpindex' ,
22
22
'--dir' , str (data_dir ),
@@ -30,11 +30,11 @@ def server(server_port, tmp_path_factory):
30
30
stderr = stderr .open ('w' ),
31
31
)
32
32
yield
33
- process .terminate ()
34
- retcode = process .wait ()
35
- if retcode != 0 :
36
- for line in stderr .read_text ().splitlines ():
37
- print (line )
33
+ if process .returncode is None :
34
+ process .terminate ()
35
+ process . wait ()
36
+ for line in stderr .read_text ().splitlines ():
37
+ print (line )
38
38
39
39
40
40
@pytest .fixture
@@ -69,18 +69,22 @@ def session():
69
69
yield session
70
70
71
71
72
+ def check_port (port_no ):
73
+ with socket .socket (socket .AF_INET , socket .SOCK_STREAM ) as sock :
74
+ return sock .connect_ex (('127.0.0.1' , port_no )) == 0
75
+
76
+
72
77
@pytest .fixture
73
78
def client (session , server_port , server ):
79
+ deadline = time .time () + 1
80
+ while not check_port (server_port ):
81
+ if time .time () > deadline :
82
+ raise TimeoutError ()
83
+ time .sleep (0.01 )
74
84
return Client (session , f'http://localhost:{ server_port } ' )
75
85
76
86
77
- @pytest .fixture (autouse = True )
78
- def delete_index (client , index_name ):
79
- req = client .delete (f'/{ index_name } ' )
80
- req .raise_for_status ()
81
-
82
-
83
87
@pytest .fixture ()
84
- def create_index (client , index_name , delete_index ):
88
+ def create_index (client , index_name ):
85
89
req = client .put (f'/{ index_name } ' )
86
90
req .raise_for_status ()
0 commit comments