mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
feat(net): Make PeerManager emit peerevents for admin rpc (#602)
* Make PeerManager emit peerevents for admin rpc * Fix tests to include new peer events
This commit is contained in:
@ -72,7 +72,7 @@ impl PeersHandle {
|
||||
pub(crate) struct PeersManager {
|
||||
/// All peers known to the network
|
||||
peers: HashMap<PeerId, Peer>,
|
||||
/// Copy of the receiver half, so new [`PeersHandle`] can be created on demand.
|
||||
/// Copy of the sender half, so new [`PeersHandle`] can be created on demand.
|
||||
manager_tx: mpsc::UnboundedSender<PeerCommand>,
|
||||
/// Receiver half of the command channel.
|
||||
handle_rx: UnboundedReceiverStream<PeerCommand>,
|
||||
@ -209,6 +209,7 @@ impl PeersManager {
|
||||
}
|
||||
Entry::Vacant(entry) => {
|
||||
entry.insert(Peer::with_state(addr, PeerConnectionState::In));
|
||||
self.queued_actions.push_back(PeerAction::PeerAdded(peer_id));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -290,6 +291,7 @@ impl PeersManager {
|
||||
if entry.get().remove_after_disconnect {
|
||||
// this peer should be removed from the set
|
||||
entry.remove();
|
||||
self.queued_actions.push_back(PeerAction::PeerRemoved(peer_id));
|
||||
} else {
|
||||
entry.get_mut().state = PeerConnectionState::Idle;
|
||||
return
|
||||
@ -329,6 +331,7 @@ impl PeersManager {
|
||||
// issues.
|
||||
if let Some(peer) = self.peers.remove(peer_id) {
|
||||
self.connection_info.decr_state(peer.state);
|
||||
self.queued_actions.push_back(PeerAction::PeerRemoved(*peer_id));
|
||||
}
|
||||
|
||||
// ban the peer
|
||||
@ -404,6 +407,7 @@ impl PeersManager {
|
||||
Entry::Vacant(entry) => {
|
||||
trace!(target : "net::peers", ?peer_id, ?addr, "discovered new node");
|
||||
entry.insert(Peer::new(addr));
|
||||
self.queued_actions.push_back(PeerAction::PeerAdded(peer_id));
|
||||
}
|
||||
}
|
||||
|
||||
@ -414,6 +418,7 @@ impl PeersManager {
|
||||
pub(crate) fn remove_discovered_node(&mut self, peer_id: PeerId) {
|
||||
if let Some(mut peer) = self.peers.remove(&peer_id) {
|
||||
trace!(target : "net::peers", ?peer_id, "remove discovered node");
|
||||
self.queued_actions.push_back(PeerAction::PeerRemoved(peer_id));
|
||||
|
||||
if peer.state.is_connected() {
|
||||
debug!(target : "net::peers", ?peer_id, "disconnecting on remove from discovery");
|
||||
@ -767,6 +772,10 @@ pub enum PeerAction {
|
||||
BanPeer { peer_id: PeerId },
|
||||
/// Unban the peer temporarily
|
||||
UnBanPeer { peer_id: PeerId },
|
||||
/// Emit peerAdded event
|
||||
PeerAdded(PeerId),
|
||||
/// Emit peerRemoved event
|
||||
PeerRemoved(PeerId),
|
||||
}
|
||||
|
||||
/// Config type for initiating a [`PeersManager`] instance
|
||||
@ -901,6 +910,12 @@ mod test {
|
||||
let mut peers = PeersManager::default();
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, remote_addr } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -942,6 +957,12 @@ mod test {
|
||||
let mut peers = PeersManager::new(config);
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, .. } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -996,6 +1017,12 @@ mod test {
|
||||
let mut peers = PeersManager::default();
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, .. } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1017,6 +1044,12 @@ mod test {
|
||||
)),
|
||||
);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerRemoved(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::BanPeer { peer_id } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1040,6 +1073,12 @@ mod test {
|
||||
let mut peers = PeersManager::default();
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, .. } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1061,6 +1100,12 @@ mod test {
|
||||
)),
|
||||
);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerRemoved(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::BanPeer { peer_id } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1140,6 +1185,12 @@ mod test {
|
||||
let mut peers = PeersManager::default();
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, remote_addr } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1178,6 +1229,12 @@ mod test {
|
||||
let mut peers = PeersManager::default();
|
||||
peers.add_discovered_node(peer, socket_addr);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerAdded(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Connect { peer_id, remote_addr } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
@ -1191,6 +1248,12 @@ mod test {
|
||||
|
||||
peers.remove_discovered_node(peer);
|
||||
|
||||
match event!(peers) {
|
||||
PeerAction::PeerRemoved(peer_id) => {
|
||||
assert_eq!(peer_id, peer);
|
||||
}
|
||||
_ => unreachable!(),
|
||||
}
|
||||
match event!(peers) {
|
||||
PeerAction::Disconnect { peer_id, .. } => {
|
||||
assert_eq!(peer_id, peer);
|
||||
|
||||
Reference in New Issue
Block a user