std: move "mod tests/benches" to separate files
Also doing fmt inplace as requested.
This commit is contained in:
@@ -3,6 +3,9 @@
|
||||
//! This module is "publicly exported" through the `FromStr` implementations
|
||||
//! below.
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests;
|
||||
|
||||
use crate::error::Error;
|
||||
use crate::fmt;
|
||||
use crate::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
|
||||
@@ -321,146 +324,3 @@ impl Error for AddrParseError {
|
||||
"invalid IP address syntax"
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
// FIXME: These tests are all excellent candidates for AFL fuzz testing
|
||||
use crate::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
|
||||
use crate::str::FromStr;
|
||||
|
||||
const PORT: u16 = 8080;
|
||||
|
||||
const IPV4: Ipv4Addr = Ipv4Addr::new(192, 168, 0, 1);
|
||||
const IPV4_STR: &str = "192.168.0.1";
|
||||
const IPV4_STR_PORT: &str = "192.168.0.1:8080";
|
||||
|
||||
const IPV6: Ipv6Addr = Ipv6Addr::new(0x2001, 0xdb8, 0, 0, 0, 0, 0xc0a8, 0x1);
|
||||
const IPV6_STR_FULL: &str = "2001:db8:0:0:0:0:c0a8:1";
|
||||
const IPV6_STR_COMPRESS: &str = "2001:db8::c0a8:1";
|
||||
const IPV6_STR_V4: &str = "2001:db8::192.168.0.1";
|
||||
const IPV6_STR_PORT: &str = "[2001:db8::c0a8:1]:8080";
|
||||
|
||||
#[test]
|
||||
fn parse_ipv4() {
|
||||
let result: Ipv4Addr = IPV4_STR.parse().unwrap();
|
||||
assert_eq!(result, IPV4);
|
||||
|
||||
assert!(Ipv4Addr::from_str(IPV4_STR_PORT).is_err());
|
||||
assert!(Ipv4Addr::from_str(IPV6_STR_FULL).is_err());
|
||||
assert!(Ipv4Addr::from_str(IPV6_STR_COMPRESS).is_err());
|
||||
assert!(Ipv4Addr::from_str(IPV6_STR_V4).is_err());
|
||||
assert!(Ipv4Addr::from_str(IPV6_STR_PORT).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_ipv6() {
|
||||
let result: Ipv6Addr = IPV6_STR_FULL.parse().unwrap();
|
||||
assert_eq!(result, IPV6);
|
||||
|
||||
let result: Ipv6Addr = IPV6_STR_COMPRESS.parse().unwrap();
|
||||
assert_eq!(result, IPV6);
|
||||
|
||||
let result: Ipv6Addr = IPV6_STR_V4.parse().unwrap();
|
||||
assert_eq!(result, IPV6);
|
||||
|
||||
assert!(Ipv6Addr::from_str(IPV4_STR).is_err());
|
||||
assert!(Ipv6Addr::from_str(IPV4_STR_PORT).is_err());
|
||||
assert!(Ipv6Addr::from_str(IPV6_STR_PORT).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_ip() {
|
||||
let result: IpAddr = IPV4_STR.parse().unwrap();
|
||||
assert_eq!(result, IpAddr::from(IPV4));
|
||||
|
||||
let result: IpAddr = IPV6_STR_FULL.parse().unwrap();
|
||||
assert_eq!(result, IpAddr::from(IPV6));
|
||||
|
||||
let result: IpAddr = IPV6_STR_COMPRESS.parse().unwrap();
|
||||
assert_eq!(result, IpAddr::from(IPV6));
|
||||
|
||||
let result: IpAddr = IPV6_STR_V4.parse().unwrap();
|
||||
assert_eq!(result, IpAddr::from(IPV6));
|
||||
|
||||
assert!(IpAddr::from_str(IPV4_STR_PORT).is_err());
|
||||
assert!(IpAddr::from_str(IPV6_STR_PORT).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_socket_v4() {
|
||||
let result: SocketAddrV4 = IPV4_STR_PORT.parse().unwrap();
|
||||
assert_eq!(result, SocketAddrV4::new(IPV4, PORT));
|
||||
|
||||
assert!(SocketAddrV4::from_str(IPV4_STR).is_err());
|
||||
assert!(SocketAddrV4::from_str(IPV6_STR_FULL).is_err());
|
||||
assert!(SocketAddrV4::from_str(IPV6_STR_COMPRESS).is_err());
|
||||
assert!(SocketAddrV4::from_str(IPV6_STR_V4).is_err());
|
||||
assert!(SocketAddrV4::from_str(IPV6_STR_PORT).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_socket_v6() {
|
||||
let result: SocketAddrV6 = IPV6_STR_PORT.parse().unwrap();
|
||||
assert_eq!(result, SocketAddrV6::new(IPV6, PORT, 0, 0));
|
||||
|
||||
assert!(SocketAddrV6::from_str(IPV4_STR).is_err());
|
||||
assert!(SocketAddrV6::from_str(IPV4_STR_PORT).is_err());
|
||||
assert!(SocketAddrV6::from_str(IPV6_STR_FULL).is_err());
|
||||
assert!(SocketAddrV6::from_str(IPV6_STR_COMPRESS).is_err());
|
||||
assert!(SocketAddrV6::from_str(IPV6_STR_V4).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn parse_socket() {
|
||||
let result: SocketAddr = IPV4_STR_PORT.parse().unwrap();
|
||||
assert_eq!(result, SocketAddr::from((IPV4, PORT)));
|
||||
|
||||
let result: SocketAddr = IPV6_STR_PORT.parse().unwrap();
|
||||
assert_eq!(result, SocketAddr::from((IPV6, PORT)));
|
||||
|
||||
assert!(SocketAddr::from_str(IPV4_STR).is_err());
|
||||
assert!(SocketAddr::from_str(IPV6_STR_FULL).is_err());
|
||||
assert!(SocketAddr::from_str(IPV6_STR_COMPRESS).is_err());
|
||||
assert!(SocketAddr::from_str(IPV6_STR_V4).is_err());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn ipv6_corner_cases() {
|
||||
let result: Ipv6Addr = "1::".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(1, 0, 0, 0, 0, 0, 0, 0));
|
||||
|
||||
let result: Ipv6Addr = "1:1::".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(1, 1, 0, 0, 0, 0, 0, 0));
|
||||
|
||||
let result: Ipv6Addr = "::1".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1));
|
||||
|
||||
let result: Ipv6Addr = "::1:1".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 1, 1));
|
||||
|
||||
let result: Ipv6Addr = "::".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 0));
|
||||
|
||||
let result: Ipv6Addr = "::192.168.0.1".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0xc0a8, 0x1));
|
||||
|
||||
let result: Ipv6Addr = "::1:192.168.0.1".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(0, 0, 0, 0, 0, 1, 0xc0a8, 0x1));
|
||||
|
||||
let result: Ipv6Addr = "1:1:1:1:1:1:192.168.0.1".parse().unwrap();
|
||||
assert_eq!(result, Ipv6Addr::new(1, 1, 1, 1, 1, 1, 0xc0a8, 0x1));
|
||||
}
|
||||
|
||||
// Things that might not seem like failures but are
|
||||
#[test]
|
||||
fn ipv6_corner_failures() {
|
||||
// No IP address before the ::
|
||||
assert!(Ipv6Addr::from_str("1:192.168.0.1::").is_err());
|
||||
|
||||
// :: must have at least 1 set of zeroes
|
||||
assert!(Ipv6Addr::from_str("1:1:1:1::1:1:1:1").is_err());
|
||||
|
||||
// Need brackets for a port
|
||||
assert!(SocketAddrV6::from_str("1:1:1:1:1:1:1:1:8080").is_err());
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user