@@ -7,19 +7,15 @@ use api;
77use api:: DbConfig ;
88use index:: IndexType ;
99use prost_types:: Struct ;
10+ use std:: net:: SocketAddr ;
1011use storage:: StorageType ;
1112use tempfile:: tempdir;
1213use tokio;
1314use tonic:: transport:: Channel ;
1415
1516// Inspired from https://github.com/hyperium/tonic/discussions/924#discussioncomment-9854088
1617
17- // TODO: figure out a way to either:
18- // - assign different ports for different tests; when cargo test is run with multiple threads -> address in use error
19- // - use a shared instance of the server
20- // currently tests must be run with --test-threads=1
21-
22- async fn start_test_server ( ) -> Result < ( ) , Box < dyn std:: error:: Error > > {
18+ async fn start_test_server ( ) -> Result < SocketAddr , Box < dyn std:: error:: Error > > {
2319 // using a temporary directory for db datapath
2420 let temp_dir = tempdir ( ) . unwrap ( ) ;
2521
@@ -31,7 +27,7 @@ async fn start_test_server() -> Result<(), Box<dyn std::error::Error>> {
3127 } ;
3228
3329 let config = GRPCServerConfig {
34- addr : "127.0.0.1:8080 " . parse ( ) ?,
30+ addr : "127.0.0.1:0 " . parse ( ) ?,
3531 root_password : "123" . to_string ( ) ,
3632 logging : false ,
3733 db_config,
@@ -45,6 +41,7 @@ async fn start_test_server() -> Result<(), Box<dyn std::error::Error>> {
4541 } ;
4642
4743 let listener = tokio:: net:: TcpListener :: bind ( config. addr ) . await ?;
44+ let listener_addr = listener. local_addr ( ) ?;
4845
4946 tokio:: spawn ( async move {
5047 let _ = run_server (
@@ -56,20 +53,23 @@ async fn start_test_server() -> Result<(), Box<dyn std::error::Error>> {
5653 . inspect_err ( |err| panic ! ( "Could not start test server : {:?}" , err) ) ;
5754 } ) ;
5855
59- Ok ( ( ) )
56+ Ok ( listener_addr )
6057}
6158
62- async fn create_test_client ( ) -> Result < VectorDbClient < Channel > , Box < dyn std:: error:: Error > > {
63- let channel = tonic:: transport:: Channel :: from_static ( "http://127.0.0.1:8080" )
59+ async fn create_test_client (
60+ server_addr : SocketAddr ,
61+ ) -> Result < VectorDbClient < Channel > , Box < dyn std:: error:: Error > > {
62+ let channel = Channel :: from_shared ( format ! ( "http://{}" , server_addr) )
63+ . unwrap ( )
6464 . connect ( )
6565 . await ?;
6666 Ok ( VectorDbClient :: new ( channel) )
6767}
6868
6969#[ tokio:: test]
7070async fn test_grpc_server_start ( ) {
71- start_test_server ( ) . await . unwrap ( ) ;
72- let mut client = create_test_client ( ) . await . unwrap ( ) ;
71+ let server_addr = start_test_server ( ) . await . unwrap ( ) ;
72+ let mut client = create_test_client ( server_addr ) . await . unwrap ( ) ;
7373
7474 // insert a test vector
7575 let test_vec = vec ! [ 1.0 , 2.0 , 3.0 ] ;
@@ -89,8 +89,8 @@ async fn test_grpc_server_start() {
8989
9090#[ tokio:: test]
9191async fn test_insert_vector_rpc ( ) {
92- start_test_server ( ) . await . unwrap ( ) ;
93- let mut client = create_test_client ( ) . await . unwrap ( ) ;
92+ let server_addr = start_test_server ( ) . await . unwrap ( ) ;
93+ let mut client = create_test_client ( server_addr ) . await . unwrap ( ) ;
9494
9595 // insert a test vector
9696 let test_vec = vec ! [ 1.0 , 2.0 , 3.0 ] ;
@@ -141,8 +141,8 @@ async fn test_insert_vector_rpc() {
141141
142142#[ tokio:: test]
143143async fn test_delete_vector_rpc ( ) {
144- start_test_server ( ) . await . unwrap ( ) ;
145- let mut client = create_test_client ( ) . await . unwrap ( ) ;
144+ let server_addr = start_test_server ( ) . await . unwrap ( ) ;
145+ let mut client = create_test_client ( server_addr ) . await . unwrap ( ) ;
146146
147147 // insert a test vector
148148 let test_vec = vec ! [ 1.0 , 2.0 , 3.0 ] ;
@@ -184,8 +184,8 @@ async fn test_delete_vector_rpc() {
184184
185185#[ tokio:: test]
186186async fn test_search_vector_rpc ( ) {
187- start_test_server ( ) . await . unwrap ( ) ;
188- let mut client = create_test_client ( ) . await . unwrap ( ) ;
187+ let server_addr = start_test_server ( ) . await . unwrap ( ) ;
188+ let mut client = create_test_client ( server_addr ) . await . unwrap ( ) ;
189189
190190 // insert a test vector
191191 let test_vec = vec ! [ 1.0 , 2.0 , 3.0 ] ;
@@ -232,8 +232,8 @@ async fn test_search_vector_rpc() {
232232
233233#[ tokio:: test]
234234async fn test_unauthorized_rpc ( ) {
235- start_test_server ( ) . await . unwrap ( ) ;
236- let mut client = create_test_client ( ) . await . unwrap ( ) ;
235+ let server_addr = start_test_server ( ) . await . unwrap ( ) ;
236+ let mut client = create_test_client ( server_addr ) . await . unwrap ( ) ;
237237
238238 // insert a test vector
239239 let test_vec = vec ! [ 1.0 , 2.0 , 3.0 ] ;
0 commit comments