Skip to content

Commit 51fa954

Browse files
committed
fix(tests): use port 0 for spawning grpc server
1 parent 431af81 commit 51fa954

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

crates/grpc_server/src/tests.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,15 @@ use api;
77
use api::DbConfig;
88
use index::IndexType;
99
use prost_types::Struct;
10+
use std::net::SocketAddr;
1011
use storage::StorageType;
1112
use tempfile::tempdir;
1213
use tokio;
1314
use 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]
7070
async 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]
9191
async 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]
143143
async 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]
186186
async 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]
234234
async 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

Comments
 (0)