From ff20460c139088608f896bc53cab9ac8574a1897 Mon Sep 17 00:00:00 2001 From: Kristofers Solo Date: Sat, 23 Mar 2024 14:33:46 +0200 Subject: [PATCH] test: refactor tests --- Cargo.lock | 19 ------------------- Cargo.toml | 2 -- src/lib.rs | 2 -- src/main.rs | 7 ++++--- tests/health_check.rs | 24 ++++++++++++------------ 5 files changed, 16 insertions(+), 38 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8cfa3a8..a89a2b0 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1038,23 +1038,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "tower-http" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" -dependencies = [ - "bitflags 2.5.0", - "bytes", - "http", - "http-body", - "http-body-util", - "pin-project-lite", - "tower-layer", - "tower-service", - "tracing", -] - [[package]] name = "tower-layer" version = "0.3.2" @@ -1371,6 +1354,4 @@ dependencies = [ "axum", "reqwest", "tokio", - "tower", - "tower-http", ] diff --git a/Cargo.toml b/Cargo.toml index 810afab..274de99 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,10 +16,8 @@ name = "zero2prod" [dependencies] axum = "0.7" tokio = { version = "1", features = ["full"] } -tower-http = { version = "0.5", features = ["trace"] } [dev-dependencies] -tower = { version = "0.4", features = ["util"] } reqwest = "0.12" [package.metadata.clippy] diff --git a/src/lib.rs b/src/lib.rs index 3e31fcc..53882e5 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,12 +1,10 @@ use axum::{extract::Path, http::StatusCode, response::IntoResponse, routing::get, Router}; -use tower_http::trace::TraceLayer; pub fn app() -> Router { Router::new() .route("/", get(root)) .route("/:name", get(greet)) .route("/health_check", get(health_check)) - .layer(TraceLayer::new_for_http()) } async fn root() -> impl IntoResponse { diff --git a/src/main.rs b/src/main.rs index e82ad13..9ea2700 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,11 +1,12 @@ use std::net::SocketAddr; use tokio::net::TcpListener; -use zero2prod::app; #[tokio::main] async fn main() { let addr = SocketAddr::from(([127, 0, 0, 1], 8000)); - let listener = TcpListener::bind(addr).await.unwrap(); - axum::serve(listener, app()).await.unwrap(); + let listener = TcpListener::bind(addr) + .await + .expect("Failed to bind random port"); + axum::serve(listener, zero2prod::app()).await.unwrap(); } diff --git a/tests/health_check.rs b/tests/health_check.rs index 219af0f..00e46a9 100644 --- a/tests/health_check.rs +++ b/tests/health_check.rs @@ -1,25 +1,25 @@ -use std::net::SocketAddr; - use tokio::net::TcpListener; -use zero2prod::app; #[tokio::test] async fn health_check() { - spawn_app(); + let address = spawn_app().await; + let url = format!("{}/health_check", &address); let client = reqwest::Client::new(); let response = client - .get("http://localhost:8000/health_check") + .get(&url) .send() .await - .expect("Failed to execute request."); + .expect("Failed to execute request"); + assert!(response.status().is_success()); assert_eq!(Some(0), response.content_length()); } -fn spawn_app() { - let addr = SocketAddr::from(([127, 0, 0, 1], 8000)); - let _ = tokio::spawn(async move { - let listener = TcpListener::bind(addr).await.unwrap(); - axum::serve(listener, app()).await.unwrap(); - }); +async fn spawn_app() -> String { + let listener = TcpListener::bind("127.0.0.1:0") + .await + .expect("Failed to bind random port"); + let port = listener.local_addr().unwrap().port(); + let _ = tokio::spawn(async move { axum::serve(listener, zero2prod::app()).await.unwrap() }); + format!("http://127.0.0.1:{}", port) }