From 5b69a3a7c0eae8715224087a6af08af8f351e825 Mon Sep 17 00:00:00 2001 From: Gabriel Kaszewski Date: Mon, 4 May 2026 12:34:29 +0200 Subject: [PATCH] test(event-publisher): fix flaky sleep synchronization in EventWorker tests --- crates/adapters/event-publisher/src/lib.rs | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/crates/adapters/event-publisher/src/lib.rs b/crates/adapters/event-publisher/src/lib.rs index e173503..a4122f3 100644 --- a/crates/adapters/event-publisher/src/lib.rs +++ b/crates/adapters/event-publisher/src/lib.rs @@ -99,7 +99,6 @@ pub fn create_event_channel( mod tests { use super::*; use std::sync::{Arc, Mutex}; - use async_trait::async_trait; use domain::{ errors::DomainError, events::DomainEvent, @@ -129,14 +128,15 @@ mod tests { let config = EventPublisherConfig { channel_buffer: 8 }; let (publisher, worker) = create_event_channel(config, vec![Box::new(handler)]); - tokio::spawn(worker.run()); + let handle = tokio::spawn(worker.run()); let event = DomainEvent::MovieDiscovered { movie_id: MovieId::generate(), external_metadata_id: ExternalMetadataId::new("tt1234567".into()).unwrap(), }; publisher.publish(&event).await.unwrap(); - tokio::time::sleep(std::time::Duration::from_millis(50)).await; + drop(publisher); + handle.await.unwrap(); assert_eq!(*calls.lock().unwrap(), vec!["movie_discovered"]); } @@ -153,14 +153,15 @@ mod tests { vec![Box::new(handler1), Box::new(handler2)], ); - tokio::spawn(worker.run()); + let handle = tokio::spawn(worker.run()); let event = DomainEvent::MovieDiscovered { movie_id: MovieId::generate(), external_metadata_id: ExternalMetadataId::new("tt9999999".into()).unwrap(), }; publisher.publish(&event).await.unwrap(); - tokio::time::sleep(std::time::Duration::from_millis(50)).await; + drop(publisher); + handle.await.unwrap(); assert_eq!(calls1.lock().unwrap().len(), 1); assert_eq!(calls2.lock().unwrap().len(), 1); @@ -184,14 +185,15 @@ mod tests { vec![Box::new(FailingHandler), Box::new(good)], ); - tokio::spawn(worker.run()); + let handle = tokio::spawn(worker.run()); let event = DomainEvent::MovieDiscovered { movie_id: MovieId::generate(), external_metadata_id: ExternalMetadataId::new("tt0000001".into()).unwrap(), }; publisher.publish(&event).await.unwrap(); - tokio::time::sleep(std::time::Duration::from_millis(50)).await; + drop(publisher); + handle.await.unwrap(); assert_eq!(calls.lock().unwrap().len(), 1); }