Skip to content

Commit dace0ca

Browse files
authored
Add simple processor to integration test (#2522)
1 parent 27410b0 commit dace0ca

File tree

1 file changed

+88
-6
lines changed
  • opentelemetry-otlp/tests/integration_test/tests

1 file changed

+88
-6
lines changed

opentelemetry-otlp/tests/integration_test/tests/logs.rs

+88-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use opentelemetry_sdk::{logs as sdklogs, Resource};
99
use std::fs::File;
1010
use std::io::Read;
1111

12-
fn init_logs() -> Result<sdklogs::LoggerProvider> {
12+
fn init_logs(is_simple: bool) -> Result<sdklogs::LoggerProvider> {
1313
let exporter_builder = LogExporter::builder();
1414
#[cfg(feature = "tonic-client")]
1515
let exporter_builder = exporter_builder.with_tonic();
@@ -23,14 +23,22 @@ fn init_logs() -> Result<sdklogs::LoggerProvider> {
2323

2424
let exporter = exporter_builder.build()?;
2525

26-
Ok(LoggerProvider::builder()
27-
.with_batch_exporter(exporter)
26+
let mut logger_provider_builder = LoggerProvider::builder();
27+
if is_simple {
28+
logger_provider_builder = logger_provider_builder.with_simple_exporter(exporter)
29+
} else {
30+
logger_provider_builder = logger_provider_builder.with_batch_exporter(exporter)
31+
};
32+
33+
let logger_provider = logger_provider_builder
2834
.with_resource(
2935
Resource::builder_empty()
3036
.with_service_name("logs-integration-test")
3137
.build(),
3238
)
33-
.build())
39+
.build();
40+
41+
Ok(logger_provider)
3442
}
3543

3644
#[cfg(test)]
@@ -99,7 +107,7 @@ mod logtests {
99107
use crate::{assert_logs_results, init_logs};
100108
test_utils::start_collector_container().await?;
101109

102-
let logger_provider = init_logs().unwrap();
110+
let logger_provider = init_logs(false).unwrap();
103111
let layer = OpenTelemetryTracingBridge::new(&logger_provider);
104112
let subscriber = tracing_subscriber::registry().with(layer);
105113
// generate a random uuid and store it to expected guid
@@ -115,6 +123,49 @@ mod logtests {
115123
Ok(())
116124
}
117125

126+
#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
127+
#[cfg(any(feature = "tonic-client"))]
128+
pub async fn logs_simple_tokio_multi_thread() -> Result<()> {
129+
logs_simple_tokio_helper().await
130+
}
131+
132+
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
133+
#[cfg(any(feature = "tonic-client"))]
134+
pub async fn logs_simple_tokio_multi_with_one_worker() -> Result<()> {
135+
logs_simple_tokio_helper().await
136+
}
137+
138+
// Ignored, to be investigated
139+
#[ignore]
140+
#[tokio::test(flavor = "current_thread")]
141+
#[cfg(any(feature = "tonic-client"))]
142+
pub async fn logs_simple_tokio_current() -> Result<()> {
143+
logs_simple_tokio_helper().await
144+
}
145+
146+
async fn logs_simple_tokio_helper() -> Result<()> {
147+
use crate::{assert_logs_results, init_logs};
148+
test_utils::start_collector_container().await?;
149+
150+
let logger_provider = init_logs(true).unwrap();
151+
let layer = OpenTelemetryTracingBridge::new(&logger_provider);
152+
let subscriber = tracing_subscriber::registry().with(layer);
153+
info!("Tracing initialized");
154+
// generate a random uuid and store it to expected guid
155+
let expected_uuid = Uuid::new_v4().to_string();
156+
{
157+
let _guard = tracing::subscriber::set_default(subscriber);
158+
info!("Tracing subscriber initialized");
159+
info!(target: "my-target", uuid = expected_uuid, "hello from {}. My price is {}.", "banana", 2.99);
160+
info!("Log emitted");
161+
}
162+
163+
let _ = logger_provider.shutdown();
164+
tokio::time::sleep(Duration::from_secs(5)).await;
165+
assert_logs_results(test_utils::LOGS_FILE, expected_uuid.as_str())?;
166+
Ok(())
167+
}
168+
118169
#[test]
119170
#[cfg(any(feature = "tonic-client", feature = "reqwest-blocking-client"))]
120171
pub fn logs_batch_non_tokio_main() -> Result<()> {
@@ -130,7 +181,38 @@ mod logtests {
130181
let logger_provider = rt.block_on(async {
131182
// While we're here setup our collector container too, as this needs tokio to run
132183
test_utils::start_collector_container().await?;
133-
init_logs()
184+
init_logs(false)
185+
})?;
186+
let layer = layer::OpenTelemetryTracingBridge::new(&logger_provider);
187+
let subscriber = tracing_subscriber::registry().with(layer);
188+
// generate a random uuid and store it to expected guid
189+
let expected_uuid = Uuid::new_v4().to_string();
190+
{
191+
let _guard = tracing::subscriber::set_default(subscriber);
192+
info!(target: "my-target", uuid = expected_uuid, "hello from {}. My price is {}.", "banana", 2.99);
193+
}
194+
195+
let _ = logger_provider.shutdown();
196+
std::thread::sleep(Duration::from_secs(5));
197+
assert_logs_results(test_utils::LOGS_FILE, expected_uuid.as_str())?;
198+
Ok(())
199+
}
200+
201+
#[test]
202+
#[cfg(any(feature = "tonic-client", feature = "reqwest-blocking-client"))]
203+
pub fn logs_simple_non_tokio_main() -> Result<()> {
204+
logs_simple_non_tokio_helper()
205+
}
206+
207+
fn logs_simple_non_tokio_helper() -> Result<()> {
208+
// Initialize the logger provider inside a tokio runtime
209+
// as this allows tonic client to capture the runtime,
210+
// but actual export occurs from the main non-tokio thread.
211+
let rt = tokio::runtime::Runtime::new()?;
212+
let logger_provider = rt.block_on(async {
213+
// While we're here setup our collector container too, as this needs tokio to run
214+
test_utils::start_collector_container().await?;
215+
init_logs(true)
134216
})?;
135217
let layer = layer::OpenTelemetryTracingBridge::new(&logger_provider);
136218
let subscriber = tracing_subscriber::registry().with(layer);

0 commit comments

Comments
 (0)