use crate::KevyError;
use super::*;
#[test]
fn anonymous_mem_rejected_for_subscriber() {
let err = Subscriber::connect("mem://").unwrap_err();
assert!(matches!(err, KevyError::Unsupported(_)));
}
#[test]
fn named_mem_resolves_to_embedded() {
let _sub = Subscriber::connect("mem://named-bus-test").unwrap();
}
#[test]
fn open_with_empty_channels_rejected() {
let err = Subscriber::connect_channels("kevy://127.0.0.1:1", &[]).unwrap_err();
assert!(matches!(err, KevyError::InvalidInput(_)));
}
#[test]
fn remote_host_port_default_6379() {
let (h, p) = remote_host_port("kevy://example.com").unwrap();
assert_eq!(h, "example.com");
assert_eq!(p, 6379);
}
#[test]
fn remote_host_port_explicit() {
let (h, p) = remote_host_port("redis://example.com:1234/0").unwrap();
assert_eq!(h, "example.com");
assert_eq!(p, 1234);
}
#[test]
fn remote_host_port_userinfo_rejected() {
assert!(matches!(remote_host_port("kevy://u:p@h:6379").unwrap_err(), KevyError::Unsupported(_)));
}
#[test]
fn embed_subscribe_then_publish_via_same_url_delivers() {
use crate::Connection;
let mut sub = Subscriber::connect_channels("mem://embed-e2e-1", &[b"chan"]).unwrap();
let mut pubconn = Connection::connect("mem://embed-e2e-1").unwrap();
let ack = sub.recv().unwrap();
assert!(matches!(ack, PubsubEvent::Subscribe { .. }));
assert_eq!(pubconn.publish(b"chan", b"hi").unwrap(), 1);
let ev = sub.recv().unwrap();
assert_eq!(
ev,
PubsubEvent::Message {
channel: b"chan".to_vec(),
payload: b"hi".to_vec(),
}
);
}
#[test]
fn embed_different_url_names_are_isolated() {
use crate::Connection;
let mut sub = Subscriber::connect_channels("mem://embed-iso-A", &[b"chan"]).unwrap();
let mut pubconn = Connection::connect("mem://embed-iso-B").unwrap();
let _ack = sub.recv().unwrap();
assert_eq!(pubconn.publish(b"chan", b"hi").unwrap(), 0);
sub.set_read_timeout(Some(Duration::from_millis(50))).unwrap();
let err = sub.recv().unwrap_err();
assert!(matches!(err, KevyError::TimedOut));
}
#[test]
fn subscriber_is_send_and_sync() {
fn require_send_sync<T: Send + Sync>() {}
require_send_sync::<Subscriber>();
}