use source_ss::define::*;
use source_ss::mng;
use source_ss::relay::SourceRelayBuilder;
#[tokio::test]
async fn test_get_relays() {
let (event_tx, _) = tokio::sync::mpsc::unbounded_channel();
let config = SSConfig::default();
let mng = mng::run(event_tx, &config).unwrap();
let ctrl = mng.ctrl();
let relays = ctrl.get_relays(()).await.unwrap();
assert!(relays.is_empty(), "relays should be empty initially");
let relay = SourceRelayBuilder::default()
.source_id("source_1")
.relay_id("relay_1")
.scheme(SSScheme::Es)
.relay_ip("127.0.0.1")
.build()
.unwrap();
ctrl.add_relay_source(relay).await.unwrap();
let relays = ctrl.get_relays(()).await.unwrap();
assert_eq!(relays.len(), 1);
assert!(relays.contains_key("relay_1"));
let relay = SourceRelayBuilder::default()
.source_id("source_2")
.relay_id("relay_2")
.scheme(SSScheme::Es)
.relay_ip("127.0.0.1")
.build()
.unwrap();
ctrl.add_relay_source(relay).await.unwrap();
let relays = ctrl.get_relays(()).await.unwrap();
assert_eq!(relays.len(), 2);
assert!(relays.contains_key("relay_1"));
assert!(relays.contains_key("relay_2"));
let sub_args = SubscribeArgsBuilder::default()
.relay_id("relay_1")
.consum(true)
.build()
.unwrap();
let _subject = ctrl.subscribe(sub_args).await.unwrap();
let relays = ctrl.get_relays(()).await.unwrap();
assert_eq!(relays.len(), 1);
assert!(!relays.contains_key("relay_1"));
assert!(relays.contains_key("relay_2"));
let sub_args = SubscribeArgsBuilder::default()
.relay_id("relay_2")
.consum(true)
.build()
.unwrap();
let _subject = ctrl.subscribe(sub_args).await.unwrap();
let relays = ctrl.get_relays(()).await.unwrap();
assert!(relays.is_empty(), "relays should be empty after all consumed");
}