1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use crate::handlers::peer_handler::models::{ConnectionMetadata, PeerInfo};
use std::{
    collections::{HashMap, HashSet},
    net::SocketAddr,
    time::Duration,
};

use massa_protocol_exports::{PeerId, TransportType};

#[cfg_attr(test, mockall::automock)]
pub trait PeerDBTrait: Send + Sync {
    fn ban_peer(&mut self, peer_id: &PeerId);
    fn unban_peer(&mut self, peer_id: &PeerId);
    fn clone_box(&self) -> Box<dyn PeerDBTrait>;
    fn get_oldest_peer(
        &self,
        cooldown: Duration,
        in_test: &HashSet<SocketAddr>,
    ) -> Option<SocketAddr>;
    fn get_rand_peers_to_send(
        &self,
        nb_peers: usize,
    ) -> Vec<(PeerId, HashMap<SocketAddr, TransportType>)>;
    fn get_banned_peer_count(&self) -> u64;
    fn get_known_peer_count(&self) -> u64;
    fn get_peers(&self) -> &HashMap<PeerId, PeerInfo>;
    fn get_peers_mut(&mut self) -> &mut HashMap<PeerId, PeerInfo>;
    fn get_connection_metadata_or_default(&self, addr: &SocketAddr) -> ConnectionMetadata;
    fn set_try_connect_success_or_insert(&mut self, addr: &SocketAddr);
    fn set_try_connect_failure_or_insert(&mut self, addr: &SocketAddr);
    fn set_try_connect_test_success_or_insert(&mut self, addr: &SocketAddr);
    fn set_try_connect_test_failure_or_insert(&mut self, addr: &SocketAddr);
    fn insert_peer_in_test(&mut self, addr: &SocketAddr) -> bool;
    fn remove_peer_in_test(&mut self, addr: &SocketAddr) -> bool;
    fn get_peers_in_test(&self) -> &HashSet<SocketAddr>;
    fn insert_tested_address(&mut self, addr: &SocketAddr, time: massa_time::MassaTime);
    fn get_tested_addresses(&self) -> &HashMap<SocketAddr, massa_time::MassaTime>;
}

impl Clone for Box<dyn PeerDBTrait> {
    fn clone(&self) -> Box<dyn PeerDBTrait> {
        self.clone_box()
    }
}