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