From 71bb86af14d3b7031fb7a16bc3b3b08de9c90345 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Wed, 1 May 2024 14:08:41 -0700 Subject: [PATCH 1/2] Add test to confirm known bug --- opentelemetry-sdk/src/metrics/meter.rs | 25 ++++++++++++++++++++----- opentelemetry/src/metrics/noop.rs | 6 +++--- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/opentelemetry-sdk/src/metrics/meter.rs b/opentelemetry-sdk/src/metrics/meter.rs index c801adcb0a..e79cf2a9f1 100644 --- a/opentelemetry-sdk/src/metrics/meter.rs +++ b/opentelemetry-sdk/src/metrics/meter.rs @@ -762,14 +762,26 @@ where mod tests { use std::sync::Arc; - use opentelemetry::metrics::{InstrumentProvider, MetricsError, Unit}; + use opentelemetry::metrics::{InstrumentProvider, MeterProvider, MetricsError, Unit}; use super::{ InstrumentValidationPolicy, SdkMeter, INSTRUMENT_NAME_FIRST_ALPHABETIC, INSTRUMENT_NAME_INVALID_CHAR, INSTRUMENT_NAME_LENGTH, INSTRUMENT_UNIT_INVALID_CHAR, INSTRUMENT_UNIT_LENGTH, }; - use crate::{metrics::pipeline::Pipelines, Resource, Scope}; + use crate::{metrics::{pipeline::Pipelines, SdkMeterProvider}, Resource, Scope}; + + #[test] + #[ignore = "See issue https://github.com/open-telemetry/opentelemetry-rust/issues/1699"] + fn test_instrument_creation() { + let provider = SdkMeterProvider::builder() + .build(); + let meter = provider.meter("test"); + assert!(meter.u64_counter("test").try_init().is_ok()); + let result = meter.u64_counter("test with invalid name").try_init(); + // this assert fails, as result is always ok variant. + assert!(result.is_err()); + } #[test] fn test_instrument_config_validation() { @@ -787,9 +799,9 @@ mod tests { ("a".repeat(255).leak(), ""), ("a".repeat(256).leak(), INSTRUMENT_NAME_LENGTH), ("invalid name", INSTRUMENT_NAME_INVALID_CHAR), - // hyphens are now valid characters in the specification. - // https://github.com/open-telemetry/opentelemetry-specification/pull/3684 - ("allow/hyphen", ""), + ("allow/slash", ""), + ("allow_under_score", ""), + ("allow.dots.ok", ""), ]; for (name, expected_error) in instrument_name_test_cases { let assert = |result: Result<_, MetricsError>| { @@ -865,6 +877,9 @@ mod tests { ), ("utf8char锈", INSTRUMENT_UNIT_INVALID_CHAR), ("kb", ""), + ("Kb/sec", ""), + ("%", ""), + ("", ""), ]; for (unit, expected_error) in instrument_unit_test_cases { diff --git a/opentelemetry/src/metrics/noop.rs b/opentelemetry/src/metrics/noop.rs index adf4b03da3..68cc3bdcc9 100644 --- a/opentelemetry/src/metrics/noop.rs +++ b/opentelemetry/src/metrics/noop.rs @@ -1,8 +1,8 @@ //! # No-op OpenTelemetry Metrics Implementation //! -//! This implementation is returned as the global Meter if no `Meter` -//! has been set. It is also useful for testing purposes as it is intended -//! to have minimal resource utilization and runtime impact. +//! This implementation is returned as the global Meter if no `MeterProvider` +//! has been set. It is expected to have minimal resource utilization and +//! runtime impact. use crate::{ metrics::{ AsyncInstrument, CallbackRegistration, InstrumentProvider, Meter, MeterProvider, Observer, From ec19a0f0145cbb7b7ff32426f182a3166ea60bd1 Mon Sep 17 00:00:00 2001 From: Cijo Thomas Date: Wed, 1 May 2024 14:14:04 -0700 Subject: [PATCH 2/2] fmt issue --- opentelemetry-sdk/src/metrics/meter.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/opentelemetry-sdk/src/metrics/meter.rs b/opentelemetry-sdk/src/metrics/meter.rs index e79cf2a9f1..542c6e1281 100644 --- a/opentelemetry-sdk/src/metrics/meter.rs +++ b/opentelemetry-sdk/src/metrics/meter.rs @@ -769,13 +769,15 @@ mod tests { INSTRUMENT_NAME_INVALID_CHAR, INSTRUMENT_NAME_LENGTH, INSTRUMENT_UNIT_INVALID_CHAR, INSTRUMENT_UNIT_LENGTH, }; - use crate::{metrics::{pipeline::Pipelines, SdkMeterProvider}, Resource, Scope}; + use crate::{ + metrics::{pipeline::Pipelines, SdkMeterProvider}, + Resource, Scope, + }; #[test] #[ignore = "See issue https://github.com/open-telemetry/opentelemetry-rust/issues/1699"] fn test_instrument_creation() { - let provider = SdkMeterProvider::builder() - .build(); + let provider = SdkMeterProvider::builder().build(); let meter = provider.meter("test"); assert!(meter.u64_counter("test").try_init().is_ok()); let result = meter.u64_counter("test with invalid name").try_init();