From 3ecf82930d90ae74f22dd6ff786ab914e2ada9d1 Mon Sep 17 00:00:00 2001 From: Joonas Bergius Date: Fri, 23 May 2025 11:37:58 -0500 Subject: [PATCH] fix: use default endpoint for endpoint when provided empty string Signed-off-by: Joonas Bergius --- opentelemetry-otlp/src/exporter/http/mod.rs | 11 ++++++++++- opentelemetry-otlp/src/exporter/tonic/mod.rs | 13 ++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/opentelemetry-otlp/src/exporter/http/mod.rs b/opentelemetry-otlp/src/exporter/http/mod.rs index 72defd081e..faff23c02d 100644 --- a/opentelemetry-otlp/src/exporter/http/mod.rs +++ b/opentelemetry-otlp/src/exporter/http/mod.rs @@ -365,7 +365,7 @@ fn resolve_http_endpoint( provided_endpoint: Option<&str>, ) -> Result { // programmatic configuration overrides any value set via environment variables - if let Some(provider_endpoint) = provided_endpoint { + if let Some(provider_endpoint) = provided_endpoint.filter(|s| !s.is_empty()) { provider_endpoint .parse() .map_err(|er: http::uri::InvalidUri| { @@ -528,6 +528,15 @@ mod tests { ); } + #[test] + fn test_use_default_when_empty_string_for_option() { + run_env_test(vec![], || { + let endpoint = + super::resolve_http_endpoint("non_existent_var", "/v1/traces", Some("")).unwrap(); + assert_eq!(endpoint, "http://localhost:4318/v1/traces"); + }); + } + #[test] fn test_use_default_when_others_missing() { run_env_test(vec![], || { diff --git a/opentelemetry-otlp/src/exporter/tonic/mod.rs b/opentelemetry-otlp/src/exporter/tonic/mod.rs index 948b605b17..d53a7516be 100644 --- a/opentelemetry-otlp/src/exporter/tonic/mod.rs +++ b/opentelemetry-otlp/src/exporter/tonic/mod.rs @@ -225,7 +225,7 @@ impl TonicExporterBuilder { // If users for some reason want to use a custom path, they can use env var or builder to pass it // // programmatic configuration overrides any value set via environment variables - if let Some(endpoint) = provided_endpoint { + if let Some(endpoint) = provided_endpoint.filter(|s| !s.is_empty()) { endpoint } else if let Ok(endpoint) = env::var(default_endpoint_var) { endpoint @@ -666,4 +666,15 @@ mod tests { assert_eq!(url, "http://localhost:4317"); }); } + + #[test] + fn test_use_default_when_empty_string_for_option() { + run_env_test(vec![], || { + let url = TonicExporterBuilder::resolve_endpoint( + OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, + Some(String::new()), + ); + assert_eq!(url, "http://localhost:4317"); + }); + } }