@@ -11,7 +11,6 @@ use std::net::SocketAddr;
1111use std:: time:: { Duration , Instant } ;
1212
1313use futures:: StreamExt ;
14- use opentelemetry:: trace:: TracerProvider ;
1514use opentelemetry_otlp:: { LogExporter , SpanExporter , WithExportConfig } ;
1615use opentelemetry_proto:: tonic:: collector:: logs:: v1:: logs_service_server:: LogsServiceServer ;
1716use opentelemetry_proto:: tonic:: collector:: trace:: v1:: trace_service_server:: TraceServiceServer ;
@@ -88,14 +87,16 @@ impl FakeCollectorServer {
8887
8988async fn recv_many < T > ( rx : & mut Receiver < T > , at_least : usize , timeout : Duration ) -> Vec < T > {
9089 let deadline = Instant :: now ( ) ;
91- let pause = ( timeout / 5 ) . min ( Duration :: from_millis ( 500 ) ) ;
90+ let pause = ( timeout / 10 ) . min ( Duration :: from_millis ( 10 ) ) ;
9291 while rx. len ( ) < at_least && deadline. elapsed ( ) < timeout {
9392 tokio:: time:: sleep ( pause) . await ;
9493 }
9594 std:: iter:: from_fn ( || rx. try_recv ( ) . ok ( ) ) . collect :: < Vec < _ > > ( )
9695}
9796
98- pub async fn setup_tracer ( fake_server : & FakeCollectorServer ) -> opentelemetry_sdk:: trace:: Tracer {
97+ pub async fn setup_tracer_provider (
98+ fake_server : & FakeCollectorServer ,
99+ ) -> opentelemetry_sdk:: trace:: TracerProvider {
99100 // if the environment variable is set (in test or in caller), `with_endpoint` value is ignored
100101 std:: env:: remove_var ( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" ) ;
101102
@@ -109,10 +110,9 @@ pub async fn setup_tracer(fake_server: &FakeCollectorServer) -> opentelemetry_sd
109110 opentelemetry_sdk:: runtime:: Tokio ,
110111 )
111112 . build ( )
112- . tracer ( "" )
113113}
114114
115- pub async fn setup_logger (
115+ pub async fn setup_logger_provider (
116116 fake_server : & FakeCollectorServer ,
117117) -> opentelemetry_sdk:: logs:: LoggerProvider {
118118 opentelemetry_sdk:: logs:: LoggerProvider :: builder ( )
@@ -131,16 +131,17 @@ pub async fn setup_logger(
131131mod tests {
132132 use super :: * ;
133133
134- use opentelemetry:: global:: shutdown_tracer_provider;
135134 use opentelemetry:: logs:: { LogRecord , Logger , LoggerProvider , Severity } ;
135+ use opentelemetry:: trace:: TracerProvider ;
136136 use opentelemetry:: trace:: { Span , SpanKind , Tracer } ;
137137
138138 #[ tokio:: test( flavor = "multi_thread" ) ]
139139 async fn test_fake_tracer_and_collector ( ) {
140140 let mut fake_collector = FakeCollectorServer :: start ( )
141141 . await
142142 . expect ( "fake collector setup and started" ) ;
143- let tracer = setup_tracer ( & fake_collector) . await ;
143+ let tracer_provider = setup_tracer_provider ( & fake_collector) . await ;
144+ let tracer = tracer_provider. tracer ( "test" ) ;
144145
145146 debug ! ( "Sending span..." ) ;
146147 let mut span = tracer
@@ -149,7 +150,12 @@ mod tests {
149150 . start ( & tracer) ;
150151 span. add_event ( "my-test-event" , vec ! [ ] ) ;
151152 span. end ( ) ;
152- shutdown_tracer_provider ( ) ;
153+
154+ let _ = tracer_provider. force_flush ( ) ;
155+ tracer_provider
156+ . shutdown ( )
157+ . expect ( "no error during shutdown" ) ;
158+ drop ( tracer_provider) ;
153159
154160 let otel_spans = fake_collector
155161 . exported_spans ( 1 , Duration :: from_secs ( 20 ) )
@@ -184,7 +190,7 @@ mod tests {
184190 . await
185191 . expect ( "fake collector setup and started" ) ;
186192
187- let logger_provider = setup_logger ( & fake_collector) . await ;
193+ let logger_provider = setup_logger_provider ( & fake_collector) . await ;
188194 let logger = logger_provider. logger ( "test" ) ;
189195 let mut record = logger. create_log_record ( ) ;
190196 record. set_body ( "This is information" . into ( ) ) ;
0 commit comments