v0.31.7
This commit is contained in:
1 parent
4cc994b3bc
commit
79fd198949
48 files changed
+922
-202
No files matched your search
@@ -109,4 +109,52 @@ mod tests {
|
||||
assert_eq!(state.buckets.len(), 1);
|
||||
assert_eq!(state.bucket_count, 2);
|
||||
}
|
||||
#[test]
|
||||
fn user_agent_override_is_isolated_from_other_traffic() {
|
||||
let mut settings = Settings {
|
||||
enabled: true,
|
||||
requests: 3,
|
||||
burst: 0,
|
||||
user_agent_limits: vec![UserAgentLimit {
|
||||
pattern: "*BadBot*".into(), requests: 1, window_seconds: 60, burst: 0,
|
||||
}],
|
||||
..Default::default()
|
||||
};
|
||||
settings.validate().unwrap();
|
||||
let limiter = Limiter::new();
|
||||
let ip = "198.51.100.12".parse().unwrap();
|
||||
assert!(limiter.check_with_user_agent(7, "a", ip, None, Some("badbot/1.0"), &settings).is_ok());
|
||||
assert!(limiter.check_with_user_agent(7, "a", ip, None, Some("BADBOT/2"), &settings).is_err());
|
||||
for _ in 0..3 {
|
||||
assert!(limiter.check_with_user_agent(7, "a", ip, None, Some("Browser"), &settings).is_ok());
|
||||
}
|
||||
assert!(limiter.check_with_user_agent(7, "a", ip, None, Some("Browser"), &settings).is_err());
|
||||
// The same IP and UA on a different vhost gets a separate quota.
|
||||
assert!(limiter.check_with_user_agent(7, "b", ip, None, Some("BadBot"), &settings).is_ok());
|
||||
}
|
||||
#[test]
|
||||
fn user_agent_overrides_work_without_base_rate_or_geoip() {
|
||||
let mut settings = Settings {
|
||||
enabled: false,
|
||||
user_agent_limits: vec![UserAgentLimit { pattern: "scanner".into(), requests: 1, window_seconds: 60, burst: 0 }],
|
||||
..Default::default()
|
||||
};
|
||||
settings.validate().unwrap();
|
||||
let limiter = Limiter::new();
|
||||
let ip = "192.0.2.100".parse().unwrap();
|
||||
assert!(limiter.check_with_user_agent(1,"site",ip,None,Some("ScanNER"),&settings).is_ok());
|
||||
assert!(limiter.check_with_user_agent(1,"site",ip,None,Some("scanner"),&settings).is_err());
|
||||
assert!(limiter.check_with_user_agent(1,"site",ip,None,None,&settings).is_ok());
|
||||
}
|
||||
#[test]
|
||||
fn user_agent_override_validation_is_bounded_and_unique() {
|
||||
let mut settings = Settings { user_agent_limits: vec![
|
||||
UserAgentLimit { pattern: "TEST*".into(), ..Default::default() },
|
||||
UserAgentLimit { pattern: "test*".into(), ..Default::default() },
|
||||
], ..Default::default() };
|
||||
assert!(settings.validate().is_err());
|
||||
settings.user_agent_limits[1].pattern = "other".into();
|
||||
assert!(settings.validate().is_ok());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in new issue
Block a user