tracing_s3/
testing.rs

1#[cfg(test)]
2mod tests {
3    use crate::config::tracing_s3_config::TracingS3Config;
4    use crate::config::types::{
5        Bucket, BufferSizeLimitKb, CronIntervalInMs, Endpoint, ObjectSizeLimitMb, Postfix, Prefix,
6    };
7    use crate::layer::http_log_layer::HttpLogLayer;
8    use std::sync::Arc;
9    use std::time::Duration;
10    use tracing::Dispatch;
11    use tracing::dispatcher::with_default;
12    use tracing_subscriber::layer::SubscriberExt;
13
14    #[tracing::instrument(name = "add", skip_all)]
15    pub fn add(left: u64, right: u64) -> u64 {
16        left + right
17    }
18
19    #[tokio::test]
20    async fn json_tracing() {
21        use tracing_subscriber::fmt::format::FmtSpan;
22        let subscriber = tracing_subscriber::fmt()
23            .json()
24            .with_span_events(FmtSpan::CLOSE)
25            .with_max_level(tracing::Level::INFO) // Set desired log level
26            .finish();
27        with_default(&Dispatch::new(subscriber), || {
28            let result = add(2, 2);
29            assert_eq!(result, 4);
30        });
31        tokio::time::sleep(Duration::from_millis(1_000)).await;
32    }
33
34    #[tokio::test]
35    async fn http_tracing() {
36        let config = TracingS3Config::new(
37            None,
38            None,
39            None,
40            Bucket(None),
41            Prefix("prefix"),
42            Postfix("log"),
43            Endpoint(None),
44            ObjectSizeLimitMb::new(1).unwrap(),
45            CronIntervalInMs::new(1_000).unwrap(),
46            BufferSizeLimitKb::new(1).unwrap(),
47        )
48        .await
49        .unwrap();
50        let http_log_layer = HttpLogLayer::new(Arc::new(config));
51        let subscriber = tracing_subscriber::registry()
52            .with(
53                tracing_subscriber::EnvFilter::try_from_default_env()
54                    .unwrap_or_else(|_| "info".into()),
55            )
56            .with(tracing_subscriber::fmt::layer().with_ansi(false))
57            .with(http_log_layer);
58        with_default(&Dispatch::new(subscriber), || {
59            tracing::info!("Info test");
60            tracing::warn!("Warn test");
61            tracing::debug!("Debug test");
62            tracing::error!("Error test");
63            for i in 0..500 {
64                let result = add(2, i);
65                assert_eq!(result, 2 + i);
66            }
67        });
68        tokio::time::sleep(Duration::from_millis(10_000)).await;
69    }
70}