mirror of
https://github.com/rustfs/rustfs.git
synced 2026-08-29 08:27:06 +00:00
fix(cache): wire trusted-proxy cache and remove stale cache traces (#2581)
This commit is contained in:
@@ -13,7 +13,9 @@
|
||||
// limitations under the License.
|
||||
|
||||
use axum::http::HeaderMap;
|
||||
use rustfs_trusted_proxies::{ClientInfo, ProxyChainAnalyzer, ProxyValidator, TrustedProxy, TrustedProxyConfig, ValidationMode};
|
||||
use rustfs_trusted_proxies::{
|
||||
CacheConfig, ClientInfo, ProxyChainAnalyzer, ProxyValidator, TrustedProxy, TrustedProxyConfig, ValidationMode,
|
||||
};
|
||||
use std::net::{IpAddr, SocketAddr};
|
||||
use std::str::FromStr;
|
||||
|
||||
@@ -77,3 +79,56 @@ fn test_proxy_chain_too_long() {
|
||||
_ => panic!("Expected ChainTooLong error"),
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_validator_caches_trusted_direct_peer_decision() {
|
||||
let validator = ProxyValidator::with_cache_config(create_test_config(), CacheConfig::default(), None);
|
||||
let peer_addr = Some(SocketAddr::new(IpAddr::from_str("192.168.1.100").unwrap(), 8080));
|
||||
let headers = HeaderMap::new();
|
||||
|
||||
assert_eq!(validator.cache_stats().size, 0);
|
||||
|
||||
let first = validator.validate_request(peer_addr, &headers).unwrap();
|
||||
assert!(first.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 1);
|
||||
|
||||
let second = validator.validate_request(peer_addr, &headers).unwrap();
|
||||
assert!(second.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 1);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_validator_caches_untrusted_direct_peer_decision() {
|
||||
let validator = ProxyValidator::with_cache_config(create_test_config(), CacheConfig::default(), None);
|
||||
let peer_addr = Some(SocketAddr::new(IpAddr::from_str("203.0.113.8").unwrap(), 8080));
|
||||
let headers = HeaderMap::new();
|
||||
|
||||
let first = validator.validate_request(peer_addr, &headers).unwrap();
|
||||
assert!(!first.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 0);
|
||||
|
||||
let second = validator.validate_request(peer_addr, &headers).unwrap();
|
||||
assert!(!second.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_validator_skips_cache_when_peer_addr_is_missing() {
|
||||
let validator = ProxyValidator::with_cache_config(create_test_config(), CacheConfig::default(), None);
|
||||
let headers = HeaderMap::new();
|
||||
|
||||
let client_info = validator.validate_request(None, &headers).unwrap();
|
||||
assert!(!client_info.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_validator_skips_cache_for_unspecified_peer_addr() {
|
||||
let validator = ProxyValidator::with_cache_config(create_test_config(), CacheConfig::default(), None);
|
||||
let peer_addr = Some(SocketAddr::new(IpAddr::from([0, 0, 0, 0]), 0));
|
||||
let headers = HeaderMap::new();
|
||||
|
||||
let client_info = validator.validate_request(peer_addr, &headers).unwrap();
|
||||
assert!(!client_info.is_from_trusted_proxy);
|
||||
assert_eq!(validator.cache_stats().size, 0);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user