use std::time::Duration;
use tokio::time::timeout;
use xybrid_sdk::{prelude::*, subscribe_events, OrchestratorEvent};
#[test]
fn test_event_stream_subscription() {
tokio::runtime::Runtime::new().unwrap().block_on(async {
let orchestrator = Orchestrator::new();
let mut event_stream = subscribe_events(&orchestrator);
tokio::time::sleep(Duration::from_millis(100)).await;
let event_bus = orchestrator.event_bus();
event_bus.publish(OrchestratorEvent::StageStart {
stage_name: "test_stage".to_string(),
context: Default::default(),
});
let mut found_stage_start = false;
for _ in 0..5 {
if let Ok(event) = timeout(Duration::from_millis(200), event_stream.recv()).await {
if matches!(
event,
Some(OrchestratorEvent::StageStart { stage_name, .. }) if stage_name == "test_stage"
) {
found_stage_start = true;
break;
}
}
}
assert!(
found_stage_start,
"Did not receive StageStart event for test_stage"
);
});
}
#[test]
fn test_event_stream_try_recv() {
tokio::runtime::Runtime::new().unwrap().block_on(async {
let orchestrator = Orchestrator::new();
let mut event_stream = subscribe_events(&orchestrator);
let _ = event_stream.try_recv();
});
}