diff --git a/src/master/embedded/counter.rs b/src/master/embedded/counter.rs index ecb0d07..a0b8eb4 100644 --- a/src/master/embedded/counter.rs +++ b/src/master/embedded/counter.rs @@ -264,6 +264,18 @@ pub mod tests { .unwrap() } + #[test] + fn mcaptcha_decrement_by_works() { + let mut m = get_mcaptcha(); + for _ in 0..100 { + m.add_visitor(); + } + m.decrement_visitor_by(50); + assert_eq!(m.get_visitors(), 50); + m.decrement_visitor_by(500); + assert_eq!(m.get_visitors(), 0); + } + #[actix_rt::test] async fn counter_defense_tightenup_works() { let addr: MyActor = get_counter().start(); diff --git a/src/mcaptcha.rs b/src/mcaptcha.rs index d166393..a5919c2 100644 --- a/src/mcaptcha.rs +++ b/src/mcaptcha.rs @@ -98,6 +98,18 @@ impl MCaptcha { } } + /// decrements the visitor count by specified count + #[inline] + pub fn decrement_visitor_by(&mut self, count: u32) { + if self.visitor_threshold > 0 { + if self.visitor_threshold >= count { + self.visitor_threshold -= count; + } else { + self.visitor_threshold = 0; + } + } + } + /// get current difficulty factor #[inline] pub fn get_difficulty(&self) -> u32 {