#[cfg(test)]
mod tests {
use dd_tracing_layer::{DatadogOptions, Region};
use tracing::{instrument, subscriber};
use tracing_subscriber::prelude::*;
#[instrument]
fn log(msg: &'static str) {
log2(msg);
}
#[instrument]
fn log2(msg2: &'static str) {
tracing::info!(ip = "127.0.0.1", message = msg2);
}
fn get_api_key() -> String {
std::env::var("DD_API_KEY").unwrap_or("invented_api_key".to_string())
}
fn setup(server: &httpmock::MockServer) -> (httpmock::Mock<'_>, dd_tracing_layer::LogLayer) {
dotenvy::from_filename(".env").ok();
let api_key = get_api_key();
let url = server.base_url().clone();
let mock = server.mock(|when, then| {
when.any_request().header_exists("DD-API-KEY");
then.status(202).json_body(serde_json::json!([]));
});
let options = DatadogOptions::new("dd-tracing-layer", api_key)
.with_url(url)
.with_tags("env:dev");
let dd = dd_tracing_layer::create(options);
(mock, dd)
}
#[test]
fn datadog_works() {
let server = httpmock::MockServer::start();
let (mock_server, dd) = setup(&server);
let subscriber = tracing_subscriber::registry().with(dd);
let _s = subscriber::set_default(subscriber);
log("this is a test message");
std::thread::sleep(std::time::Duration::from_secs(8));
assert_eq!(mock_server.hits(), 1);
}
#[test]
#[ignore]
fn manual_tests() {
let server = httpmock::MockServer::start();
let (_, dd) = setup(&server);
let subscriber = tracing_subscriber::registry()
.with(tracing_subscriber::fmt::Layer::new().json())
.with(dd);
let _s = subscriber::set_default(subscriber);
log("a");
std::thread::sleep(std::time::Duration::from_secs(2));
tracing::info!(
ip = "127.0.0.1",
person = r#"{ "name": "rob", "age": 15 }"#,
message = "Testing Json"
);
log("3a");
}
#[test]
#[ignore]
fn manual_tests_without_mock_server() {
dotenvy::from_filename(".env").ok();
let api_key = get_api_key();
let options = DatadogOptions::new("dd-tracing-layer", api_key)
.with_region(Region::US1)
.with_tags("env:dev");
let dd = dd_tracing_layer::create(options);
let subscriber = tracing_subscriber::registry()
.with(tracing_subscriber::fmt::Layer::new().json())
.with(dd);
let _s = subscriber::set_default(subscriber);
tracing::info!(
ip = "127.0.0.1",
person = r#"{ "name": "rob", "age": 15 }"#,
message = "Testing Json"
);
}
}