From 4212e23680cde345b3240db2a81ccc3fd27e10ac Mon Sep 17 00:00:00 2001 From: "Federico Pasqua (eisterman)" Date: Sun, 14 Jul 2024 15:52:58 +0200 Subject: [PATCH] Add tests to servercertdb --- bonknet_broker/src/pendingdataconndb.rs | 18 ++++---- bonknet_broker/src/servercertdb.rs | 59 +++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 9 deletions(-) diff --git a/bonknet_broker/src/pendingdataconndb.rs b/bonknet_broker/src/pendingdataconndb.rs index cfecc3b..220bc17 100644 --- a/bonknet_broker/src/pendingdataconndb.rs +++ b/bonknet_broker/src/pendingdataconndb.rs @@ -1,12 +1,3 @@ -use actix::prelude::*; -use futures::SinkExt; -use thiserror::Error; -use tracing::{error, info}; -use uuid::Uuid; -use libbonknet::*; -use crate::dataconnmanager::{DataConnManager, StartDataBridge}; -use crate::streamutils::*; - //! Pending Data Connect Database is where we store the Data Connection in creation. //! Every row contains: //! - The ServerConnID that the server will use (uuid) @@ -17,6 +8,15 @@ use crate::streamutils::*; //! When a row contains a valid ServerSocket and ClientSocket, then the row is removed and the //! sockets moved to the Data Connection Manager +use actix::prelude::*; +use futures::SinkExt; +use thiserror::Error; +use tracing::{error, info}; +use uuid::Uuid; +use libbonknet::*; +use crate::dataconnmanager::{DataConnManager, StartDataBridge}; +use crate::streamutils::*; + #[derive(Error, Debug)] pub enum PendingDataConnError { #[error("Generic Failure")] diff --git a/bonknet_broker/src/servercertdb.rs b/bonknet_broker/src/servercertdb.rs index 845044e..d45fd89 100644 --- a/bonknet_broker/src/servercertdb.rs +++ b/bonknet_broker/src/servercertdb.rs @@ -88,4 +88,63 @@ impl Handler for ServerCertDB { fn handle(&mut self, msg: UnregisterServer, _ctx: &mut Self::Context) -> Self::Result { self.db.remove(&msg.cert) } +} + +#[cfg(test)] +mod tests { + use super::*; + + #[actix::test] + async fn emptydb_isnameregistered() { + let servercert_db = ServerCertDB::new().start(); + assert!(!servercert_db.send(IsNameRegistered { name: "test".into() }).await.unwrap()); + } + + #[actix::test] + async fn emptyvec() { + let servercert_db = ServerCertDB::new().start(); + assert!(servercert_db.send(RegisterServer { cert: vec![], name: "test".into() }).await.unwrap().is_ok()); + assert!(servercert_db.send(IsNameRegistered { name: "test".into() }).await.unwrap()); + assert_eq!(servercert_db.send(FetchName { cert: vec![] }).await.unwrap().unwrap(), "test"); + assert_eq!(servercert_db.send(UnregisterServer { cert: vec![] }).await.unwrap().unwrap(), "test"); + assert!(!servercert_db.send(IsNameRegistered { name: "test".into() }).await.unwrap()); + assert!(servercert_db.send(FetchName { cert: vec![] }).await.unwrap().is_none()); + assert!(servercert_db.send(UnregisterServer { cert: vec![] }).await.unwrap().is_none()); + } + + #[actix::test] + async fn normalcert() { + let servercert_db = ServerCertDB::new().start(); + let cert = vec![112, 111, 114, 99, 111, 100, 105, 111]; + assert!(servercert_db.send(RegisterServer { cert: cert.clone(), name: "test2".into() }).await.unwrap().is_ok()); + assert!(servercert_db.send(IsNameRegistered { name: "test2".into() }).await.unwrap()); + assert_eq!(servercert_db.send(FetchName { cert: cert.clone() }).await.unwrap().unwrap(), "test2"); + assert_eq!(servercert_db.send(UnregisterServer { cert: cert.clone() }).await.unwrap().unwrap(), "test2"); + assert!(!servercert_db.send(IsNameRegistered { name: "test2".into() }).await.unwrap()); + assert!(servercert_db.send(FetchName { cert: cert.clone() }).await.unwrap().is_none()); + assert!(servercert_db.send(UnregisterServer { cert: cert.clone() }).await.unwrap().is_none()); + } + + #[actix::test] + async fn cert2_remains_after_delete_cert1() { + let servercert_db = ServerCertDB::new().start(); + let cert1 = vec![112, 111, 114, 99, 111, 100, 105, 111]; + let cert2 = vec![67, 65, 78, 68, 69, 68, 73, 79]; + assert!(servercert_db.send(RegisterServer { cert: cert1.clone(), name: "test3".into() }).await.unwrap().is_ok()); + assert!(servercert_db.send(IsNameRegistered { name: "test3".into() }).await.unwrap()); + assert_eq!(servercert_db.send(FetchName { cert: cert1.clone() }).await.unwrap().unwrap(), "test3"); + + assert!(servercert_db.send(RegisterServer { cert: cert2.clone(), name: "test4".into() }).await.unwrap().is_ok()); + assert!(servercert_db.send(IsNameRegistered { name: "test4".into() }).await.unwrap()); + assert_eq!(servercert_db.send(FetchName { cert: cert2.clone() }).await.unwrap().unwrap(), "test4"); + + assert_eq!(servercert_db.send(UnregisterServer { cert: cert1.clone() }).await.unwrap().unwrap(), "test3"); + assert!(!servercert_db.send(IsNameRegistered { name: "test3".into() }).await.unwrap()); + assert!(servercert_db.send(FetchName { cert: cert1.clone() }).await.unwrap().is_none()); + assert!(servercert_db.send(UnregisterServer { cert: cert1.clone() }).await.unwrap().is_none()); + + assert!(servercert_db.send(RegisterServer { cert: cert2.clone(), name: "test4".into() }).await.unwrap().is_err()); + assert!(servercert_db.send(IsNameRegistered { name: "test4".into() }).await.unwrap()); + assert_eq!(servercert_db.send(FetchName { cert: cert2.clone() }).await.unwrap().unwrap(), "test4"); + } } \ No newline at end of file