@@ -536,7 +536,7 @@ mod tests {
536
536
537
537
#[ derive( Debug , Clone ) ]
538
538
struct MockLogExporter {
539
- resource : Arc < Option < Resource > > ,
539
+ resource : Arc < Mutex < Option < Resource > > > ,
540
540
}
541
541
542
542
#[ async_trait]
@@ -548,15 +548,19 @@ mod tests {
548
548
fn shutdown ( & mut self ) { }
549
549
550
550
fn set_resource ( & mut self , resource : & Resource ) {
551
- let res = Arc :: make_mut ( & mut self . resource ) ;
552
- * res = Some ( resource. clone ( ) ) ;
551
+ self . resource
552
+ . lock ( )
553
+ . map ( |mut res_opt| {
554
+ res_opt. replace ( resource. clone ( ) ) ;
555
+ } )
556
+ . expect ( "mock log exporter shouldn't error when setting resource" ) ;
553
557
}
554
558
}
555
559
556
560
// Implementation specific to the MockLogExporter, not part of the LogExporter trait
557
561
impl MockLogExporter {
558
562
fn get_resource ( & self ) -> Option < Resource > {
559
- ( * self . resource ) . clone ( )
563
+ ( * self . resource ) . lock ( ) . unwrap ( ) . clone ( )
560
564
}
561
565
}
562
566
@@ -713,7 +717,7 @@ mod tests {
713
717
#[ test]
714
718
fn test_set_resource_simple_processor ( ) {
715
719
let exporter = MockLogExporter {
716
- resource : Arc :: new ( Some ( Resource :: default ( ) ) ) ,
720
+ resource : Arc :: new ( Mutex :: new ( None ) ) ,
717
721
} ;
718
722
let processor = SimpleLogProcessor :: new ( Box :: new ( exporter. clone ( ) ) ) ;
719
723
let _ = LoggerProvider :: builder ( )
@@ -723,15 +727,16 @@ mod tests {
723
727
KeyValue :: new( "k2" , "v3" ) ,
724
728
KeyValue :: new( "k3" , "v3" ) ,
725
729
KeyValue :: new( "k4" , "v4" ) ,
730
+ KeyValue :: new( "k5" , "v5" ) ,
726
731
] ) )
727
732
. build ( ) ;
728
- assert_eq ! ( exporter. get_resource( ) . unwrap( ) . into_iter( ) . count( ) , 4 ) ;
733
+ assert_eq ! ( exporter. get_resource( ) . unwrap( ) . into_iter( ) . count( ) , 5 ) ;
729
734
}
730
735
731
736
#[ tokio:: test( flavor = "multi_thread" , worker_threads = 1 ) ]
732
737
async fn test_set_resource_batch_processor ( ) {
733
738
let exporter = MockLogExporter {
734
- resource : Arc :: new ( Some ( Resource :: default ( ) ) ) ,
739
+ resource : Arc :: new ( Mutex :: new ( None ) ) ,
735
740
} ;
736
741
let processor = BatchLogProcessor :: new (
737
742
Box :: new ( exporter. clone ( ) ) ,
@@ -745,9 +750,11 @@ mod tests {
745
750
KeyValue :: new( "k2" , "v3" ) ,
746
751
KeyValue :: new( "k3" , "v3" ) ,
747
752
KeyValue :: new( "k4" , "v4" ) ,
753
+ KeyValue :: new( "k5" , "v5" ) ,
748
754
] ) )
749
755
. build ( ) ;
750
- assert_eq ! ( exporter. get_resource( ) . unwrap( ) . into_iter( ) . count( ) , 4 ) ;
756
+ tokio:: time:: sleep ( Duration :: from_secs ( 2 ) ) . await ; // set resource in batch span processor is not blocking. Should we make it blocking?
757
+ assert_eq ! ( exporter. get_resource( ) . unwrap( ) . into_iter( ) . count( ) , 5 ) ;
751
758
let _ = provider. shutdown ( ) ;
752
759
}
753
760
0 commit comments