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) .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}