diff --git a/src/utils/network_utils.rs b/src/utils/network_utils.rs index 6b2d1fa..0d46e90 100644 --- a/src/utils/network_utils.rs +++ b/src/utils/network_utils.rs @@ -62,9 +62,56 @@ pub fn parse_ip(ip: &str) -> Option { #[cfg(test)] mod test { - use std::net::{IpAddr, Ipv4Addr, Ipv6Addr}; + use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr}; + use std::str::FromStr; - use crate::utils::network_utils::parse_ip; + use actix_web::test::TestRequest; + + use crate::utils::network_utils::{get_remote_ip, parse_ip}; + + #[test] + fn test_get_remote_ip() { + let req = TestRequest::default() + .peer_addr(SocketAddr::from_str("192.168.1.1:1000").unwrap()) + .to_http_request(); + assert_eq!(get_remote_ip(&req, None), "192.168.1.1"); + } + + #[test] + fn test_get_remote_ip_from_proxy() { + let req = TestRequest::default() + .peer_addr(SocketAddr::from_str("192.168.1.1:1000").unwrap()) + .insert_header(("X-Forwarded-For", "1.1.1.1")) + .to_http_request(); + assert_eq!(get_remote_ip(&req, Some("192.168.1.1")), "1.1.1.1"); + } + + #[test] + fn test_get_remote_ip_from_proxy_2() { + let req = TestRequest::default() + .peer_addr(SocketAddr::from_str("192.168.1.1:1000").unwrap()) + .insert_header(("X-Forwarded-For", "1.1.1.1, 1.2.2.2")) + .to_http_request(); + assert_eq!(get_remote_ip(&req, Some("192.168.1.1")), "1.1.1.1"); + } + + #[test] + fn test_get_remote_ip_from_no_proxy() { + let req = TestRequest::default() + .peer_addr(SocketAddr::from_str("192.168.1.1:1000").unwrap()) + .insert_header(("X-Forwarded-For", "1.1.1.1, 1.2.2.2")) + .to_http_request(); + assert_eq!(get_remote_ip(&req, None), "192.168.1.1"); + } + + #[test] + fn test_get_remote_ip_from_other_proxy() { + let req = TestRequest::default() + .peer_addr(SocketAddr::from_str("192.168.1.1:1000").unwrap()) + .insert_header(("X-Forwarded-For", "1.1.1.1, 1.2.2.2")) + .to_http_request(); + assert_eq!(get_remote_ip(&req, Some("192.168.1.2")), "192.168.1.1"); + } #[test] fn parse_bad_ip() {