Skip to content

Commit 7c7022c

Browse files
committed
extract test helper
1 parent e95290d commit 7c7022c

1 file changed

Lines changed: 14 additions & 61 deletions

File tree

crates/uv-client/tests/it/user_agent_version.rs

Lines changed: 14 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ use hyper_util::rt::TokioIo;
1010
use insta::{assert_json_snapshot, assert_snapshot, with_settings};
1111
use std::str::FromStr;
1212
use tokio::net::TcpListener;
13+
use tokio::task::JoinHandle;
1314
use url::Url;
1415
use uv_cache::Cache;
1516
use uv_client::RegistryClientBuilder;
@@ -19,11 +20,13 @@ use uv_platform_tags::{Arch, Os, Platform};
1920
use uv_redacted::DisplaySafeUrl;
2021
use uv_version::version;
2122

22-
#[tokio::test]
23-
async fn test_user_agent_has_version() -> Result<()> {
23+
/// Spawns a dummy HTTP server that echoes back the User-Agent header.
24+
/// Returns the server URL and the server task handle.
25+
async fn spawn_user_agent_echo_server() -> Result<(DisplaySafeUrl, JoinHandle<()>)> {
2426
// Set up the TCP listener on a random available port
2527
let listener = TcpListener::bind("127.0.0.1:0").await?;
2628
let addr = listener.local_addr()?;
29+
let url = DisplaySafeUrl::from_str(&format!("http://{addr}"))?;
2730

2831
// Spawn the server loop in a background task
2932
let server_task = tokio::spawn(async move {
@@ -50,12 +53,18 @@ async fn test_user_agent_has_version() -> Result<()> {
5053
});
5154
});
5255

56+
Ok((url, server_task))
57+
}
58+
59+
#[tokio::test]
60+
async fn test_user_agent_has_version() -> Result<()> {
61+
let (url, server_task) = spawn_user_agent_echo_server().await?;
62+
5363
// Initialize uv-client
5464
let cache = Cache::temp()?.init()?;
5565
let client = RegistryClientBuilder::new(BaseClientBuilder::default(), cache).build();
5666

5767
// Send request to our dummy server
58-
let url = DisplaySafeUrl::from_str(&format!("http://{addr}"))?;
5968
let res = client
6069
.cached_client()
6170
.uncached()
@@ -81,34 +90,7 @@ async fn test_user_agent_has_version() -> Result<()> {
8190

8291
#[tokio::test]
8392
async fn test_user_agent_has_linehaul() -> Result<()> {
84-
// Set up the TCP listener on a random available port
85-
let listener = TcpListener::bind("127.0.0.1:0").await?;
86-
let addr = listener.local_addr()?;
87-
88-
// Spawn the server loop in a background task
89-
let server_task = tokio::spawn(async move {
90-
let svc = service_fn(move |req: Request<hyper::body::Incoming>| {
91-
// Get User Agent Header and send it back in the response
92-
let user_agent = req
93-
.headers()
94-
.get(USER_AGENT)
95-
.and_then(|v| v.to_str().ok())
96-
.map(ToString::to_string)
97-
.unwrap_or_default(); // Empty Default
98-
future::ok::<_, hyper::Error>(Response::new(Full::new(Bytes::from(user_agent))))
99-
});
100-
// Start Server (not wrapped in loop {} since we want a single response server)
101-
// If you want server to accept multiple connections, wrap it in loop {}
102-
let (socket, _) = listener.accept().await.unwrap();
103-
let socket = TokioIo::new(socket);
104-
tokio::task::spawn(async move {
105-
http1::Builder::new()
106-
.serve_connection(socket, svc)
107-
.with_upgrades()
108-
.await
109-
.expect("Server Started");
110-
});
111-
});
93+
let (url, server_task) = spawn_user_agent_echo_server().await?;
11294

11395
// Add some representative markers for an Ubuntu CI runner
11496
let markers = MarkerEnvironment::try_from(MarkerEnvironmentBuilder {
@@ -153,7 +135,6 @@ async fn test_user_agent_has_linehaul() -> Result<()> {
153135
let client = builder.build();
154136

155137
// Send request to our dummy server
156-
let url = DisplaySafeUrl::from_str(&format!("http://{addr}"))?;
157138
let res = client
158139
.cached_client()
159140
.uncached()
@@ -262,34 +243,7 @@ async fn test_user_agent_has_linehaul() -> Result<()> {
262243

263244
#[tokio::test]
264245
async fn test_user_agent_installer_name_override() -> Result<()> {
265-
// Set up the TCP listener on a random available port
266-
let listener = TcpListener::bind("127.0.0.1:0").await?;
267-
let addr = listener.local_addr()?;
268-
269-
// Spawn the server loop in a background task
270-
let server_task = tokio::spawn(async move {
271-
let svc = service_fn(move |req: Request<hyper::body::Incoming>| {
272-
// Get User Agent Header and send it back in the response
273-
let user_agent = req
274-
.headers()
275-
.get(USER_AGENT)
276-
.and_then(|v| v.to_str().ok())
277-
.map(ToString::to_string)
278-
.unwrap_or_default(); // Empty Default
279-
future::ok::<_, hyper::Error>(Response::new(Full::new(Bytes::from(user_agent))))
280-
});
281-
// Start Server (not wrapped in loop {} since we want a single response server)
282-
// If you want server to accept multiple connections, wrap it in loop {}
283-
let (socket, _) = listener.accept().await.unwrap();
284-
let socket = TokioIo::new(socket);
285-
tokio::task::spawn(async move {
286-
http1::Builder::new()
287-
.serve_connection(socket, svc)
288-
.with_upgrades()
289-
.await
290-
.expect("Server Started");
291-
});
292-
});
246+
let (url, server_task) = spawn_user_agent_echo_server().await?;
293247

294248
// Add some representative markers for an Ubuntu CI runner
295249
let markers = MarkerEnvironment::try_from(MarkerEnvironmentBuilder {
@@ -315,7 +269,6 @@ async fn test_user_agent_installer_name_override() -> Result<()> {
315269
let client = RegistryClientBuilder::new(base_client, cache).build();
316270

317271
// Send request to our dummy server
318-
let url = DisplaySafeUrl::from_str(&format!("http://{addr}"))?;
319272
let res = client
320273
.cached_client()
321274
.uncached()

0 commit comments

Comments
 (0)