From 757c68b019756b1c51e2e110157ae8ec77169b64 Mon Sep 17 00:00:00 2001 From: Test User Date: Thu, 25 Jun 2026 12:58:07 +0200 Subject: [PATCH] fix(tests): use portpicker for ephemeral port in default_role_integration_test Hardcoded port 8085 caused intermittent "Address already in use (os error 98)" failures when the OS had not yet released the port from a prior test run. Replace with portpicker::pick_unused_port() following the pattern already used in tests/server.rs. portpicker is already a crate dependency. Refs #2947 Co-Authored-By: Terraphim AI --- terraphim_server/tests/default_role_integration_test.rs | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/terraphim_server/tests/default_role_integration_test.rs b/terraphim_server/tests/default_role_integration_test.rs index bef043cae..59188ee1c 100644 --- a/terraphim_server/tests/default_role_integration_test.rs +++ b/terraphim_server/tests/default_role_integration_test.rs @@ -115,8 +115,9 @@ async fn test_default_role_ripgrep_integration() { log::info!("✅ Default role configuration validated"); log::info!(" - Ripgrep haystack: {}", ripgrep_haystack.location); - // Start server on a test port - let server_addr = "127.0.0.1:8085".parse().unwrap(); + // Start server on an ephemeral port to avoid address-already-in-use conflicts + let port = portpicker::pick_unused_port().expect("No unused ports available"); + let server_addr: std::net::SocketAddr = ([127, 0, 0, 1], port).into(); let server_handle = tokio::spawn(async move { if let Err(e) = axum_server(server_addr, config_state).await { log::error!("Server error: {:?}", e); @@ -129,7 +130,7 @@ async fn test_default_role_ripgrep_integration() { let client = terraphim_service::http_client::create_default_client() .expect("Failed to create HTTP client"); - let base_url = "http://127.0.0.1:8085"; + let base_url = format!("http://127.0.0.1:{}", port); // Test 1: Health check log::info!("🔍 Testing server health...");