@@ -392,6 +392,7 @@ impl InstrumentProvider for AggregateInstrumentProvider {
392392#[ cfg( test) ]
393393mod test {
394394 use std:: sync:: Arc ;
395+ use std:: sync:: Weak ;
395396 use std:: sync:: atomic:: AtomicBool ;
396397 use std:: sync:: atomic:: AtomicI64 ;
397398 use std:: time:: Duration ;
@@ -400,20 +401,47 @@ mod test {
400401 use crate :: metrics:: aggregation:: MeterProviderType ;
401402 use crate :: metrics:: filter:: FilterMeterProvider ;
402403 use async_trait:: async_trait;
404+ use opentelemetry:: InstrumentationScope ;
403405 use opentelemetry:: metrics:: MeterProvider ;
404406 use opentelemetry_sdk:: error:: OTelSdkResult ;
405407 use opentelemetry_sdk:: metrics:: ManualReader ;
406408 use opentelemetry_sdk:: metrics:: MeterProviderBuilder ;
407409 use opentelemetry_sdk:: metrics:: PeriodicReader ;
410+ use opentelemetry_sdk:: metrics:: Pipeline ;
408411 use opentelemetry_sdk:: metrics:: Temporality ;
409- use opentelemetry_sdk:: metrics:: data:: Gauge ;
410412 use opentelemetry_sdk:: metrics:: data:: ResourceMetrics ;
411413 use opentelemetry_sdk:: metrics:: exporter:: PushMetricExporter ;
412414 use opentelemetry_sdk:: metrics:: reader:: MetricReader ;
413415
414416 #[ derive( Clone , Debug ) ]
415417 struct SharedReader ( Arc < ManualReader > ) ;
416418
419+ impl MetricReader for SharedReader {
420+ fn register_pipeline ( & self , pipeline : Weak < Pipeline > ) {
421+ self . 0 . register_pipeline ( pipeline)
422+ }
423+
424+ fn collect ( & self , rm : & mut ResourceMetrics ) -> OTelSdkResult {
425+ self . 0 . collect ( rm)
426+ }
427+
428+ fn force_flush ( & self ) -> OTelSdkResult {
429+ self . 0 . force_flush ( )
430+ }
431+
432+ fn shutdown ( & self ) -> OTelSdkResult {
433+ self . 0 . shutdown ( )
434+ }
435+
436+ fn temporality ( & self , _kind : opentelemetry_sdk:: metrics:: InstrumentKind ) -> Temporality {
437+ Temporality :: Cumulative
438+ }
439+
440+ fn shutdown_with_timeout ( & self , _timeout : Duration ) -> OTelSdkResult {
441+ self . shutdown ( )
442+ }
443+ }
444+
417445 #[ test]
418446 fn test_i64_gauge_drop ( ) {
419447 let reader = SharedReader ( Arc :: new ( ManualReader :: builder ( ) . build ( ) ) ) ;
@@ -437,7 +465,7 @@ mod test {
437465 callback_observe_counter. fetch_add ( 1 , std:: sync:: atomic:: Ordering :: SeqCst ) ;
438466 i. observe ( count + 1 , & [ ] )
439467 } )
440- . init ( ) ;
468+ . build ( ) ;
441469
442470 let mut result = ResourceMetrics :: default ( ) ;
443471
@@ -486,7 +514,7 @@ mod test {
486514 callback_observe_counter1. fetch_add ( 1 , std:: sync:: atomic:: Ordering :: SeqCst ) ;
487515 i. observe ( count + 1 , & [ ] )
488516 } )
489- . init ( ) ;
517+ . build ( ) ;
490518
491519 let mut result = ResourceMetrics :: default ( ) ;
492520
@@ -506,7 +534,7 @@ mod test {
506534 callback_observe_counter2. fetch_add ( 1 , std:: sync:: atomic:: Ordering :: SeqCst ) ;
507535 i. observe ( count + 1 , & [ ] )
508536 } )
509- . init ( ) ;
537+ . build ( ) ;
510538
511539 // Fetching metrics will call the observer ONLY on the remaining gauge
512540 reader
@@ -518,39 +546,22 @@ mod test {
518546 }
519547
520548 fn get_gauge_value ( result : & mut ResourceMetrics ) -> i64 {
521- assert_eq ! ( result. scope_metrics( ) . len( ) , 1 ) ;
522- assert_eq ! ( result. scope_metrics( ) . first( ) . unwrap( ) . metrics( ) . len( ) , 1 ) ;
523- assert_eq ! (
524- result
525- . scope_metrics( )
526- . first( )
527- . unwrap( )
528- . metrics
529- . first( )
530- . unwrap( )
531- . data
532- . as_any( )
533- . downcast_ref:: <Gauge <i64 >>( )
534- . unwrap( )
535- . data_points
536- . len( ) ,
537- 1
538- ) ;
539- result
540- . scope_metrics ( )
541- . first ( )
542- . unwrap ( )
543- . metrics
544- . first ( )
545- . unwrap ( )
546- . data
547- . as_any ( )
548- . downcast_ref :: < Gauge < i64 > > ( )
549- . unwrap ( )
550- . data_points
551- . first ( )
552- . unwrap ( )
553- . value
549+ let scope_metrics: Vec < _ > = result. scope_metrics ( ) . collect ( ) ;
550+ assert_eq ! ( scope_metrics. len( ) , 1 ) ;
551+
552+ let metrics: Vec < _ > = scope_metrics. first ( ) . unwrap ( ) . metrics ( ) . collect ( ) ;
553+ assert_eq ! ( metrics. len( ) , 1 ) ;
554+
555+ let metric = metrics. first ( ) . unwrap ( ) ;
556+
557+ match metric. data ( ) {
558+ opentelemetry_sdk:: metrics:: data:: AggregatedMetrics :: F64 ( _metric_data) => panic ! ( "Expected i64 gauge metric" ) ,
559+ opentelemetry_sdk:: metrics:: data:: AggregatedMetrics :: U64 ( _metric_data) => panic ! ( "Expected i64 gauge metric" ) ,
560+ opentelemetry_sdk:: metrics:: data:: AggregatedMetrics :: I64 ( metric_data) => match metric_data {
561+ opentelemetry_sdk:: metrics:: data:: MetricData :: Gauge ( gauge) => gauge. data_points ( ) . next ( ) . unwrap ( ) . value ( ) ,
562+ _ => panic ! ( "Expected gauge metric" )
563+ } ,
564+ }
554565 }
555566
556567 #[ test]
@@ -571,13 +582,13 @@ mod test {
571582 ) ;
572583
573584 let counter = meter_provider
574- . versioned_meter ( "test" , None :: < String > , None :: < String > , None )
585+ . meter_with_scope ( InstrumentationScope :: builder ( "test" ) . build ( ) )
575586 . u64_counter ( "test.counter" )
576- . init ( ) ;
587+ . build ( ) ;
577588 counter. add ( 1 , & [ ] ) ;
578589 let mut resource_metrics = ResourceMetrics :: default ( ) ;
579590 reader. collect ( & mut resource_metrics) . unwrap ( ) ;
580- assert_eq ! ( 1 , resource_metrics. scope_metrics( ) . len ( ) ) ;
591+ assert_eq ! ( 1 , resource_metrics. scope_metrics( ) . count ( ) ) ;
581592 }
582593
583594 struct TestExporter {
@@ -625,9 +636,9 @@ mod test {
625636 fn count ( & self ) {
626637 let counter = self
627638 . meter_provider
628- . versioned_meter ( "test" , None :: < String > , None :: < String > , None )
639+ . meter_with_scope ( InstrumentationScope :: builder ( "test" ) . build ( ) )
629640 . u64_counter ( "test.counter" )
630- . init ( ) ;
641+ . build ( ) ;
631642 counter. add ( 1 , & [ ] ) ;
632643 }
633644 }
@@ -703,7 +714,6 @@ mod test {
703714 shutdown : shutdown. clone ( ) ,
704715 } )
705716 . with_interval ( Duration :: from_millis ( 10 ) )
706- . with_timeout ( Duration :: from_millis ( 10 ) )
707717 . build ( )
708718 }
709719}
0 commit comments