mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-17 01:08:53 +00:00
Merge pull request #114 from achanda/ipv6-netmask
Check against specific errors in parsing test
This commit is contained in:
19
src/ipv4.rs
19
src/ipv4.rs
@ -64,7 +64,10 @@ impl Ipv4Network {
|
|||||||
pub fn iter(&self) -> Ipv4NetworkIterator {
|
pub fn iter(&self) -> Ipv4NetworkIterator {
|
||||||
let start = u32::from(self.network());
|
let start = u32::from(self.network());
|
||||||
let end = start + (self.size() - 1);
|
let end = start + (self.size() - 1);
|
||||||
Ipv4NetworkIterator { next: Some(start), end }
|
Ipv4NetworkIterator {
|
||||||
|
next: Some(start),
|
||||||
|
end,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn ip(&self) -> Ipv4Addr {
|
pub fn ip(&self) -> Ipv4Addr {
|
||||||
@ -244,7 +247,7 @@ impl FromStr for Ipv4Network {
|
|||||||
} else {
|
} else {
|
||||||
parse_prefix(v, IPV4_BITS)?
|
parse_prefix(v, IPV4_BITS)?
|
||||||
}
|
}
|
||||||
},
|
}
|
||||||
None => IPV4_BITS,
|
None => IPV4_BITS,
|
||||||
};
|
};
|
||||||
Ipv4Network::new(addr, prefix)
|
Ipv4Network::new(addr, prefix)
|
||||||
@ -484,8 +487,11 @@ mod test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn parse_netmask_broken() {
|
fn parse_netmask_broken_v4() {
|
||||||
"192.168.1.0/255.0.255.0".parse::<Ipv4Network>().unwrap_err();
|
assert_eq!(
|
||||||
|
"192.168.1.0/255.0.255.0".parse::<Ipv4Network>(),
|
||||||
|
Err(IpNetworkError::InvalidPrefix)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -647,6 +653,9 @@ mod test {
|
|||||||
let high_addrs: Vec<Ipv4Addr> = high.iter().collect();
|
let high_addrs: Vec<Ipv4Addr> = high.iter().collect();
|
||||||
assert_eq!(256, high_addrs.len());
|
assert_eq!(256, high_addrs.len());
|
||||||
assert_eq!("255.255.255.0".parse::<Ipv4Addr>().unwrap(), high_addrs[0]);
|
assert_eq!("255.255.255.0".parse::<Ipv4Addr>().unwrap(), high_addrs[0]);
|
||||||
assert_eq!("255.255.255.255".parse::<Ipv4Addr>().unwrap(), high_addrs[255]);
|
assert_eq!(
|
||||||
|
"255.255.255.255".parse::<Ipv4Addr>().unwrap(),
|
||||||
|
high_addrs[255]
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
src/ipv6.rs
12
src/ipv6.rs
@ -309,6 +309,14 @@ mod test {
|
|||||||
assert_eq!(cidr.prefix(), 24);
|
assert_eq!(cidr.prefix(), 24);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn parse_netmask_broken_v6() {
|
||||||
|
assert_eq!(
|
||||||
|
"FF01:0:0:17:0:0:0:2/255.255.255.0".parse::<Ipv6Network>(),
|
||||||
|
Err(IpNetworkError::InvalidPrefix)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn create_v6_invalid_prefix() {
|
fn create_v6_invalid_prefix() {
|
||||||
let cidr = Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1), 129);
|
let cidr = Ipv6Network::new(Ipv6Addr::new(0, 0, 0, 0, 0, 0, 0, 1), 129);
|
||||||
@ -597,7 +605,9 @@ mod test {
|
|||||||
let low_addrs: Vec<Ipv6Addr> = low.iter().collect();
|
let low_addrs: Vec<Ipv6Addr> = low.iter().collect();
|
||||||
assert_eq!(256, low_addrs.len());
|
assert_eq!(256, low_addrs.len());
|
||||||
|
|
||||||
let high: Ipv6Network = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00/120".parse().unwrap();
|
let high: Ipv6Network = "ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff00/120"
|
||||||
|
.parse()
|
||||||
|
.unwrap();
|
||||||
let high_addrs: Vec<Ipv6Addr> = high.iter().collect();
|
let high_addrs: Vec<Ipv6Addr> = high.iter().collect();
|
||||||
assert_eq!(256, high_addrs.len());
|
assert_eq!(256, high_addrs.len());
|
||||||
}
|
}
|
||||||
|
@ -13,10 +13,10 @@ mod ipv4;
|
|||||||
mod ipv6;
|
mod ipv6;
|
||||||
|
|
||||||
pub use crate::common::IpNetworkError;
|
pub use crate::common::IpNetworkError;
|
||||||
pub use crate::ipv4::{ipv4_mask_to_prefix, Ipv4Network};
|
|
||||||
pub use crate::ipv6::{ipv6_mask_to_prefix, Ipv6Network};
|
|
||||||
use crate::ipv4::Ipv4NetworkIterator;
|
use crate::ipv4::Ipv4NetworkIterator;
|
||||||
|
pub use crate::ipv4::{ipv4_mask_to_prefix, Ipv4Network};
|
||||||
use crate::ipv6::Ipv6NetworkIterator;
|
use crate::ipv6::Ipv6NetworkIterator;
|
||||||
|
pub use crate::ipv6::{ipv6_mask_to_prefix, Ipv6Network};
|
||||||
|
|
||||||
/// Represents a generic network range. This type can have two variants:
|
/// Represents a generic network range. This type can have two variants:
|
||||||
/// the v4 and the v6 case.
|
/// the v4 and the v6 case.
|
||||||
|
Reference in New Issue
Block a user