Skip to content

Commit 0fc0764

Browse files
authored
chore: Test sync exporters (open-telemetry#2455)
1 parent acf16ed commit 0fc0764

File tree

7 files changed

+62
-17
lines changed

7 files changed

+62
-17
lines changed

examples/tracing-grpc/src/client.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ fn init_tracer() -> sdktrace::TracerProvider {
2222

2323
struct MetadataMap<'a>(&'a mut tonic::metadata::MetadataMap);
2424

25-
impl<'a> Injector for MetadataMap<'a> {
25+
impl Injector for MetadataMap<'_> {
2626
/// Set a key and value in the MetadataMap. Does nothing if the key or value are not valid inputs
2727
fn set(&mut self, key: &str, value: String) {
2828
if let Ok(key) = tonic::metadata::MetadataKey::from_bytes(key.as_bytes()) {

examples/tracing-grpc/src/server.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ pub mod hello_world {
2929

3030
struct MetadataMap<'a>(&'a tonic::metadata::MetadataMap);
3131

32-
impl<'a> Extractor for MetadataMap<'a> {
32+
impl Extractor for MetadataMap<'_> {
3333
/// Get a value for a key from the MetadataMap. If the value can't be converted to &str, returns None
3434
fn get(&self, key: &str) -> Option<&str> {
3535
self.0.get(key).and_then(|metadata| metadata.to_str().ok())

opentelemetry-appender-log/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ mod any_value {
239239
pub(crate) fn serialize(value: log::kv::Value) -> Option<AnyValue> {
240240
struct ValueVisitor(Option<AnyValue>);
241241

242-
impl<'kvs> log::kv::VisitValue<'kvs> for ValueVisitor {
242+
impl log::kv::VisitValue<'_> for ValueVisitor {
243243
fn visit_any(&mut self, value: log::kv::Value) -> Result<(), log::kv::Error> {
244244
self.0 = Some(AnyValue::String(StringValue::from(value.to_string())));
245245

opentelemetry-otlp/tests/integration_test/src/logs_asserter.rs

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use anyhow::Result;
12
use opentelemetry_proto::tonic::logs::v1::{LogRecord, LogsData, ResourceLogs};
23
use std::fs::File;
34

@@ -96,9 +97,9 @@ impl std::fmt::Debug for LogRecordWrapper {
9697
}
9798

9899
// read a file contains ResourceSpans in json format
99-
pub fn read_logs_from_json(file: File) -> Vec<ResourceLogs> {
100+
pub fn read_logs_from_json(file: File) -> Result<Vec<ResourceLogs>> {
100101
let reader = std::io::BufReader::new(file);
101102

102-
let log_data: LogsData = serde_json::from_reader(reader).unwrap();
103-
log_data.resource_logs
103+
let log_data: LogsData = serde_json::from_reader(reader)?;
104+
Ok(log_data.resource_logs)
104105
}

opentelemetry-otlp/tests/integration_test/tests/logs.rs

+51-8
Original file line numberDiff line numberDiff line change
@@ -38,19 +38,33 @@ fn init_logs() -> Result<sdklogs::LoggerProvider> {
3838
mod logtests {
3939
use super::*;
4040
use integration_test_runner::logs_asserter::{read_logs_from_json, LogsAsserter};
41+
use opentelemetry_appender_tracing::layer::OpenTelemetryTracingBridge;
4142
use std::{fs::File, time::Duration};
43+
use tracing::info;
44+
use tracing_subscriber::layer::SubscriberExt;
45+
4246
#[test]
4347
#[should_panic(expected = "assertion `left == right` failed: body does not match")]
4448
pub fn test_assert_logs_eq_failure() {
45-
let left = read_logs_from_json(File::open("./expected/logs.json").unwrap());
46-
let right = read_logs_from_json(File::open("./expected/failed_logs.json").unwrap());
49+
let left = read_logs_from_json(
50+
File::open("./expected/logs.json").expect("failed to open expected file"),
51+
)
52+
.expect("Failed to read logs from expected file");
53+
54+
let right = read_logs_from_json(
55+
File::open("./expected/failed_logs.json")
56+
.expect("failed to open expected failed log file"),
57+
)
58+
.expect("Failed to read logs from expected failed log file");
4759
LogsAsserter::new(right, left).assert();
4860
}
4961

5062
#[test]
51-
pub fn test_assert_logs_eq() {
52-
let logs = read_logs_from_json(File::open("./expected/logs.json").unwrap());
63+
pub fn test_assert_logs_eq() -> Result<()> {
64+
let logs = read_logs_from_json(File::open("./expected/logs.json")?)?;
5365
LogsAsserter::new(logs.clone(), logs).assert();
66+
67+
Ok(())
5468
}
5569

5670
#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
@@ -84,15 +98,44 @@ mod logtests {
8498

8599
Ok(())
86100
}
101+
102+
#[test]
103+
#[cfg(any(feature = "tonic-client", feature = "reqwest-blocking-client"))]
104+
pub fn logs_batch_non_tokio_main() -> Result<()> {
105+
// Initialize the logger provider inside a tokio runtime
106+
// as this allows tonic client to capture the runtime,
107+
// but actual export occurs from the dedicated std::thread
108+
// created by BatchLogProcessor.
109+
let rt = tokio::runtime::Runtime::new()?;
110+
let logger_provider = rt.block_on(async {
111+
// While we're here setup our collector container too, as this needs tokio to run
112+
test_utils::start_collector_container().await?;
113+
init_logs()
114+
})?;
115+
116+
info!("LoggerProvider created");
117+
let layer = OpenTelemetryTracingBridge::new(&logger_provider);
118+
let subscriber = tracing_subscriber::registry().with(layer);
119+
{
120+
let _guard = tracing::subscriber::set_default(subscriber);
121+
info!(target: "my-target", "hello from {}. My price is {}.", "banana", 2.99);
122+
}
123+
let _ = logger_provider.shutdown();
124+
// tokio::time::sleep(Duration::from_secs(10)).await;
125+
assert_logs_results(test_utils::LOGS_FILE, "expected/logs.json");
126+
127+
Ok(())
128+
}
87129
}
88130

89-
pub fn assert_logs_results(result: &str, expected: &str) {
90-
let left = read_logs_from_json(File::open(expected).unwrap());
91-
let right = read_logs_from_json(File::open(result).unwrap());
131+
pub fn assert_logs_results(result: &str, expected: &str) -> Result<()> {
132+
let left = read_logs_from_json(File::open(expected)?)?;
133+
let right = read_logs_from_json(File::open(result)?)?;
92134

93135
LogsAsserter::new(left, right).assert();
94136

95-
assert!(File::open(result).unwrap().metadata().unwrap().size() > 0)
137+
assert!(File::open(result).unwrap().metadata().unwrap().size() > 0);
138+
Ok(())
96139
}
97140

98141
///

opentelemetry-zipkin/src/exporter/mod.rs

+1
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ pub struct ZipkinPipelineBuilder {
5454
impl Default for ZipkinPipelineBuilder {
5555
fn default() -> Self {
5656
let timeout = env::get_timeout();
57+
5758
ZipkinPipelineBuilder {
5859
#[cfg(feature = "reqwest-blocking-client")]
5960
client: Some(Arc::new(

stress/src/throughput.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -140,8 +140,8 @@ struct UnsafeSlice<'a> {
140140
slice: &'a [UnsafeCell<WorkerStats>],
141141
}
142142

143-
unsafe impl<'a> Send for UnsafeSlice<'a> {}
144-
unsafe impl<'a> Sync for UnsafeSlice<'a> {}
143+
unsafe impl Send for UnsafeSlice<'_> {}
144+
unsafe impl Sync for UnsafeSlice<'_> {}
145145

146146
impl<'a> UnsafeSlice<'a> {
147147
fn new(slice: &'a mut [WorkerStats]) -> Self {
@@ -155,7 +155,7 @@ impl<'a> UnsafeSlice<'a> {
155155
#[inline(always)]
156156
unsafe fn increment(&self, i: usize) {
157157
let value = self.slice[i].get();
158-
(*value).count = (*value).count + 1;
158+
(*value).count += 1;
159159
}
160160

161161
#[inline(always)]

0 commit comments

Comments
 (0)