22
33use anyhow:: Result ;
44use ctor:: dtor;
5- use integration_test_runner:: logs_asserter:: { read_logs_from_json, LogsAsserter } ;
65use integration_test_runner:: test_utils;
76use opentelemetry_otlp:: LogExporter ;
87use opentelemetry_sdk:: logs:: LoggerProvider ;
98use opentelemetry_sdk:: { logs as sdklogs, Resource } ;
109use std:: fs:: File ;
11- use std:: os:: unix:: fs:: MetadataExt ;
12- use tracing:: info;
10+ use std:: io:: Read ;
1311
1412fn init_logs ( ) -> Result < sdklogs:: LoggerProvider > {
1513 let exporter_builder = LogExporter :: builder ( ) ;
@@ -68,43 +66,46 @@ mod logtests {
6866 Ok ( ( ) )
6967 }
7068
71- // #[ignore = "TODO: [Fix Me] Failing on CI. Needs to be investigated and resolved."]
7269 #[ tokio:: test( flavor = "multi_thread" , worker_threads = 4 ) ]
7370 #[ cfg( any( feature = "tonic-client" , feature = "reqwest-blocking-client" ) ) ]
7471 pub async fn logs_batch ( ) -> Result < ( ) > {
7572 use integration_test_runner:: test_utils;
7673 use opentelemetry_appender_tracing:: layer;
7774 use tracing:: info;
7875 use tracing_subscriber:: layer:: SubscriberExt ;
76+ use uuid:: Uuid ;
7977
8078 use crate :: { assert_logs_results, init_logs} ;
8179 test_utils:: start_collector_container ( ) . await ?;
8280
8381 let logger_provider = init_logs ( ) . unwrap ( ) ;
8482 let layer = layer:: OpenTelemetryTracingBridge :: new ( & logger_provider) ;
8583 let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
84+ // generate a random uuid and store it to expected guid
85+ let expected_uuid = Uuid :: new_v4 ( ) . to_string ( ) ;
8686 {
8787 let _guard = tracing:: subscriber:: set_default ( subscriber) ;
88- info ! ( target: "my-target" , "hello from {}. My price is {}." , "banana" , 2.99 ) ;
88+ info ! ( target: "my-target" , uuid = expected_uuid , "hello from {}. My price is {}." , "banana" , 2.99 ) ;
8989 }
9090
9191 let _ = logger_provider. shutdown ( ) ;
9292
93- tokio:: time:: sleep ( Duration :: from_secs ( 10 ) ) . await ;
93+ tokio:: time:: sleep ( Duration :: from_secs ( 5 ) ) . await ;
9494
95- assert_logs_results ( test_utils:: LOGS_FILE , "expected/logs.json" ) ?;
95+ assert_logs_results ( test_utils:: LOGS_FILE , expected_uuid . as_str ( ) ) ?;
9696
9797 Ok ( ( ) )
9898 }
9999
100- //#[ignore = "TODO: [Fix Me] Failing on CI. Needs to be investigated and resolved."]
101100 #[ test]
102101 #[ cfg( any( feature = "tonic-client" , feature = "reqwest-blocking-client" ) ) ]
103102 pub fn logs_batch_non_tokio_main ( ) -> Result < ( ) > {
104103 // Initialize the logger provider inside a tokio runtime
105104 // as this allows tonic client to capture the runtime,
106105 // but actual export occurs from the dedicated std::thread
107106 // created by BatchLogProcessor.
107+
108+ use uuid:: Uuid ;
108109 let rt = tokio:: runtime:: Runtime :: new ( ) ?;
109110 let logger_provider = rt. block_on ( async {
110111 // While we're here setup our collector container too, as this needs tokio to run
@@ -115,30 +116,27 @@ mod logtests {
115116 info ! ( "LoggerProvider created" ) ;
116117 let layer = OpenTelemetryTracingBridge :: new ( & logger_provider) ;
117118 let subscriber = tracing_subscriber:: registry ( ) . with ( layer) ;
119+ // generate a random uuid and store it to expected guid
120+ let expected_uuid = Uuid :: new_v4 ( ) . to_string ( ) ;
118121 {
119122 let _guard = tracing:: subscriber:: set_default ( subscriber) ;
120- info ! ( target: "my-target" , "hello from {}. My price is {}." , "banana" , 2.99 ) ;
123+ info ! ( target: "my-target" , uuid = expected_uuid , "hello from {}. My price is {}." , "banana" , 2.99 ) ;
121124 }
122125 let _ = logger_provider. shutdown ( ) ;
123- info ! ( "Sleeping for 10 seconds to allow collector to store logs to file" ) ;
124- std:: thread:: sleep ( Duration :: from_secs ( 10 ) ) ;
125- assert_logs_results ( test_utils:: LOGS_FILE , "expected/logs.json" ) ?;
126+ info ! ( "Sleeping for 5 seconds to allow collector to store logs to file" ) ;
127+ std:: thread:: sleep ( Duration :: from_secs ( 5 ) ) ;
128+ assert_logs_results ( test_utils:: LOGS_FILE , expected_uuid . as_str ( ) ) ?;
126129
127130 Ok ( ( ) )
128131 }
129132}
130133
131- pub fn assert_logs_results ( result : & str , expected : & str ) -> Result < ( ) > {
132- info ! ( "Reading expected logs" ) ;
133- let left = read_logs_from_json ( File :: open ( expected) ?) ?;
134- info ! ( "Reading actual logs" ) ;
135- let right = read_logs_from_json ( File :: open ( result) ?) ?;
136-
137- info ! ( "Checking actual logs file size" ) ;
138- assert ! ( File :: open( result) . unwrap( ) . metadata( ) . unwrap( ) . size( ) > 0 ) ;
139-
140- LogsAsserter :: new ( left, right) . assert ( ) ;
141-
134+ pub fn assert_logs_results ( result : & str , expected_content : & str ) -> Result < ( ) > {
135+ let file = File :: open ( result) ?;
136+ let mut contents = String :: new ( ) ;
137+ let mut reader = std:: io:: BufReader :: new ( & file) ;
138+ reader. read_to_string ( & mut contents) ?;
139+ assert ! ( contents. contains( expected_content) ) ;
142140 Ok ( ( ) )
143141}
144142
0 commit comments