#![allow(missing_docs)]
use rlg_otlp::{OtlpError, OtlpExporter};
#[test]
fn builder_stores_endpoint() {
let exporter = OtlpExporter::builder()
.endpoint("http://localhost:4318/v1/logs")
.build();
assert_eq!(exporter.endpoint(), "http://localhost:4318/v1/logs");
}
#[test]
fn builder_accepts_multiple_headers() {
let exporter = OtlpExporter::builder()
.endpoint("https://api.example.com/v1/logs")
.header("x-tenant", "acme")
.header("authorization", "Bearer test-token")
.timeout_secs(5)
.build();
let cloned = exporter.clone();
assert_eq!(cloned.endpoint(), exporter.endpoint());
}
#[test]
fn builder_applies_defaults_when_fields_omitted() {
let exporter = OtlpExporter::builder()
.endpoint("http://localhost:4318/v1/logs")
.build();
assert!(exporter.endpoint().starts_with("http://"));
}
#[test]
fn builder_max_retries_zero_is_accepted() {
let exporter = OtlpExporter::builder()
.endpoint("http://localhost:4318/v1/logs")
.max_retries(0)
.build();
assert_eq!(exporter.endpoint(), "http://localhost:4318/v1/logs");
}
#[test]
fn error_bad_status_display_includes_status_code() {
let err = OtlpError::BadStatus(503);
let msg = err.to_string();
assert!(msg.contains("503"), "unexpected: {msg}");
}
#[test]
fn error_serialise_display_is_meaningful() {
let json_err =
serde_json::from_str::<serde_json::Value>("not-json")
.unwrap_err();
let err: OtlpError = json_err.into();
let msg = err.to_string();
assert!(msg.contains("serialise"), "unexpected: {msg}");
}
#[test]
fn otlp_error_variants_are_debug() {
let e1 = OtlpError::BadStatus(429);
let _ = format!("{e1:?}");
}
#[test]
fn unreachable_endpoint_produces_transport_error() {
let exporter = OtlpExporter::builder()
.endpoint("http://127.0.0.1:1/v1/logs")
.timeout_secs(1)
.max_retries(0)
.build();
let record = rlg::log::Log::error("smoke");
let err = exporter.export_one(&record).expect_err(
"unreachable endpoint must yield a Transport error",
);
matches!(err, OtlpError::Transport(_));
}