Skip to content

Commit 1985402

Browse files
authored
test: fix MockLogExporter (#1854)
1 parent 54b807f commit 1985402

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

opentelemetry-sdk/src/logs/log_processor.rs

+15-8
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ mod tests {
536536

537537
#[derive(Debug, Clone)]
538538
struct MockLogExporter {
539-
resource: Arc<Option<Resource>>,
539+
resource: Arc<Mutex<Option<Resource>>>,
540540
}
541541

542542
#[async_trait]
@@ -548,15 +548,19 @@ mod tests {
548548
fn shutdown(&mut self) {}
549549

550550
fn set_resource(&mut self, resource: &Resource) {
551-
let res = Arc::make_mut(&mut self.resource);
552-
*res = Some(resource.clone());
551+
self.resource
552+
.lock()
553+
.map(|mut res_opt| {
554+
res_opt.replace(resource.clone());
555+
})
556+
.expect("mock log exporter shouldn't error when setting resource");
553557
}
554558
}
555559

556560
// Implementation specific to the MockLogExporter, not part of the LogExporter trait
557561
impl MockLogExporter {
558562
fn get_resource(&self) -> Option<Resource> {
559-
(*self.resource).clone()
563+
(*self.resource).lock().unwrap().clone()
560564
}
561565
}
562566

@@ -713,7 +717,7 @@ mod tests {
713717
#[test]
714718
fn test_set_resource_simple_processor() {
715719
let exporter = MockLogExporter {
716-
resource: Arc::new(Some(Resource::default())),
720+
resource: Arc::new(Mutex::new(None)),
717721
};
718722
let processor = SimpleLogProcessor::new(Box::new(exporter.clone()));
719723
let _ = LoggerProvider::builder()
@@ -723,15 +727,16 @@ mod tests {
723727
KeyValue::new("k2", "v3"),
724728
KeyValue::new("k3", "v3"),
725729
KeyValue::new("k4", "v4"),
730+
KeyValue::new("k5", "v5"),
726731
]))
727732
.build();
728-
assert_eq!(exporter.get_resource().unwrap().into_iter().count(), 4);
733+
assert_eq!(exporter.get_resource().unwrap().into_iter().count(), 5);
729734
}
730735

731736
#[tokio::test(flavor = "multi_thread", worker_threads = 1)]
732737
async fn test_set_resource_batch_processor() {
733738
let exporter = MockLogExporter {
734-
resource: Arc::new(Some(Resource::default())),
739+
resource: Arc::new(Mutex::new(None)),
735740
};
736741
let processor = BatchLogProcessor::new(
737742
Box::new(exporter.clone()),
@@ -745,9 +750,11 @@ mod tests {
745750
KeyValue::new("k2", "v3"),
746751
KeyValue::new("k3", "v3"),
747752
KeyValue::new("k4", "v4"),
753+
KeyValue::new("k5", "v5"),
748754
]))
749755
.build();
750-
assert_eq!(exporter.get_resource().unwrap().into_iter().count(), 4);
756+
tokio::time::sleep(Duration::from_secs(2)).await; // set resource in batch span processor is not blocking. Should we make it blocking?
757+
assert_eq!(exporter.get_resource().unwrap().into_iter().count(), 5);
751758
let _ = provider.shutdown();
752759
}
753760

0 commit comments

Comments
 (0)