added tests for buggy function gc_blocklist
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
46d38fe318
commit
31688e9486
@ -12,7 +12,8 @@ use std::collections::HashMap;
|
||||
use std::hash::{Hash, Hasher};
|
||||
use std::path::Path;
|
||||
|
||||
const SERVER: &str = "ipbl.paulbsd.com";
|
||||
const MASTERSERVER: &str = "ipbl.paulbsd.com";
|
||||
const ZMQSUBSCRIPTION: &str = "ipbl";
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Context {
|
||||
@ -49,7 +50,7 @@ impl Context {
|
||||
let debug = Context::argparse().is_present("debug");
|
||||
let server = Context::argparse()
|
||||
.value_of("server")
|
||||
.unwrap_or(format!("https://{}", SERVER).as_str())
|
||||
.unwrap_or(format!("https://{}", MASTERSERVER).as_str())
|
||||
.to_string();
|
||||
|
||||
// Build context
|
||||
@ -79,6 +80,10 @@ impl Context {
|
||||
hashwd: HashMap::new(),
|
||||
};
|
||||
ctx.discovery = ctx.discovery().await.unwrap();
|
||||
|
||||
#[cfg(test)]
|
||||
return ctx;
|
||||
|
||||
print!("Loading config ... ");
|
||||
match ctx.load().await {
|
||||
Ok(_) => {}
|
||||
@ -100,7 +105,7 @@ impl Context {
|
||||
.short('s')
|
||||
.long("server")
|
||||
.value_name("server")
|
||||
.default_value("https://ipbl.paulbsd.com")
|
||||
.default_value(format!("https://{MASTERSERVER}").as_str())
|
||||
.help("Sets a http server")
|
||||
.takes_value(true),
|
||||
)
|
||||
@ -146,23 +151,22 @@ impl Context {
|
||||
|
||||
pub async fn gc_blocklist(&mut self) -> Vec<IpData> {
|
||||
let mut removed: Vec<IpData> = vec![];
|
||||
|
||||
let now: DateTime<Local> = Local::now().trunc_subsecs(0);
|
||||
// nightly, future use
|
||||
//let drained: HashMap<String,IpData> = ctx.blocklist.drain_filter(|k,v| v.parse_date() < mindate)
|
||||
for (id, blocked) in self.blocklist.clone().iter() {
|
||||
for set in self.cfg.sets.clone() {
|
||||
if blocked.src == set.t {
|
||||
let now: DateTime<Local> = Local::now().trunc_subsecs(0);
|
||||
let mindate = now - Duration::minutes(set.blocktime);
|
||||
|
||||
if blocked.parse_date() < mindate {
|
||||
self.blocklist.remove(&id.to_string()).unwrap();
|
||||
removed.push(blocked.clone());
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
removed
|
||||
}
|
||||
|
||||
@ -263,12 +267,12 @@ impl Config {
|
||||
],
|
||||
zmq: HashMap::from([("pubsub".to_string(),ZMQ{
|
||||
t: "pubsub".to_string(),
|
||||
hostname: SERVER.to_string(),
|
||||
hostname: MASTERSERVER.to_string(),
|
||||
port: 9999,
|
||||
subscription: "ipbl".to_string(),
|
||||
subscription: ZMQSUBSCRIPTION.to_string(),
|
||||
}),("reqrep".to_string(),ZMQ {
|
||||
t: "reqrep".to_string(),
|
||||
hostname: SERVER.to_string(),
|
||||
hostname: MASTERSERVER.to_string(),
|
||||
port: 9998,
|
||||
subscription: String::new(),
|
||||
})])
|
||||
@ -383,10 +387,51 @@ impl PartialEq for Set {
|
||||
}
|
||||
}
|
||||
|
||||
impl Eq for Set {}
|
||||
|
||||
impl Hash for Set {
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
self.t.hash(state);
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::ip::*;
|
||||
use Context;
|
||||
|
||||
#[tokio::test]
|
||||
pub async fn test_gc_blocklist() {
|
||||
let mut ctx = Context::new().await;
|
||||
let now: DateTime<Local> = Local::now().trunc_subsecs(0);
|
||||
ctx.blocklist = HashMap::new();
|
||||
ctx.blocklist.insert(
|
||||
"1.1.1.1".to_string(),
|
||||
IpData {
|
||||
ip: "1.1.1.1".to_string(),
|
||||
hostname: "test1".to_string(),
|
||||
date: (now - Duration::minutes(61)).to_rfc3339().to_string(),
|
||||
src: "ssh".to_string(),
|
||||
},
|
||||
);
|
||||
ctx.blocklist.insert(
|
||||
"1.1.1.2".to_string(),
|
||||
IpData {
|
||||
ip: "1.1.1.2".to_string(),
|
||||
hostname: "test2".to_string(),
|
||||
date: (now - Duration::minutes(61)).to_rfc3339().to_string(),
|
||||
src: "http".to_string(),
|
||||
},
|
||||
);
|
||||
ctx.blocklist.insert(
|
||||
"1.1.1.3".to_string(),
|
||||
IpData {
|
||||
ip: "1.1.1.3".to_string(),
|
||||
hostname: "testgood".to_string(),
|
||||
date: (now - Duration::minutes(59)).to_rfc3339().to_string(),
|
||||
src: "http".to_string(),
|
||||
},
|
||||
);
|
||||
let result = ctx.gc_blocklist().await;
|
||||
assert_eq!(result.len(), 2);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user