test(logs): add tests

This commit is contained in:
Kristofers Solo 2024-03-24 14:46:26 +02:00
parent db3cd40171
commit 28db61dc51
5 changed files with 29 additions and 5 deletions

1
Cargo.lock generated
View File

@ -2865,6 +2865,7 @@ dependencies = [
"axum",
"chrono",
"config",
"once_cell",
"reqwest",
"serde",
"sqlx",

View File

@ -27,7 +27,7 @@ sqlx = { version = "0.7", features = [
"chrono",
"migrate",
] }
tokio = { version = "1", features = ["full"] }
tokio = { version = "1.36", features = ["full"] }
uuid = { version = "1.8", features = ["v4", "serde"] }
tracing = { version = "0.1", features = ["log"] }
tracing-subscriber = { version = "0.3", features = ["registry", "env-filter"] }
@ -37,6 +37,7 @@ tracing-log = "0.2"
[dev-dependencies]
reqwest = "0.12"
once_cell = "1.19"
[package.metadata.clippy]
warn = [

View File

@ -10,7 +10,7 @@ use zero2prod::{
#[tokio::main]
async fn main() -> Result<(), std::io::Error> {
let subscriber = get_subscriber("zero2prod", "info");
let subscriber = get_subscriber("zero2prod", "info", std::io::stdout);
init_subscriber(subscriber);
let configuation = get_configuration().expect("Failed to read configuation.");
let pool = PgPoolOptions::new()

View File

@ -1,11 +1,18 @@
use tracing::{subscriber::set_global_default, Subscriber};
use tracing_bunyan_formatter::{BunyanFormattingLayer, JsonStorageLayer};
use tracing_log::LogTracer;
use tracing_subscriber::{layer::SubscriberExt, EnvFilter, Registry};
use tracing_subscriber::{fmt::MakeWriter, layer::SubscriberExt, EnvFilter, Registry};
pub fn get_subscriber(name: &str, env_filter: &str) -> impl Subscriber + Sync + Send {
pub fn get_subscriber<Sink>(
name: &str,
env_filter: &str,
sink: Sink,
) -> impl Subscriber + Sync + Send
where
Sink: for<'a> MakeWriter<'a> + Send + Sync + 'static,
{
let env_filter = EnvFilter::try_from_default_env().unwrap_or_else(|_| env_filter.into());
let formatting_layer = BunyanFormattingLayer::new(name.into(), std::io::stdout);
let formatting_layer = BunyanFormattingLayer::new(name.into(), sink);
Registry::default()
.with(env_filter)
.with(JsonStorageLayer)

View File

@ -1,3 +1,4 @@
use once_cell::sync::Lazy;
use reqwest::Client;
use sqlx::{postgres::PgPoolOptions, Connection, Executor, PgConnection, PgPool};
use tokio::net::TcpListener;
@ -5,6 +6,7 @@ use uuid::Uuid;
use zero2prod::{
configuation::{get_configuration, DatabaseSettings},
routes::route,
telemetry::{get_subscriber, init_subscriber},
};
#[tokio::test]
@ -85,7 +87,20 @@ async fn subscribe_returns_400_when_data_is_missing() {
}
}
static TRACING: Lazy<()> = Lazy::new(|| {
let default_filter_level = "info";
let subscriber_name = "test";
if std::env::var("TEST_LOG").is_ok() {
let subscriber = get_subscriber(subscriber_name, default_filter_level, std::io::stdout);
init_subscriber(subscriber);
} else {
let subscriber = get_subscriber(default_filter_level, subscriber_name, std::io::sink);
init_subscriber(subscriber);
}
});
async fn spawn_app() -> TestApp {
Lazy::force(&TRACING);
let listener = TcpListener::bind("127.0.0.1:0")
.await
.expect("Failed to bind random port");