@@ -11,7 +11,6 @@ use std::net::SocketAddr;
11
11
use std:: time:: { Duration , Instant } ;
12
12
13
13
use futures:: StreamExt ;
14
- use opentelemetry:: trace:: TracerProvider ;
15
14
use opentelemetry_otlp:: { LogExporter , SpanExporter , WithExportConfig } ;
16
15
use opentelemetry_proto:: tonic:: collector:: logs:: v1:: logs_service_server:: LogsServiceServer ;
17
16
use opentelemetry_proto:: tonic:: collector:: trace:: v1:: trace_service_server:: TraceServiceServer ;
@@ -88,14 +87,16 @@ impl FakeCollectorServer {
88
87
89
88
async fn recv_many < T > ( rx : & mut Receiver < T > , at_least : usize , timeout : Duration ) -> Vec < T > {
90
89
let deadline = Instant :: now ( ) ;
91
- let pause = ( timeout / 5 ) . min ( Duration :: from_millis ( 500 ) ) ;
90
+ let pause = ( timeout / 10 ) . min ( Duration :: from_millis ( 10 ) ) ;
92
91
while rx. len ( ) < at_least && deadline. elapsed ( ) < timeout {
93
92
tokio:: time:: sleep ( pause) . await ;
94
93
}
95
94
std:: iter:: from_fn ( || rx. try_recv ( ) . ok ( ) ) . collect :: < Vec < _ > > ( )
96
95
}
97
96
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 {
99
100
// if the environment variable is set (in test or in caller), `with_endpoint` value is ignored
100
101
std:: env:: remove_var ( "OTEL_EXPORTER_OTLP_TRACES_ENDPOINT" ) ;
101
102
@@ -109,10 +110,9 @@ pub async fn setup_tracer(fake_server: &FakeCollectorServer) -> opentelemetry_sd
109
110
opentelemetry_sdk:: runtime:: Tokio ,
110
111
)
111
112
. build ( )
112
- . tracer ( "" )
113
113
}
114
114
115
- pub async fn setup_logger (
115
+ pub async fn setup_logger_provider (
116
116
fake_server : & FakeCollectorServer ,
117
117
) -> opentelemetry_sdk:: logs:: LoggerProvider {
118
118
opentelemetry_sdk:: logs:: LoggerProvider :: builder ( )
@@ -131,16 +131,17 @@ pub async fn setup_logger(
131
131
mod tests {
132
132
use super :: * ;
133
133
134
- use opentelemetry:: global:: shutdown_tracer_provider;
135
134
use opentelemetry:: logs:: { LogRecord , Logger , LoggerProvider , Severity } ;
135
+ use opentelemetry:: trace:: TracerProvider ;
136
136
use opentelemetry:: trace:: { Span , SpanKind , Tracer } ;
137
137
138
138
#[ tokio:: test( flavor = "multi_thread" ) ]
139
139
async fn test_fake_tracer_and_collector ( ) {
140
140
let mut fake_collector = FakeCollectorServer :: start ( )
141
141
. await
142
142
. 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" ) ;
144
145
145
146
debug ! ( "Sending span..." ) ;
146
147
let mut span = tracer
@@ -149,7 +150,12 @@ mod tests {
149
150
. start ( & tracer) ;
150
151
span. add_event ( "my-test-event" , vec ! [ ] ) ;
151
152
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) ;
153
159
154
160
let otel_spans = fake_collector
155
161
. exported_spans ( 1 , Duration :: from_secs ( 20 ) )
@@ -184,7 +190,7 @@ mod tests {
184
190
. await
185
191
. expect ( "fake collector setup and started" ) ;
186
192
187
- let logger_provider = setup_logger ( & fake_collector) . await ;
193
+ let logger_provider = setup_logger_provider ( & fake_collector) . await ;
188
194
let logger = logger_provider. logger ( "test" ) ;
189
195
let mut record = logger. create_log_record ( ) ;
190
196
record. set_body ( "This is information" . into ( ) ) ;
0 commit comments