From 6a73e06a6f906f1bc6b1d132c2b994b6f7aaba78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pato=20Sanda=C3=B1a?= Date: Thu, 18 Jul 2024 14:03:27 -0400 Subject: [PATCH 1/5] adding partialeq --- opentelemetry-sdk/src/logs/record.rs | 58 +++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 2 deletions(-) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index 3b79f10f7a..dd069b6a11 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -5,7 +5,7 @@ use opentelemetry::{ }; use std::{borrow::Cow, time::SystemTime}; -#[derive(Debug, Default, Clone)] +#[derive(Debug, Default, Clone, PartialEq)] #[non_exhaustive] /// LogRecord represents all data carried by a log record, and /// is provided to `LogExporter`s as input. @@ -99,7 +99,7 @@ impl opentelemetry::logs::LogRecord for LogRecord { /// TraceContext stores the trace context for logs that have an associated /// span. -#[derive(Debug, Clone)] +#[derive(Debug, Clone, PartialEq)] #[non_exhaustive] pub struct TraceContext { /// Trace id @@ -124,6 +124,7 @@ impl From<&SpanContext> for TraceContext { mod tests { use super::*; use opentelemetry::logs::{AnyValue, LogRecord as _, Severity}; + use opentelemetry::trace::TraceState; use std::borrow::Cow; use std::time::SystemTime; @@ -198,4 +199,57 @@ mod tests { Some(vec![(Key::new("key"), AnyValue::String("value".into()))]) ); } + + #[test] + fn compare_trace_context() { + let span_context = SpanContext::new( + TraceId::from_u128(1), + SpanId::from_u64(1), + TraceFlags::default(), + false, + TraceState::default(), + ); + + let span_context_cloned = span_context.clone(); + + assert_eq!(span_context, span_context_cloned); + + let span_context_different = SpanContext::new( + TraceId::from_u128(2), + SpanId::from_u64(2), + TraceFlags::default(), + false, + TraceState::default(), + ); + + assert_ne!(span_context, span_context_different); + } + + #[test] + fn compare_log_record() { + let log_record = LogRecord { + event_name: Some(Cow::Borrowed("test_event")), + target: Some(Cow::Borrowed("foo::bar")), + timestamp: Some(SystemTime::now()), + observed_timestamp: Some(SystemTime::now()), + severity_text: Some(Cow::Borrowed("ERROR")), + severity_number: Some(Severity::Error), + body: Some(AnyValue::String("Test body".into())), + attributes: Some(vec![(Key::new("key"), AnyValue::String("value".into()))]), + trace_context: Some(TraceContext { + trace_id: TraceId::from_u128(1), + span_id: SpanId::from_u64(1), + trace_flags: Some(TraceFlags::default()), + }), + }; + + let log_record_cloned = log_record.clone(); + + assert_eq!(log_record, log_record_cloned); + + let mut log_record_different = log_record.clone(); + log_record_different.event_name = Some(Cow::Borrowed("different_event")); + + assert_ne!(log_record, log_record_different); + } } From 662ef8b6c874064e482725cee34925ce4c8d3a95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pato=20Sanda=C3=B1a?= Date: Thu, 18 Jul 2024 14:06:23 -0400 Subject: [PATCH 2/5] udpate changelog --- opentelemetry-sdk/CHANGELOG.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index fbd8d978d8..c5904fc740 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,6 +2,8 @@ ## vNext +- `LogRecord` and `SpanContext` derive from `PartialEq` to facilitate Unit Testing. + ## v0.24.1 - Add hidden method to support tracing-opentelemetry From 7bc1bf95398fe6ba4152362e7c29906b40491242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pato=20Sanda=C3=B1a?= Date: Thu, 18 Jul 2024 15:08:56 -0400 Subject: [PATCH 3/5] Update opentelemetry-sdk/CHANGELOG.md Co-authored-by: Lalit Kumar Bhasin --- opentelemetry-sdk/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/opentelemetry-sdk/CHANGELOG.md b/opentelemetry-sdk/CHANGELOG.md index c5904fc740..e985bdb21a 100644 --- a/opentelemetry-sdk/CHANGELOG.md +++ b/opentelemetry-sdk/CHANGELOG.md @@ -2,7 +2,7 @@ ## vNext -- `LogRecord` and `SpanContext` derive from `PartialEq` to facilitate Unit Testing. +- `opentelemetry_sdk::logs::record::LogRecord` and `opentelemetry_sdk::logs::record::TraceContext` derive from `PartialEq` to facilitate Unit Testing. ## v0.24.1 From 062b50d771fa04e99d66111543e61cd45b040254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pato=20Sanda=C3=B1a?= Date: Thu, 18 Jul 2024 15:17:38 -0400 Subject: [PATCH 4/5] make a test for the real thing --- opentelemetry-sdk/src/logs/record.rs | 31 ++++++++++++---------------- 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index dd069b6a11..64f869e88d 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -124,7 +124,6 @@ impl From<&SpanContext> for TraceContext { mod tests { use super::*; use opentelemetry::logs::{AnyValue, LogRecord as _, Severity}; - use opentelemetry::trace::TraceState; use std::borrow::Cow; use std::time::SystemTime; @@ -202,27 +201,23 @@ mod tests { #[test] fn compare_trace_context() { - let span_context = SpanContext::new( - TraceId::from_u128(1), - SpanId::from_u64(1), - TraceFlags::default(), - false, - TraceState::default(), - ); + let trace_context = TraceContext { + trace_id: TraceId::from_u128(1), + span_id: SpanId::from_u64(1), + trace_flags: Some(TraceFlags::default()), + }; - let span_context_cloned = span_context.clone(); + let trace_context_cloned = trace_context.clone(); - assert_eq!(span_context, span_context_cloned); + assert_eq!(trace_context, trace_context_cloned); - let span_context_different = SpanContext::new( - TraceId::from_u128(2), - SpanId::from_u64(2), - TraceFlags::default(), - false, - TraceState::default(), - ); + let trace_context_different = TraceContext { + trace_id: TraceId::from_u128(2), + span_id: SpanId::from_u64(2), + trace_flags: Some(TraceFlags::default()), + }; - assert_ne!(span_context, span_context_different); + assert_ne!(trace_context, trace_context_different); } #[test] From 90c18d478c94ec589e4e2090048838ffb6de8054 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pato=20Sanda=C3=B1a?= Date: Thu, 18 Jul 2024 16:26:12 -0400 Subject: [PATCH 5/5] test for LogRecord target borrowed == owned --- opentelemetry-sdk/src/logs/record.rs | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/opentelemetry-sdk/src/logs/record.rs b/opentelemetry-sdk/src/logs/record.rs index 64f869e88d..16aaa70289 100644 --- a/opentelemetry-sdk/src/logs/record.rs +++ b/opentelemetry-sdk/src/logs/record.rs @@ -247,4 +247,19 @@ mod tests { assert_ne!(log_record, log_record_different); } + + #[test] + fn compare_log_record_target_borrowed_eq_owned() { + let log_record_borrowed = LogRecord { + event_name: Some(Cow::Borrowed("test_event")), + ..Default::default() + }; + + let log_record_owned = LogRecord { + event_name: Some(Cow::Owned("test_event".to_string())), + ..Default::default() + }; + + assert_eq!(log_record_borrowed, log_record_owned); + } }