use std::{iter, sync::Arc};
use rand::{Rng, distributions::Alphanumeric};
use tari_common_sqlite::connection::DbConnection;
#[cfg(test)]
use crate::peer_manager::{Peer, PeerManagerError};
use crate::{
PeerManager,
peer_manager::database::{MIGRATIONS, PeerDatabaseSql},
};
#[cfg(test)]
pub fn build_peer_manager(this_peer: &Peer) -> Result<Arc<PeerManager>, PeerManagerError> {
use crate::types::TransportProtocol;
let db_connection = DbConnection::connect_temp_file_and_migrate(MIGRATIONS)?;
let peers_db = PeerDatabaseSql::new(db_connection, this_peer)?;
Ok(Arc::new(PeerManager::new(peers_db, TransportProtocol::get_all())?))
}
#[cfg(not(test))]
pub use not_test::build_peer_manager;
#[cfg(not(test))]
mod not_test {
use std::path::{Path, PathBuf};
use tari_common_sqlite::connection::DbConnectionUrl;
use super::*;
use crate::{
peer_manager::{Peer, PeerManagerError},
types::TransportProtocol,
};
pub fn build_peer_manager<P: AsRef<Path>>(
data_path: P,
this_peer: &Peer,
) -> Result<Arc<PeerManager>, PeerManagerError> {
std::fs::create_dir_all(&data_path)?;
let peer_database_name = PathBuf::from(data_path.as_ref())
.join(random_name())
.with_extension("db");
let database_url = DbConnectionUrl::File(peer_database_name);
let db_connection = DbConnection::connect_and_migrate(&database_url, MIGRATIONS, Some(5))?;
let peers_db = PeerDatabaseSql::new(db_connection, this_peer)?;
Ok(Arc::new(PeerManager::new(peers_db, TransportProtocol::get_all())?))
}
}
pub fn random_name() -> String {
let mut rng = rand::thread_rng();
iter::repeat(())
.map(|_| rng.sample(Alphanumeric) as char)
.take(12)
.collect::<String>()
}