diff --git a/rust-bins/duniter-dbex/src/cli.rs b/rust-bins/duniter-dbex/src/cli.rs index 205a07bcc837684d1032f7f3aef0bd79980c8768..3f47cdb68fd94f770f744e00a2423975d06eb0c7 100644 --- a/rust-bins/duniter-dbex/src/cli.rs +++ b/rust-bins/duniter-dbex/src/cli.rs @@ -39,7 +39,7 @@ pub struct Opt { pub enum Database { BcV1, BcV2, - DunpV1, + NetworkV1, GvaV1, TxsMpV2, } @@ -51,7 +51,7 @@ impl FromStr for Database { match s { "bc_v1" => Ok(Self::BcV1), "bc_v2" => Ok(Self::BcV2), - "dunp_v1" => Ok(Self::DunpV1), + "dunp_v1" => Ok(Self::NetworkV1), "gva_v1" => Ok(Self::GvaV1), "txs_mp_v2" => Ok(Self::TxsMpV2), _ => unreachable!(), diff --git a/rust-bins/duniter-dbex/src/main.rs b/rust-bins/duniter-dbex/src/main.rs index 00cf5abcd3d070e4b1cf3fd8b5f030e4d037d916..90cf5770cd9086187d2960d69d99bfda78fa4458 100644 --- a/rust-bins/duniter-dbex/src/main.rs +++ b/rust-bins/duniter-dbex/src/main.rs @@ -35,7 +35,7 @@ use comfy_table::Table; use duniter_dbs::databases::{ bc_v1::{BcV1Db, BcV1DbWritable}, bc_v2::{BcV2Db, BcV2DbWritable}, - dunp_v1::{DunpV1Db, DunpV1DbWritable}, + network_v1::{NetworkV1Db, NetworkV1DbWritable}, txs_mp_v2::{TxsMpV2Db, TxsMpV2DbWritable}, }; use duniter_dbs::kv_typed::prelude::*; @@ -120,9 +120,9 @@ fn main() -> anyhow::Result<()> { opt.cmd, open_db_start_time, ), - Database::DunpV1 => apply_subcommand( - DunpV1Db::<Sled>::open(Sled::gen_backend_conf( - DunpV1Db::<Sled>::NAME, + Database::NetworkV1 => apply_subcommand( + NetworkV1Db::<Sled>::open(Sled::gen_backend_conf( + NetworkV1Db::<Sled>::NAME, Some(profile_path.as_path()), ))?, opt.cmd, diff --git a/rust-libs/duniter-dbs/src/databases.rs b/rust-libs/duniter-dbs/src/databases.rs index 501375802286b32313160c6b7debd9ff005d98c1..19792fc7c2e0237b69f1e9a938657522105bca11 100644 --- a/rust-libs/duniter-dbs/src/databases.rs +++ b/rust-libs/duniter-dbs/src/databases.rs @@ -16,5 +16,5 @@ pub mod bc_v1; pub mod bc_v2; pub mod cm_v1; -pub mod dunp_v1; +pub mod network_v1; pub mod txs_mp_v2; diff --git a/rust-libs/duniter-dbs/src/databases/dunp_v1.rs b/rust-libs/duniter-dbs/src/databases/network_v1.rs similarity index 98% rename from rust-libs/duniter-dbs/src/databases/dunp_v1.rs rename to rust-libs/duniter-dbs/src/databases/network_v1.rs index 87285c02286aab2cbc19099c1699cfca536f621a..db55149ae3d05b496dab1954b0e5600920ba2454 100644 --- a/rust-libs/duniter-dbs/src/databases/dunp_v1.rs +++ b/rust-libs/duniter-dbs/src/databases/network_v1.rs @@ -16,7 +16,7 @@ use crate::*; db_schema!( - DunpV1, + NetworkV1, [ ["heads_old", HeadsOld, DunpNodeIdV1Db, DunpHeadDbV1], ["peers_old", PeersOld, PubKeyKeyV2, PeerCardDbV1], diff --git a/rust-libs/duniter-dbs/src/lib.rs b/rust-libs/duniter-dbs/src/lib.rs index 9b4229e9109494a583bfb6547e78212009f4e0e0..63d8a82ad9b4898917bd8ab75e75c18f5ec0bdfb 100644 --- a/rust-libs/duniter-dbs/src/lib.rs +++ b/rust-libs/duniter-dbs/src/lib.rs @@ -124,7 +124,7 @@ pub type FileBackend = kv_typed::backend::memory::Mem; pub struct SharedDbs<B: Backend> { pub bc_db_ro: databases::bc_v2::BcV2DbRo<B>, pub cm_db: databases::cm_v1::CmV1Db<MemSingleton>, - pub dunp_db: databases::dunp_v1::DunpV1Db<B>, + pub dunp_db: databases::network_v1::NetworkV1Db<B>, pub txs_mp_db: databases::txs_mp_v2::TxsMpV2Db<B>, } @@ -132,12 +132,12 @@ impl SharedDbs<Mem> { pub fn mem() -> KvResult<Self> { use databases::bc_v2::BcV2DbWritable as _; use databases::cm_v1::CmV1DbWritable as _; - use databases::dunp_v1::DunpV1DbWritable as _; + use databases::network_v1::NetworkV1DbWritable as _; use databases::txs_mp_v2::TxsMpV2DbWritable as _; Ok(SharedDbs { bc_db_ro: databases::bc_v2::BcV2Db::<Mem>::open(MemConf::default())?.get_ro_handler(), cm_db: databases::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default())?, - dunp_db: databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?, + dunp_db: databases::network_v1::NetworkV1Db::<Mem>::open(MemConf::default())?, txs_mp_db: databases::txs_mp_v2::TxsMpV2Db::<Mem>::open(MemConf::default())?, }) } diff --git a/rust-libs/duniter-dbs/src/open_dbs.rs b/rust-libs/duniter-dbs/src/open_dbs.rs index af1cdf4da7c524557d536709ea44b68ff091e5d3..05f1ffd1b12fd46a533a93eb19e69b5b447d96be 100644 --- a/rust-libs/duniter-dbs/src/open_dbs.rs +++ b/rust-libs/duniter-dbs/src/open_dbs.rs @@ -15,7 +15,7 @@ use crate::databases::bc_v2::BcV2DbWritable as _; use crate::databases::cm_v1::CmV1DbWritable as _; -use crate::databases::dunp_v1::DunpV1DbWritable as _; +use crate::databases::network_v1::NetworkV1DbWritable as _; use crate::databases::txs_mp_v2::TxsMpV2DbWritable as _; use crate::*; @@ -30,7 +30,7 @@ pub fn open_dbs<B: BackendConf>( bc_db_ro: bc_db.get_ro_handler(), cm_db: crate::databases::cm_v1::CmV1Db::<MemSingleton>::open(MemSingletonConf::default()) .expect("fail to open CmV1 DB"), - dunp_db: crate::databases::dunp_v1::DunpV1Db::<B>::open(B::gen_backend_conf( + dunp_db: crate::databases::network_v1::NetworkV1Db::<B>::open(B::gen_backend_conf( "dunp_v1", profile_path_opt, ))?, diff --git a/rust-libs/duniter-server/src/legacy/dunp.rs b/rust-libs/duniter-server/src/legacy/dunp.rs index f77f3e1c3bdfa6bba81c14d22c26b539a37f8352..e390f9e65a6d6d8bb9c07013ea62a530ced0fe99 100644 --- a/rust-libs/duniter-server/src/legacy/dunp.rs +++ b/rust-libs/duniter-server/src/legacy/dunp.rs @@ -32,13 +32,13 @@ impl DuniterServer { .expect("dbs pool disconnected") } pub fn remove_all_peers(&self) -> KvResult<()> { - use duniter_dbs::databases::dunp_v1::DunpV1DbWritable as _; + use duniter_dbs::databases::network_v1::NetworkV1DbWritable as _; self.dbs_pool .execute(move |dbs| dbs.dunp_db.peers_old_write().clear()) .expect("dbs pool disconnected") } pub fn remove_peer_by_pubkey(&self, pubkey: PublicKey) -> KvResult<()> { - use duniter_dbs::databases::dunp_v1::DunpV1DbWritable as _; + use duniter_dbs::databases::network_v1::NetworkV1DbWritable as _; self.dbs_pool .execute(move |dbs| dbs.dunp_db.peers_old_write().remove(PubKeyKeyV2(pubkey))) .expect("dbs pool disconnected") @@ -46,7 +46,7 @@ impl DuniterServer { pub fn save_peer(&self, new_peer_card: PeerCardDbV1) -> anyhow::Result<()> { use dubp::crypto::keys::PublicKey as _; let pubkey = PublicKey::from_base58(&new_peer_card.pubkey)?; - use duniter_dbs::databases::dunp_v1::DunpV1DbWritable as _; + use duniter_dbs::databases::network_v1::NetworkV1DbWritable as _; self.dbs_pool .execute(move |dbs| { dbs.dunp_db.peers_old_write().upsert( @@ -78,7 +78,7 @@ mod tests { ed25519::{PublicKey, Signature}, PublicKey as _, }; - use duniter_dbs::databases::dunp_v1::DunpV1DbReadable; + use duniter_dbs::databases::network_v1::NetworkV1DbReadable; use duniter_dbs::PeerCardDbV1; use super::*; @@ -113,7 +113,7 @@ mod tests { #[test] fn test_save_peer() -> anyhow::Result<()> { - use duniter_dbs::databases::dunp_v1::DunpV1DbReadable as _; + use duniter_dbs::databases::network_v1::NetworkV1DbReadable as _; let server = DuniterServer::test(DuniterConf::default(), DuniterMode::Start)?; let dbs = server.get_shared_dbs(); diff --git a/rust-libs/duniter-server/src/lib.rs b/rust-libs/duniter-server/src/lib.rs index beb1d852d8303be22587c6bbb9bb2532ca9e3af2..21093259188626857c0e6f8f707effd6d509bdfc 100644 --- a/rust-libs/duniter-server/src/lib.rs +++ b/rust-libs/duniter-server/src/lib.rs @@ -26,7 +26,7 @@ mod fill_cm; mod legacy; pub use duniter_conf::{gva_conf::GvaConf, DuniterConf, DuniterMode}; -use duniter_dbs::databases::dunp_v1::DunpV1DbWritable; +use duniter_dbs::databases::network_v1::NetworkV1DbWritable; pub use duniter_dbs::{ kv_typed::prelude::KvResult, smallvec, DunpHeadDbV1, DunpNodeIdV1Db, PeerCardDbV1, }; diff --git a/rust-libs/modules/gva/dbs-reader/src/endpoints.rs b/rust-libs/modules/gva/dbs-reader/src/endpoints.rs deleted file mode 100644 index 47eae2d47252741a58ed69f08cba4f274792e80e..0000000000000000000000000000000000000000 --- a/rust-libs/modules/gva/dbs-reader/src/endpoints.rs +++ /dev/null @@ -1,120 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. - -use crate::*; -use duniter_dbs::databases::dunp_v1::DunpV1DbReadable; - -#[cfg(test)] -mod tests { - use super::*; - use duniter_dbs::databases::dunp_v1::DunpV1DbWritable; - use duniter_dbs::PeerCardDbV1; - - #[test] - fn test_empty_endpoints() -> KvResult<()> { - // Populate DB - let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?; - let db_reader = DbsReaderImpl::mem(); - let pk = PublicKey::default(); - - dunp_db - .peers_old_write() - .upsert(PubKeyKeyV2(pk), PeerCardDbV1::default())?; - - // Request Data - let api_list = vec!["GVA".to_owned()]; - assert_eq!( - db_reader.endpoints_(&dunp_db, api_list)?, - Vec::<String>::new() - ); - - Ok(()) - } - #[test] - fn test_endpoints_with_empty_api_list() -> KvResult<()> { - let dummy_endpoint = "GVA S domain.tld 443 gva"; - - // Populate DB - let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?; - let db_reader = DbsReaderImpl::mem(); - let pk = PublicKey::default(); - let peer = PeerCardDbV1 { - endpoints: vec![dummy_endpoint.to_owned()], - ..Default::default() - }; - - dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?; - - // Request Data - let api_list = vec![]; - assert_eq!( - db_reader.endpoints_(&dunp_db, api_list)?, - Vec::<String>::new() - ); - - Ok(()) - } - #[test] - fn test_single_peer_endpoints() -> KvResult<()> { - let dummy_endpoint = "GVA S domain.tld 443 gva"; - - // Populate DB - let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?; - let db_reader = DbsReaderImpl::mem(); - let pk = PublicKey::default(); - let peer = PeerCardDbV1 { - endpoints: vec![dummy_endpoint.to_owned()], - ..Default::default() - }; - - dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?; - - // Request Data - let api_list = vec!["GVA".to_owned()]; - assert_eq!( - db_reader.endpoints_(&dunp_db, api_list)?, - vec![dummy_endpoint.to_owned()] - ); - - Ok(()) - } -} - -impl DbsReaderImpl { - pub(super) fn endpoints_<DB: DunpV1DbReadable>( - &self, - network_db: &DB, - mut api_list: Vec<String>, - ) -> KvResult<Vec<String>> { - if api_list.is_empty() { - return Ok(vec![]); - } - for api in &mut api_list { - api.push(' '); - } - network_db.peers_old().iter(.., |it| { - it.values() - .map_ok(|peer| { - peer.endpoints.into_iter().filter(|endpoint| { - api_list - .iter() - .any(|api| endpoint.starts_with(api.as_str())) - }) - }) - .flatten_ok() - .collect::<Result<Vec<String>, _>>() - }) - } -} diff --git a/rust-libs/modules/gva/dbs-reader/src/lib.rs b/rust-libs/modules/gva/dbs-reader/src/lib.rs index 8e15fea48877b8f56d234506c7cadc15e251c332..8e9cdb33a1e0fad83fc44bffa00cb1cebe00b964 100644 --- a/rust-libs/modules/gva/dbs-reader/src/lib.rs +++ b/rust-libs/modules/gva/dbs-reader/src/lib.rs @@ -24,7 +24,6 @@ pub mod block; pub mod current_frame; -pub mod endpoints; pub mod find_inputs; pub mod idty; pub mod network; @@ -43,7 +42,7 @@ use dubp::documents::transaction::TransactionDocumentV10; use dubp::{block::DubpBlockV10, common::crypto::hashs::Hash}; use dubp::{common::prelude::BlockNumber, wallet::prelude::*}; use duniter_bca_types::utxo::Utxo; -use duniter_dbs::{databases::dunp_v1::DunpV1DbReadable, FileBackend}; +use duniter_dbs::{databases::network_v1::NetworkV1DbReadable, FileBackend}; use duniter_dbs::{ databases::{ bc_v2::{BcV2DbReadable, BcV2DbRo}, @@ -87,7 +86,7 @@ pub trait DbsReader { bc_db: &BcV2DbRo<FileBackend>, page_info: PageInfo<block::BlockCursor>, ) -> KvResult<PagedData<Vec<(block::BlockCursor, BlockMetaV2)>>>; - fn endpoints<Db: 'static + DunpV1DbReadable>( + fn endpoints<Db: 'static + NetworkV1DbReadable>( &self, network_db: &Db, api_list: Vec<String>, @@ -154,7 +153,7 @@ pub trait DbsReader { bc_db: &BcV2DbRo<FileBackend>, pubkey: PublicKey, ) -> KvResult<Option<duniter_dbs::IdtyDbV2>>; - fn peers_and_heads<DB: 'static + DunpV1DbReadable>( + fn peers_and_heads<DB: 'static + NetworkV1DbReadable>( &self, dunp_db: &DB, ) -> KvResult<Vec<(duniter_dbs::PeerCardDbV1, Vec<duniter_dbs::DunpHeadDbV1>)>>; @@ -197,7 +196,7 @@ impl DbsReader for DbsReaderImpl { self.blocks_(bc_db, page_info) } - fn endpoints<Db: 'static + DunpV1DbReadable>( + fn endpoints<Db: 'static + NetworkV1DbReadable>( &self, network_db: &Db, api_list: Vec<String>, @@ -306,7 +305,7 @@ impl DbsReader for DbsReaderImpl { self.idty_(bc_db, pubkey) } - fn peers_and_heads<DB: 'static + DunpV1DbReadable>( + fn peers_and_heads<DB: 'static + NetworkV1DbReadable>( &self, dunp_db: &DB, ) -> KvResult<Vec<(duniter_dbs::PeerCardDbV1, Vec<duniter_dbs::DunpHeadDbV1>)>> { diff --git a/rust-libs/modules/gva/dbs-reader/src/network.rs b/rust-libs/modules/gva/dbs-reader/src/network.rs index 05f3b7c333c79e617e304b490f48bc311f3d5e85..2ec530aa6ed2b1cd49f744204a2424ce1f89c668 100644 --- a/rust-libs/modules/gva/dbs-reader/src/network.rs +++ b/rust-libs/modules/gva/dbs-reader/src/network.rs @@ -15,12 +15,35 @@ use crate::*; use dubp::crypto::keys::PublicKey as _; -use duniter_dbs::databases::dunp_v1::DunpV1DbReadable; -use duniter_dbs::{DunpHeadDbV1, PeerCardDbV1}; +use duniter_dbs::{databases::network_v1::NetworkV1DbReadable, DunpHeadDbV1, PeerCardDbV1}; #[allow(clippy::unnecessary_wraps)] impl DbsReaderImpl { - pub(super) fn peers_and_heads_<DB: DunpV1DbReadable>( + pub(super) fn endpoints_<DB: NetworkV1DbReadable>( + &self, + network_db: &DB, + mut api_list: Vec<String>, + ) -> KvResult<Vec<String>> { + if api_list.is_empty() { + return Ok(vec![]); + } + for api in &mut api_list { + api.push(' '); + } + network_db.peers_old().iter(.., |it| { + it.values() + .map_ok(|peer| { + peer.endpoints.into_iter().filter(|endpoint| { + api_list + .iter() + .any(|api| endpoint.starts_with(api.as_str())) + }) + }) + .flatten_ok() + .collect::<Result<Vec<String>, _>>() + }) + } + pub(super) fn peers_and_heads_<DB: NetworkV1DbReadable>( &self, dunp_db: &DB, ) -> KvResult<Vec<(PeerCardDbV1, Vec<DunpHeadDbV1>)>> { @@ -52,11 +75,85 @@ impl DbsReaderImpl { #[cfg(test)] mod tests { use super::*; - use duniter_dbs::databases::dunp_v1::DunpV1DbWritable; + use duniter_dbs::databases::network_v1::NetworkV1DbWritable; + use duniter_dbs::PeerCardDbV1; + + #[test] + fn test_empty_endpoints() -> KvResult<()> { + // Populate DB + let dunp_db = + duniter_dbs::databases::network_v1::NetworkV1Db::<Mem>::open(MemConf::default())?; + let db_reader = DbsReaderImpl::mem(); + let pk = PublicKey::default(); + + dunp_db + .peers_old_write() + .upsert(PubKeyKeyV2(pk), PeerCardDbV1::default())?; + + // Request Data + let api_list = vec!["GVA".to_owned()]; + assert_eq!( + db_reader.endpoints_(&dunp_db, api_list)?, + Vec::<String>::new() + ); + + Ok(()) + } + #[test] + fn test_endpoints_with_empty_api_list() -> KvResult<()> { + let dummy_endpoint = "GVA S domain.tld 443 gva"; + + // Populate DB + let dunp_db = + duniter_dbs::databases::network_v1::NetworkV1Db::<Mem>::open(MemConf::default())?; + let db_reader = DbsReaderImpl::mem(); + let pk = PublicKey::default(); + let peer = PeerCardDbV1 { + endpoints: vec![dummy_endpoint.to_owned()], + ..Default::default() + }; + + dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?; + + // Request Data + let api_list = vec![]; + assert_eq!( + db_reader.endpoints_(&dunp_db, api_list)?, + Vec::<String>::new() + ); + + Ok(()) + } + #[test] + fn test_single_peer_endpoints() -> KvResult<()> { + let dummy_endpoint = "GVA S domain.tld 443 gva"; + + // Populate DB + let dunp_db = + duniter_dbs::databases::network_v1::NetworkV1Db::<Mem>::open(MemConf::default())?; + let db_reader = DbsReaderImpl::mem(); + let pk = PublicKey::default(); + let peer = PeerCardDbV1 { + endpoints: vec![dummy_endpoint.to_owned()], + ..Default::default() + }; + + dunp_db.peers_old_write().upsert(PubKeyKeyV2(pk), peer)?; + + // Request Data + let api_list = vec!["GVA".to_owned()]; + assert_eq!( + db_reader.endpoints_(&dunp_db, api_list)?, + vec![dummy_endpoint.to_owned()] + ); + + Ok(()) + } #[test] fn test_peers_and_heads() -> KvResult<()> { - let dunp_db = duniter_dbs::databases::dunp_v1::DunpV1Db::<Mem>::open(MemConf::default())?; + let dunp_db = + duniter_dbs::databases::network_v1::NetworkV1Db::<Mem>::open(MemConf::default())?; let db_reader = DbsReaderImpl::mem(); let pk = PublicKey::default(); diff --git a/rust-libs/modules/gva/gql/src/queries.rs b/rust-libs/modules/gva/gql/src/queries.rs index a23e8ad7c3b11770cc5f99a47b47cad9c0849b6e..7357f49373867fc0e5759df44df905254b2a1d06 100644 --- a/rust-libs/modules/gva/gql/src/queries.rs +++ b/rust-libs/modules/gva/gql/src/queries.rs @@ -17,7 +17,6 @@ pub mod account_balance; pub mod block; pub mod current_block; pub mod current_frame; -pub mod endpoints; pub mod first_utxos_of_scripts; pub mod gen_tx; pub mod idty; @@ -35,7 +34,6 @@ pub struct QueryRoot( queries::block::BlockQuery, queries::current_block::CurrentBlockQuery, queries::current_frame::CurrentFrameQuery, - queries::endpoints::EndpointsQuery, queries::first_utxos_of_scripts::FirstUtxosQuery, queries::gen_tx::GenTxsQuery, queries::idty::IdtyQuery, diff --git a/rust-libs/modules/gva/gql/src/queries/endpoints.rs b/rust-libs/modules/gva/gql/src/queries/endpoints.rs deleted file mode 100644 index 38dd6595a482363b1fe36adc2389c8ba7360309e..0000000000000000000000000000000000000000 --- a/rust-libs/modules/gva/gql/src/queries/endpoints.rs +++ /dev/null @@ -1,80 +0,0 @@ -// Copyright (C) 2020 Éloïs SANCHEZ. -// -// This program is free software: you can redistribute it and/or modify -// it under the terms of the GNU Affero General Public License as -// published by the Free Software Foundation, either version 3 of the -// License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU Affero General Public License for more details. -// -// You should have received a copy of the GNU Affero General Public License -// along with this program. If not, see <https://www.gnu.org/licenses/>. - -use crate::*; - -// e2e requester pour obtenir la fiche de peer et un tableau de heads pour une pubKey donnée - -// e2e requester pour obtenir la list des endpoints connu filtrable par type (gva, bma, ws2p, es?data-pod) -// ? e2e list endpoints type -// ? renomer dunp_v1 en network_v1 & DunpV1Db & co - -#[cfg(test)] -mod tests { - use super::*; - use crate::tests::*; - use duniter_dbs::databases::dunp_v1::DunpV1Db; - - #[tokio::test] - async fn endpoints_gva_resolver() -> anyhow::Result<()> { - let mock_cm = MockAsyncAccessor::new(); - let mut mock_dbs_reader = MockDbsReader::new(); - mock_dbs_reader - .expect_endpoints::<DunpV1Db<FileBackend>>() - .times(1) - .returning(|_, _| { - Ok(vec![ - "GVA S g1.librelois.fr 443 gva".to_owned(), - "GVA S domain.tld 443 gva".to_owned(), - ]) - }); - let schema = create_schema(mock_cm, mock_dbs_reader)?; - assert_eq!( - exec_graphql_request(&schema, r#"{ endpoints(apiList:["GVA"]) }"#).await?, - serde_json::json!({ - "data": { - "endpoints": [ - "GVA S g1.librelois.fr 443 gva", - "GVA S domain.tld 443 gva" - ] - } - }) - ); - Ok(()) - } -} - -#[derive(Default)] -pub(crate) struct EndpointsQuery; -#[async_graphql::Object] -impl EndpointsQuery { - /// Get endpoints known by the node - async fn endpoints( - &self, - ctx: &async_graphql::Context<'_>, - #[graphql( - desc = "filter endpoints by api (exact match endpoint first word, case sensitive)" - )] - api_list: Vec<String>, - ) -> async_graphql::Result<Vec<String>> { - let data = ctx.data::<GvaSchemaData>()?; - let dbs_reader = data.dbs_reader(); - - Ok(data - .dbs_pool - .execute(move |dbs| dbs_reader.endpoints(&dbs.dunp_db, api_list)) - .await??) - } -} diff --git a/rust-libs/modules/gva/gql/src/queries/network.rs b/rust-libs/modules/gva/gql/src/queries/network.rs index 39d104aab48244944b440c24e1384b8a414b3d41..e24be4b4da79943e66d7f981fbd3a52ddf9c11dd 100644 --- a/rust-libs/modules/gva/gql/src/queries/network.rs +++ b/rust-libs/modules/gva/gql/src/queries/network.rs @@ -25,6 +25,23 @@ pub(crate) struct NetworkQueryInner; #[async_graphql::Object] impl NetworkQueryInner { + /// Get endpoints known by the node + async fn endpoints( + &self, + ctx: &async_graphql::Context<'_>, + #[graphql( + desc = "filter endpoints by api (exact match endpoint first word, case sensitive)" + )] + api_list: Vec<String>, + ) -> async_graphql::Result<Vec<String>> { + let data = ctx.data::<GvaSchemaData>()?; + let dbs_reader = data.dbs_reader(); + + Ok(data + .dbs_pool + .execute(move |dbs| dbs_reader.endpoints(&dbs.dunp_db, api_list)) + .await??) + } /// Get peers and heads async fn nodes( &self, @@ -51,14 +68,44 @@ impl NetworkQueryInner { mod tests { use super::*; use crate::tests::*; - use duniter_dbs::databases::dunp_v1::DunpV1Db; + use duniter_dbs::databases::network_v1::NetworkV1Db; use pretty_assertions::assert_eq; + #[tokio::test] + async fn test_endpoints() -> anyhow::Result<()> { + let mock_cm = MockAsyncAccessor::new(); + let mut mock_dbs_reader = MockDbsReader::new(); + mock_dbs_reader + .expect_endpoints::<NetworkV1Db<FileBackend>>() + .times(1) + .returning(|_, _| { + Ok(vec![ + "GVA S g1.librelois.fr 443 gva".to_owned(), + "GVA S domain.tld 443 gva".to_owned(), + ]) + }); + let schema = create_schema(mock_cm, mock_dbs_reader)?; + assert_eq!( + exec_graphql_request(&schema, r#"{ network { endpoints(apiList:["GVA"]) } }"#).await?, + serde_json::json!({ + "data": { + "network": { + "endpoints": [ + "GVA S g1.librelois.fr 443 gva", + "GVA S domain.tld 443 gva" + ] + } + } + }) + ); + Ok(()) + } + #[tokio::test] async fn test_peers_and_heads() -> anyhow::Result<()> { let mut dbs_reader = MockDbsReader::new(); dbs_reader - .expect_peers_and_heads::<DunpV1Db<FileBackend>>() + .expect_peers_and_heads::<NetworkV1Db<FileBackend>>() .times(1) .returning(|_| { Ok(vec![(