From 04bf2e4a54e3ee209a3f155395b397030b0c0c54 Mon Sep 17 00:00:00 2001 From: Howard Tam Date: Mon, 3 Jun 2024 19:49:28 -0700 Subject: [PATCH] Implement serde test --- .../expected/serialized_traces.json | 133 ++++++++++++++++++ .../integration_test/src/trace_asserter.rs | 2 +- .../tests/integration_test/tests/traces.rs | 17 +++ 3 files changed, 151 insertions(+), 1 deletion(-) create mode 100644 opentelemetry-otlp/tests/integration_test/expected/serialized_traces.json diff --git a/opentelemetry-otlp/tests/integration_test/expected/serialized_traces.json b/opentelemetry-otlp/tests/integration_test/expected/serialized_traces.json new file mode 100644 index 0000000000..d453cde88f --- /dev/null +++ b/opentelemetry-otlp/tests/integration_test/expected/serialized_traces.json @@ -0,0 +1,133 @@ +{ + "resourceSpans": [ + { + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "basic-otlp-tracing-example" + } + } + ], + "droppedAttributesCount": 0 + }, + "scopeSpans": [ + { + "scope": { + "name": "ex.com/basic", + "version": "", + "attributes": [], + "droppedAttributesCount": 0 + }, + "spans": [ + { + "traceId": "9b458af7378cba65253d7042d34fc72e", + "spanId": "cd7cf7bf939930b7", + "traceState": "", + "parentSpanId": "d58cf2d702a061e0", + "flags": 0, + "name": "Sub operation...", + "kind": 1, + "startTimeUnixNano": "1703985537070566698", + "endTimeUnixNano": "1703985537070572718", + "attributes": [ + { + "key": "lemons", + "value": { + "stringValue": "five" + } + } + ], + "droppedAttributesCount": 0, + "events": [ + { + "timeUnixNano": "1703985537070567697", + "name": "Sub span event", + "attributes": [], + "droppedAttributesCount": 0 + } + ], + "droppedEventsCount": 0, + "links": [], + "droppedLinksCount": 0, + "status": { + "message": "", + "code": 0 + } + } + ], + "schemaUrl": "" + } + ], + "schemaUrl": "" + }, + { + "resource": { + "attributes": [ + { + "key": "service.name", + "value": { + "stringValue": "basic-otlp-tracing-example" + } + } + ], + "droppedAttributesCount": 0 + }, + "scopeSpans": [ + { + "scope": { + "name": "ex.com/basic", + "version": "", + "attributes": [], + "droppedAttributesCount": 0 + }, + "spans": [ + { + "traceId": "9b458af7378cba65253d7042d34fc72e", + "spanId": "d58cf2d702a061e0", + "traceState": "", + "parentSpanId": "", + "flags": 0, + "name": "operation", + "kind": 1, + "startTimeUnixNano": "1703985537070558635", + "endTimeUnixNano": "1703985537070580454", + "attributes": [ + { + "key": "ex.com/another", + "value": { + "stringValue": "yes" + } + } + ], + "droppedAttributesCount": 0, + "events": [ + { + "timeUnixNano": "1703985537070563326", + "name": "Nice operation!", + "attributes": [ + { + "key": "bogons", + "value": "100" + } + ], + "droppedAttributesCount": 0 + } + ], + "droppedEventsCount": 0, + "links": [], + "droppedLinksCount": 0, + "status": { + "message": "", + "code": 0 + } + } + ], + "schemaUrl": "" + } + ], + "schemaUrl": "" + } + ] +} \ No newline at end of file diff --git a/opentelemetry-otlp/tests/integration_test/src/trace_asserter.rs b/opentelemetry-otlp/tests/integration_test/src/trace_asserter.rs index 47af933a83..00c7c2300d 100644 --- a/opentelemetry-otlp/tests/integration_test/src/trace_asserter.rs +++ b/opentelemetry-otlp/tests/integration_test/src/trace_asserter.rs @@ -216,6 +216,6 @@ fn span_eq(left: &Span, right: &Span) -> bool { pub fn read_spans_from_json(file: File) -> Vec { let reader = std::io::BufReader::new(file); - let trace_data: TracesData = serde_json::from_reader(reader).unwrap(); + let trace_data: TracesData = serde_json::from_reader(reader).expect("Failed to read json file"); trace_data.resource_spans } diff --git a/opentelemetry-otlp/tests/integration_test/tests/traces.rs b/opentelemetry-otlp/tests/integration_test/tests/traces.rs index 6fac7749ff..f7f3a132fc 100644 --- a/opentelemetry-otlp/tests/integration_test/tests/traces.rs +++ b/opentelemetry-otlp/tests/integration_test/tests/traces.rs @@ -8,9 +8,11 @@ use opentelemetry::{ trace::{TraceContextExt, Tracer}, Key, KeyValue, }; +use opentelemetry_proto::tonic::trace::v1::TracesData; use opentelemetry_sdk::{runtime, trace as sdktrace, Resource}; use std::error::Error; use std::fs::File; +use std::io::Write; use std::os::unix::fs::MetadataExt; fn init_tracer_provider() -> Result { @@ -83,3 +85,18 @@ pub fn test_assert_span_eq() { TraceAsserter::new(spans.clone(), spans).assert(); } + +#[test] +pub fn test_serde() { + let spans = read_spans_from_json(File::open("./expected/traces.json").expect("Failed to read traces.json")); + let json = serde_json::to_string_pretty(&TracesData { resource_spans: spans }).expect("Failed to serialize spans to json"); + + // Write to file. + let mut file = File::create("./expected/serialized_traces.json").unwrap(); + file.write_all(json.as_bytes()).unwrap(); + + let left = read_spans_from_json(File::open("./expected/traces.json").expect("Failed to read traces.json")); + let right = read_spans_from_json(File::open("./expected/serialized_traces.json").expect("Failed to read serialized_traces.json")); + + TraceAsserter::new(left, right).assert(); +} \ No newline at end of file