Skip to content

Commit 88023d9

Browse files
authored
Add tests for periodic reader from various RT combinations (#2147)
These tests should help with testing #2142
1 parent c8136d9 commit 88023d9

File tree

1 file changed

+60
-21
lines changed

1 file changed

+60
-21
lines changed

opentelemetry-sdk/src/metrics/periodic_reader.rs

Lines changed: 60 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -381,29 +381,41 @@ mod tests {
381381
use std::sync::mpsc;
382382

383383
#[test]
384-
fn collection_triggered_by_interval() {
385-
// Arrange
386-
let interval = std::time::Duration::from_millis(1);
387-
let exporter = InMemoryMetricsExporter::default();
388-
let reader = PeriodicReader::builder(exporter.clone(), runtime::TokioCurrentThread)
389-
.with_interval(interval)
390-
.build();
391-
let (sender, receiver) = mpsc::channel();
384+
fn collection_triggered_by_interval_tokio_current() {
385+
collection_triggered_by_interval_helper(runtime::TokioCurrentThread);
386+
}
392387

393-
// Act
394-
let meter_provider = SdkMeterProvider::builder().with_reader(reader).build();
395-
let meter = meter_provider.meter("test");
396-
let _counter = meter
397-
.u64_observable_counter("testcounter")
398-
.with_callback(move |_| {
399-
sender.send(()).expect("channel should still be open");
400-
})
401-
.init();
388+
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
389+
async fn collection_triggered_by_interval_from_tokio_multi_one_thread_on_runtime_tokio() {
390+
collection_triggered_by_interval_helper(runtime::Tokio);
391+
}
402392

403-
// Assert
404-
receiver
405-
.recv()
406-
.expect("message should be available in channel, indicating a collection occurred");
393+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
394+
async fn collection_triggered_by_interval_from_tokio_multi_two_thread_on_runtime_tokio() {
395+
collection_triggered_by_interval_helper(runtime::Tokio);
396+
}
397+
398+
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
399+
async fn collection_triggered_by_interval_from_tokio_multi_one_thread_on_runtime_tokio_current()
400+
{
401+
collection_triggered_by_interval_helper(runtime::TokioCurrentThread);
402+
}
403+
404+
#[tokio::test(flavor = "multi_thread", worker_threads = 2)]
405+
async fn collection_triggered_by_interval_from_tokio_multi_two_thread_on_runtime_tokio_current()
406+
{
407+
collection_triggered_by_interval_helper(runtime::TokioCurrentThread);
408+
}
409+
410+
#[tokio::test(flavor = "current_thread")]
411+
#[ignore = "See issue https://github.com/open-telemetry/opentelemetry-rust/issues/2056"]
412+
async fn collection_triggered_by_interval_from_tokio_current_on_runtime_tokio() {
413+
collection_triggered_by_interval_helper(runtime::Tokio);
414+
}
415+
416+
#[tokio::test(flavor = "current_thread")]
417+
async fn collection_triggered_by_interval_from_tokio_current_on_runtime_tokio_current() {
418+
collection_triggered_by_interval_helper(runtime::TokioCurrentThread);
407419
}
408420

409421
#[test]
@@ -424,4 +436,31 @@ mod tests {
424436
matches!(result.unwrap_err(), MetricsError::Other(err) if err == "reader is not registered")
425437
);
426438
}
439+
440+
fn collection_triggered_by_interval_helper<RT>(runtime: RT)
441+
where
442+
RT: crate::runtime::Runtime,
443+
{
444+
let interval = std::time::Duration::from_millis(1);
445+
let exporter = InMemoryMetricsExporter::default();
446+
let reader = PeriodicReader::builder(exporter.clone(), runtime)
447+
.with_interval(interval)
448+
.build();
449+
let (sender, receiver) = mpsc::channel();
450+
451+
// Act
452+
let meter_provider = SdkMeterProvider::builder().with_reader(reader).build();
453+
let meter = meter_provider.meter("test");
454+
let _counter = meter
455+
.u64_observable_counter("testcounter")
456+
.with_callback(move |_| {
457+
sender.send(()).expect("channel should still be open");
458+
})
459+
.init();
460+
461+
// Assert
462+
receiver
463+
.recv()
464+
.expect("message should be available in channel, indicating a collection occurred");
465+
}
427466
}

0 commit comments

Comments
 (0)