@@ -381,29 +381,41 @@ mod tests {
381
381
use std:: sync:: mpsc;
382
382
383
383
#[ 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
+ }
392
387
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
+ }
402
392
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 ) ;
407
419
}
408
420
409
421
#[ test]
@@ -424,4 +436,31 @@ mod tests {
424
436
matches!( result. unwrap_err( ) , MetricsError :: Other ( err) if err == "reader is not registered" )
425
437
) ;
426
438
}
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
+ }
427
466
}
0 commit comments