use super::ServiceDirectory;
#[test]
fn directory_names_the_first_registration_until_it_closes() {
let mut directory = ServiceDirectory::default();
directory.register(7, "echo.request");
directory.register(9, "echo.request");
assert_eq!(directory.serving("echo.request"), Some(7));
directory.forget(7, "echo.request");
assert_eq!(directory.serving("echo.request"), Some(9));
directory.forget(9, "echo.request");
assert_eq!(directory.serving("echo.request"), None);
assert_eq!(directory.subjects(), 0);
}
#[test]
fn directory_follows_a_replacement_registration() {
let mut directory = ServiceDirectory::default();
directory.register(7, "one");
directory.forget(7, "one");
directory.register(7, "two");
assert_eq!(directory.serving("one"), None);
assert_eq!(directory.serving("two"), Some(7));
assert_eq!(directory.subjects(), 1);
}
#[test]
fn directory_lookup_is_one_keyed_read() {
let mut directory = ServiceDirectory::default();
for n in 0..1_000_u64 {
directory.register(n, &format!("subject.{n}"));
}
let before = directory.lookups();
assert_eq!(directory.serving("missing"), None);
assert_eq!(directory.lookups() - before, 1);
assert_eq!(directory.serving("subject.999"), Some(999));
assert_eq!(directory.lookups() - before, 2);
}
#[test]
fn directory_lists_a_connection_once_per_subject() {
let mut directory = ServiceDirectory::default();
directory.register(7, "echo.request");
directory.register(7, "echo.request");
directory.forget(7, "echo.request");
assert_eq!(directory.serving("echo.request"), None);
}