Skip to content

Commit c9c3d8e

Browse files
committed
simpler test validation
1 parent cd652b0 commit c9c3d8e

File tree

5 files changed

+27
-34
lines changed

5 files changed

+27
-34
lines changed

.cspell.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"shoppingcart",
6565
"struct",
6666
"Tescher",
67+
"testcontainers",
6768
"testresults",
6869
"thiserror",
6970
"tracerprovider",

opentelemetry-otlp/tests/integration_test/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ testcontainers = { version = "0.23.1", features = ["http_wait"]}
1414
once_cell.workspace = true
1515
anyhow = "1.0.94"
1616
ctor = "0.2.9"
17+
uuid = { version = "1.3", features = ["v4"] }
1718
tracing-subscriber = { workspace = true, features = ["env-filter","registry", "std", "fmt"] }
1819
tracing = {workspace = true}
1920

opentelemetry-otlp/tests/integration_test/src/logs_asserter.rs

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
use anyhow::Result;
22
use opentelemetry_proto::tonic::logs::v1::{LogRecord, LogsData, ResourceLogs};
3-
use std::{fs::File, io::Read};
4-
use tracing::info;
3+
use std::fs::File;
54

65
// Given two ResourceLogs, assert that they are equal except for the timestamps
76
pub struct LogsAsserter {
@@ -99,12 +98,8 @@ impl std::fmt::Debug for LogRecordWrapper {
9998

10099
// read a file contains ResourceSpans in json format
101100
pub fn read_logs_from_json(file: File) -> Result<Vec<ResourceLogs>> {
102-
// print file contents
103-
let mut contents = String::new();
104-
let mut reader = std::io::BufReader::new(&file);
105-
reader.read_to_string(&mut contents)?;
106-
info!(file_contents = contents);
101+
let reader = std::io::BufReader::new(file);
107102

108-
let log_data: LogsData = serde_json::from_str(&contents)?;
103+
let log_data: LogsData = serde_json::from_reader(reader)?;
109104
Ok(log_data.resource_logs)
110105
}

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

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@
22

33
use anyhow::Result;
44
use ctor::dtor;
5-
use integration_test_runner::logs_asserter::{read_logs_from_json, LogsAsserter};
65
use integration_test_runner::test_utils;
76
use opentelemetry_otlp::LogExporter;
87
use opentelemetry_sdk::logs::LoggerProvider;
98
use opentelemetry_sdk::{logs as sdklogs, Resource};
109
use std::fs::File;
11-
use std::os::unix::fs::MetadataExt;
12-
use tracing::info;
10+
use std::io::Read;
1311

1412
fn 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

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

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ pub fn validate_metrics_against_results(scope_name: &str) -> Result<()> {
191191
#[cfg(test)]
192192
#[cfg(not(feature = "hyper-client"))]
193193
#[cfg(not(feature = "reqwest-client"))]
194-
mod tests {
194+
mod metrictests {
195195

196196
use super::*;
197197
use opentelemetry::metrics::MeterProvider;
@@ -246,7 +246,6 @@ mod tests {
246246
}
247247

248248
#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
249-
// #[ignore] // skip when running unit test
250249
async fn test_histogram() -> Result<()> {
251250
_ = setup_metrics_test().await;
252251
const METER_NAME: &str = "test_histogram_meter";
@@ -263,7 +262,6 @@ mod tests {
263262
}
264263

265264
#[tokio::test(flavor = "multi_thread", worker_threads = 4)]
266-
// #[ignore] // skip when running unit test
267265
async fn test_up_down_counter() -> Result<()> {
268266
_ = setup_metrics_test().await;
269267
const METER_NAME: &str = "test_up_down_meter";

0 commit comments

Comments
 (0)