zebra/zebra-network/src/address_book/tests/vectors.rs

87 lines
2.6 KiB
Rust

//! Fixed test vectors for the address book.
use std::time::Instant;
use chrono::Utc;
use tracing::Span;
use zebra_chain::serialization::{DateTime32, Duration32};
use crate::{meta_addr::MetaAddr, protocol::external::types::PeerServices, AddressBook};
/// Make sure an empty address book is actually empty.
#[test]
fn address_book_empty() {
let address_book = AddressBook::new("0.0.0.0:0".parse().unwrap(), Span::current());
assert_eq!(
address_book
.reconnection_peers(Instant::now(), Utc::now())
.next(),
None
);
assert_eq!(address_book.len(), 0);
}
/// Make sure peers are attempted in priority order.
#[test]
fn address_book_peer_order() {
let addr1 = "127.0.0.1:1".parse().unwrap();
let addr2 = "127.0.0.2:2".parse().unwrap();
let mut meta_addr1 =
MetaAddr::new_gossiped_meta_addr(addr1, PeerServices::NODE_NETWORK, DateTime32::MIN);
let mut meta_addr2 = MetaAddr::new_gossiped_meta_addr(
addr2,
PeerServices::NODE_NETWORK,
DateTime32::MIN.saturating_add(Duration32::from_seconds(1)),
);
// Regardless of the order of insertion, the most recent address should be chosen first
let addrs = vec![meta_addr1, meta_addr2];
let address_book =
AddressBook::new_with_addrs("0.0.0.0:0".parse().unwrap(), Span::current(), addrs);
assert_eq!(
address_book
.reconnection_peers(Instant::now(), Utc::now())
.next(),
Some(meta_addr2),
);
// Reverse the order, check that we get the same result
let addrs = vec![meta_addr2, meta_addr1];
let address_book =
AddressBook::new_with_addrs("0.0.0.0:0".parse().unwrap(), Span::current(), addrs);
assert_eq!(
address_book
.reconnection_peers(Instant::now(), Utc::now())
.next(),
Some(meta_addr2),
);
// Now check that the order depends on the time, not the address
meta_addr1.addr = addr2;
meta_addr2.addr = addr1;
let addrs = vec![meta_addr1, meta_addr2];
let address_book =
AddressBook::new_with_addrs("0.0.0.0:0".parse().unwrap(), Span::current(), addrs);
assert_eq!(
address_book
.reconnection_peers(Instant::now(), Utc::now())
.next(),
Some(meta_addr2),
);
// Reverse the order, check that we get the same result
let addrs = vec![meta_addr2, meta_addr1];
let address_book =
AddressBook::new_with_addrs("0.0.0.0:0".parse().unwrap(), Span::current(), addrs);
assert_eq!(
address_book
.reconnection_peers(Instant::now(), Utc::now())
.next(),
Some(meta_addr2),
);
}