init
Some checks are pending
CI / build (push) Waiting to run
CI / deploy (push) Blocked by required conditions
Some checks are pending
CI / build (push) Waiting to run
CI / deploy (push) Blocked by required conditions
This commit is contained in:
40
tests/eui48_test.v
Normal file
40
tests/eui48_test.v
Normal file
@ -0,0 +1,40 @@
|
||||
import netaddr
|
||||
|
||||
fn test_eui48_from_string() {
|
||||
expected := netaddr.Eui48.from_octets([u8(0x0a), 0x96, 0x7a, 0x87, 0x4a, 0xe3]!)
|
||||
assert netaddr.Eui48.from_string('0a-96-7a-87-4a-e3')! == expected
|
||||
assert netaddr.Eui48.from_string('0a:96:7a:87:4a:e3')! == expected
|
||||
assert netaddr.Eui48.from_string('0a96.7a87.4ae3')! == expected
|
||||
assert netaddr.Eui48.from_string('0a967a874ae3')! == expected
|
||||
assert netaddr.Eui48.from_string(u64(4123532145345345).hex()) or { netaddr.Eui48{} } == netaddr.Eui48{}
|
||||
}
|
||||
|
||||
fn test_eui48_format() {
|
||||
mac := netaddr.Eui48.from_octets([u8(0x0a), 0x96, 0x7a, 0x87, 0x4a, 0xe3]!)
|
||||
assert mac.str() == '0a-96-7a-87-4a-e3'
|
||||
assert mac.format(.canonical) == '0a-96-7a-87-4a-e3'
|
||||
assert mac.format(.unix) == '0a:96:7a:87:4a:e3'
|
||||
assert mac.format(.hextets) == '0a96.7a87.4ae3'
|
||||
assert mac.format(.bare) == '0a967a874ae3'
|
||||
assert netaddr.Eui48{}.format(.hextets) == '0000.0000.0000'
|
||||
}
|
||||
|
||||
fn test_eui48_tests() {
|
||||
mac := netaddr.Eui48.from_octets([u8(0x10), 0xff, 0xe0, 0x4b, 0xe6, 0xb8]!)
|
||||
assert mac.is_universal()
|
||||
assert mac.is_unicast()
|
||||
}
|
||||
|
||||
fn test_eui48_ipv6_link_local() {
|
||||
mac := netaddr.Eui48.from_octets([u8(0x10), 0xff, 0xe0, 0x4b, 0xe6, 0xb8]!)
|
||||
assert mac.ipv6_link_local().str() == 'fe80::12ff:e0ff:fe4b:e6b8'
|
||||
}
|
||||
|
||||
fn test_eui48_random() {
|
||||
mac_a := netaddr.Eui48.random()
|
||||
assert mac_a.is_local()
|
||||
assert mac_a.is_unicast()
|
||||
mac_b := netaddr.Eui48.random(oui: [u8(0x02), 0x00, 0x00]!)
|
||||
assert mac_b.is_local()
|
||||
assert mac_b.is_unicast()
|
||||
}
|
22
tests/eui64_test.v
Normal file
22
tests/eui64_test.v
Normal file
@ -0,0 +1,22 @@
|
||||
import netaddr
|
||||
|
||||
fn test_eui48_from_string() {
|
||||
expected := netaddr.Eui64.new(0x0a, 0x96, 0x7a, 0xff, 0xfe, 0x87, 0x4a, 0xe3)
|
||||
assert netaddr.Eui64.from_string('0a-96-7a-ff-fe-87-4a-e3')! == expected
|
||||
assert netaddr.Eui64.from_string('0a:96:7a:ff:fe:87:4a:e3')! == expected
|
||||
assert netaddr.Eui64.from_string('0a96.7aff.fe87.4ae3')! == expected
|
||||
assert netaddr.Eui64.from_string('0a967afffe874ae3')! == expected
|
||||
}
|
||||
|
||||
fn test_eui48_format() {
|
||||
eui := netaddr.Eui64.new(0x0a, 0x96, 0x7a, 0xff, 0xfe, 0x87, 0x4a, 0xe3)
|
||||
assert eui.str() == '0a-96-7a-ff-fe-87-4a-e3'
|
||||
assert eui.format(.canonical) == '0a-96-7a-ff-fe-87-4a-e3'
|
||||
assert eui.format(.unix) == '0a:96:7a:ff:fe:87:4a:e3'
|
||||
assert eui.format(.hextets) == '0a96.7aff.fe87.4ae3'
|
||||
assert eui.format(.bare) == '0a967afffe874ae3'
|
||||
assert netaddr.Eui64{}.format(.hextets) == '0000.0000.0000.0000'
|
||||
}
|
||||
|
||||
fn test_eui64_modified() {
|
||||
}
|
224
tests/ip6_test.v
Normal file
224
tests/ip6_test.v
Normal file
@ -0,0 +1,224 @@
|
||||
import math.big
|
||||
import netaddr
|
||||
|
||||
fn test_ipv6_addr_new() {
|
||||
a := netaddr.Ipv6Addr.new(0x2001, 0x0db8, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000,
|
||||
0x0002)!
|
||||
b := netaddr.Ipv6Addr.new(0xfe80, 0x0000, 0x0000, 0x0000, 0xd08e, 0x6658, 0x38bd,
|
||||
0x6391,
|
||||
zone_id: 'wlan0'
|
||||
)!
|
||||
assert a.str() == '2001:db8:8:4::2'
|
||||
assert b.str() == 'fe80::d08e:6658:38bd:6391%wlan0'
|
||||
}
|
||||
|
||||
fn test_ipv6_add_segments() {
|
||||
ip := netaddr.Ipv6Addr.new(0x2001, 0x0db8, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000,
|
||||
0x0002)!
|
||||
assert ip.segments() == [u16(0x2001), 0x0db8, 0x0008, 0x0004, 0x0000, 0x0000, 0x0000, 0x0002]!
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_from_to_bigint() {
|
||||
bigint := big.integer_from_string('338288524927261089661396923005694177083')!
|
||||
addr := netaddr.Ipv6Addr.from_bigint(bigint)!
|
||||
assert addr.format(.verbose) == 'fe80:0000:0000:0000:6664:03b4:bd68:ef3b'
|
||||
assert addr.bigint() == bigint
|
||||
addr2 := netaddr.Ipv6Addr.from_string('fe80:0000:0000:0000:6664:03b4:bd68:ef3b')!
|
||||
assert addr2.bigint() == bigint
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_from_string_zeros() {
|
||||
assert netaddr.Ipv6Addr.from_string('::')!.bigint() == big.zero_int
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_from_string() {
|
||||
addrs := {
|
||||
'fe80:0000:0000:0000:0896:7aff:0e87:4ae3': 'fe80::896:7aff:e87:4ae3'
|
||||
'fe80:0:0:0:896:7aff:e87:4ae3': 'fe80::896:7aff:e87:4ae3'
|
||||
'fe80::896:7aff:e87:4ae3': 'fe80::896:7aff:e87:4ae3'
|
||||
'fe80::896:7aff:e87:4ae3%1': 'fe80::896:7aff:e87:4ae3%1'
|
||||
'[fe80::896:7aff:e87:4ae3%2]': 'fe80::896:7aff:e87:4ae3%2'
|
||||
'0:0:0:0:0:0:0:0': '::'
|
||||
'0000:0000:0000:0000:0000:0000:0000:0000': '::'
|
||||
'::': '::'
|
||||
'::1': '::1'
|
||||
'0:0:ff::': '0:0:ff::'
|
||||
'0:0:ff::1': '0:0:ff::1'
|
||||
'::ffff:1:2:3:4': '::ffff:1:2:3:4'
|
||||
'::192.168.1.1': '::192.168.1.1'
|
||||
}
|
||||
for inp, out in addrs {
|
||||
assert netaddr.Ipv6Addr.from_string(inp)!.str() == out
|
||||
}
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_format() {
|
||||
addr1 := netaddr.Ipv6Addr.from_string('fe80::896:7aff:e87:4ae3')!
|
||||
assert addr1.format(.dotted) == 'fe80::896:7aff:e87:4ae3'
|
||||
assert addr1.format(.compact) == 'fe80::896:7aff:e87:4ae3'
|
||||
assert addr1.format(.compact | .dotted) == 'fe80::896:7aff:e87:4ae3'
|
||||
assert addr1.format(.verbose) == 'fe80:0000:0000:0000:0896:7aff:0e87:4ae3'
|
||||
assert addr1.format(.verbose | .dotted) == 'fe80:0000:0000:0000:0896:7aff:0e87:4ae3'
|
||||
assert addr1.format(.compact | .verbose | .dotted) == 'fe80::896:7aff:e87:4ae3'
|
||||
addr2 := netaddr.Ipv6Addr.from_string('::ffff:192.168.3.8')!
|
||||
assert addr2.format(.dotted) == '::ffff:192.168.3.8'
|
||||
assert addr2.format(.compact) == '::ffff:c0a8:308'
|
||||
assert addr2.format(.compact | .dotted) == '::ffff:192.168.3.8'
|
||||
assert addr2.format(.verbose) == '0000:0000:0000:0000:0000:ffff:c0a8:0308'
|
||||
assert addr2.format(.verbose | .dotted) == '0000:0000:0000:0000:0000:ffff:192.168.3.8'
|
||||
assert addr2.format(.compact | .verbose | .dotted) == '::ffff:192.168.3.8'
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_dns_ptr() {
|
||||
expect := '1.9.3.6.d.b.8.3.8.5.6.6.e.8.0.d.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa'
|
||||
assert netaddr.Ipv6Addr.from_string('fe80::d08e:6658:38bd:6391')!.reverse_pointer() == expect
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_with_scope() {
|
||||
addr := netaddr.Ipv6Addr.from_string('fe80::896:7aff:e87:4ae3%lan0')!
|
||||
assert addr.zone_id as string == 'lan0'
|
||||
assert addr.str() == 'fe80::896:7aff:e87:4ae3%lan0'
|
||||
assert netaddr.Ipv6Addr.from_string('fe80::896:7aff:e87:4ae3')!
|
||||
.with_scope('1')!
|
||||
.str() == 'fe80::896:7aff:e87:4ae3%1'
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_is_ipv4_compat() {
|
||||
assert !netaddr.Ipv6Addr.from_string('::')!.is_ipv4_compat()
|
||||
assert !netaddr.Ipv6Addr.from_string('::1')!.is_ipv4_compat()
|
||||
assert netaddr.Ipv6Addr.from_string('::192.168.0.3')!.is_ipv4_compat()
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_is_ipv4_mapped() {
|
||||
assert netaddr.Ipv6Addr.from_string('::ffff:cb00:715a')!.is_ipv4_mapped()
|
||||
assert !netaddr.Ipv6Addr.from_string('::fff:cb00:715a')!.is_ipv4_mapped()
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_ipv4() {
|
||||
assert netaddr.Ipv6Addr.from_string('::ffff:cb00:715a')!.ipv4()!.str() == '203.0.113.90'
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_six_to_four() {
|
||||
assert netaddr.Ipv6Addr.from_string('2002:c001:0203::')!.six_to_four()!.str() == '192.1.2.3'
|
||||
assert netaddr.Ipv6Addr.from_string('2002:09fe:fdfc::')!.six_to_four()!.str() == '9.254.253.252'
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_teredo() {
|
||||
teredo := netaddr.Ipv6Addr.from_string('2001:0000:4136:e378:8000:63bf:3fff:fdd2')!.teredo()!
|
||||
assert teredo.server.str() == '65.54.227.120'
|
||||
assert teredo.flags == 0x8000
|
||||
assert teredo.port == 40_000
|
||||
assert teredo.client.str() == '192.0.2.45'
|
||||
}
|
||||
|
||||
fn test_teredo_addr_ipv6() {
|
||||
teredo := netaddr.TeredoAddr{
|
||||
server: netaddr.Ipv4Addr.from_string('65.54.227.120')!
|
||||
flags: 0x8000
|
||||
port: 40_000
|
||||
client: netaddr.Ipv4Addr.from_string('192.0.2.45')!
|
||||
}
|
||||
assert teredo.ipv6().str() == '2001:0:4136:e378:8000:63bf:3fff:fdd2'
|
||||
}
|
||||
|
||||
fn test_ipv6_addr_tests() {
|
||||
addr := netaddr.Ipv6Addr.from_string('fe80::d08e:6658:38bd:6391')!
|
||||
assert !addr.is_ipv4_mapped()
|
||||
assert !addr.is_ipv4_compat()
|
||||
assert !addr.is_site_local()
|
||||
assert !addr.is_unique_local()
|
||||
assert addr.is_link_local()
|
||||
assert !addr.is_loopback()
|
||||
assert !addr.is_multicast()
|
||||
assert addr.is_unicast()
|
||||
assert addr.is_private()
|
||||
assert !addr.is_global()
|
||||
assert !addr.is_reserved()
|
||||
assert !addr.is_unspecified()
|
||||
}
|
||||
|
||||
fn test_ipv6_is_netmask_is_hostmask() {
|
||||
assert netaddr.Ipv6Addr.from_string('ffff:ffff:ffff:ffff:ffff:ffff:0000:0000')!.is_netmask()
|
||||
assert !netaddr.Ipv6Addr.from_string('ffff:ffff:ffff:ffff:ffff:ffff:0000:ffff')!.is_netmask()
|
||||
assert netaddr.Ipv6Addr.from_string('::ffff:ffff:ffff:ffff')!.is_hostmask()
|
||||
assert !netaddr.Ipv6Addr.from_string('::2a:ffff:ffff:ffff:ffff')!.is_hostmask()
|
||||
}
|
||||
|
||||
fn test_ipv6_net() {
|
||||
net := netaddr.Ipv6Net.from_string('fe80::/64')!
|
||||
assert net.str() == 'fe80::/64'
|
||||
assert net.network_address.str() == 'fe80::'
|
||||
assert net.network_mask.str() == 'ffff:ffff:ffff:ffff::'
|
||||
assert net.host_mask.str() == '::ffff:ffff:ffff:ffff'
|
||||
assert net.broadcast_address.str() == 'fe80::ffff:ffff:ffff:ffff'
|
||||
assert net.host_address == none
|
||||
assert net.prefix_len == 64
|
||||
}
|
||||
|
||||
fn test_ipv6_net_new() {
|
||||
addr := netaddr.Ipv6Addr.from_string('fe80::')!
|
||||
net := netaddr.Ipv6Net.new(addr, 64)!
|
||||
assert net.str() == 'fe80::/64'
|
||||
assert net.network_address.str() == 'fe80::'
|
||||
assert net.network_mask.str() == 'ffff:ffff:ffff:ffff::'
|
||||
assert net.host_mask.str() == '::ffff:ffff:ffff:ffff'
|
||||
assert net.broadcast_address.str() == 'fe80::ffff:ffff:ffff:ffff'
|
||||
assert net.host_address == none
|
||||
assert net.prefix_len == 64
|
||||
}
|
||||
|
||||
fn test_ipv6_net_from_string() {
|
||||
assert netaddr.Ipv6Net.from_string('fe80:ffff::/64')!.str() == 'fe80:ffff::/64'
|
||||
assert netaddr.Ipv6Net.from_string('fe80:ffff::/ffff:ffff:ffff:ffff::')!.str() == 'fe80:ffff::/64'
|
||||
assert netaddr.Ipv6Net.from_string('fe80:ffff::/::ffff:ffff:ffff:ffff')!.str() == 'fe80:ffff::/64'
|
||||
}
|
||||
|
||||
fn test_ipv6_net_format() {
|
||||
net := netaddr.Ipv6Net.from_string('fe80:ffff::/64')!
|
||||
assert net.format(.compact) == 'fe80:ffff::/64'
|
||||
assert net.format(.with_prefix_len) == 'fe80:ffff::/64'
|
||||
assert net.format(.with_network_mask) == 'fe80:ffff::/ffff:ffff:ffff:ffff::'
|
||||
assert net.format(.with_host_mask) == 'fe80:ffff::/::ffff:ffff:ffff:ffff'
|
||||
assert net.format(.verbose) == 'fe80:ffff:0000:0000:0000:0000:0000:0000/64'
|
||||
assert net.format(.verbose | .with_prefix_len) == 'fe80:ffff:0000:0000:0000:0000:0000:0000/64'
|
||||
assert net.format(.verbose | .with_network_mask) == 'fe80:ffff:0000:0000:0000:0000:0000:0000/ffff:ffff:ffff:ffff:0000:0000:0000:0000'
|
||||
assert net.format(.verbose | .with_host_mask) == 'fe80:ffff:0000:0000:0000:0000:0000:0000/0000:0000:0000:0000:ffff:ffff:ffff:ffff'
|
||||
}
|
||||
|
||||
fn test_ipv6_net_next() {
|
||||
net := netaddr.Ipv6Net.from_string('fe80::/64')!
|
||||
mut addrs := []netaddr.Ipv6Addr{}
|
||||
limit := 5
|
||||
for i, addr in net {
|
||||
if i >= limit {
|
||||
break
|
||||
}
|
||||
addrs << addr
|
||||
}
|
||||
assert addrs[0].str() == 'fe80::'
|
||||
assert addrs[1].str() == 'fe80::1'
|
||||
assert addrs[2].str() == 'fe80::2'
|
||||
assert addrs[3].str() == 'fe80::3'
|
||||
}
|
||||
|
||||
fn test_ipv6_net_subnets() {
|
||||
net := netaddr.Ipv6Net.from_string('fe80::/48')!
|
||||
subnets := net.subnets(64)!
|
||||
mut networks := []netaddr.Ipv6Net{}
|
||||
limit := 5
|
||||
for i, subnet in subnets {
|
||||
if i >= limit {
|
||||
break
|
||||
}
|
||||
networks << subnet
|
||||
}
|
||||
assert networks[0].str() == 'fe80::/64'
|
||||
assert networks[1].str() == 'fe80:0:0:1::/64'
|
||||
assert networks[2].str() == 'fe80:0:0:2::/64'
|
||||
assert networks[3].str() == 'fe80:0:0:3::/64'
|
||||
}
|
||||
|
||||
fn test_ipv6_net_supernet() {
|
||||
net := netaddr.Ipv6Net.from_string('fe80:0:0:3::/64')!
|
||||
assert net.supernet(48)!.str() == 'fe80::/48'
|
||||
}
|
188
tests/ip_test.v
Normal file
188
tests/ip_test.v
Normal file
@ -0,0 +1,188 @@
|
||||
import netaddr
|
||||
|
||||
fn test_ipv4_addr_from_string() {
|
||||
assert netaddr.Ipv4Addr.from_string('203.0.113.1')!.str() == '203.0.113.1'
|
||||
}
|
||||
|
||||
fn test_ipv4_addr_from_u32() {
|
||||
assert netaddr.Ipv4Addr.from_u32(0).u8_array() == []u8{len: 4}
|
||||
assert netaddr.Ipv4Addr.from_u32(0).u8_array_fixed() == [4]u8{}
|
||||
assert netaddr.Ipv4Addr.from_u32(u32(2886733829)).str() == '172.16.16.5'
|
||||
}
|
||||
|
||||
fn test_ipv4_addr_tests() {
|
||||
addr := netaddr.Ipv4Addr.from_string('203.0.113.1')!
|
||||
assert !addr.is_link_local()
|
||||
assert !addr.is_loopback()
|
||||
assert !addr.is_multicast()
|
||||
assert addr.is_unicast()
|
||||
assert !addr.is_shared()
|
||||
assert addr.is_private()
|
||||
assert !addr.is_global()
|
||||
assert !addr.is_reserved()
|
||||
assert !addr.is_unspecified()
|
||||
}
|
||||
|
||||
fn test_ipv4_addr_ipv6() {
|
||||
addr := netaddr.Ipv4Addr.from_string('203.0.113.90')!
|
||||
assert addr.ipv6().str() == '::ffff:203.0.113.90'
|
||||
assert addr.ipv6(kind: .compat).str() == '::203.0.113.90'
|
||||
}
|
||||
|
||||
fn test_ipv4_ipv6_addr_arr() {
|
||||
mut addrs := []netaddr.IpAddr{}
|
||||
addrs << netaddr.Ipv4Addr.from_string('203.0.113.90')!
|
||||
addrs << netaddr.Ipv6Addr.from_string('::1')!
|
||||
assert (addrs[0] as netaddr.Ipv4Addr).str() == '203.0.113.90'
|
||||
assert (addrs[1] as netaddr.Ipv6Addr).str() == '::1'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_compare() {
|
||||
assert netaddr.Ipv4Net.from_string('10.0.0.0/24')! < netaddr.Ipv4Net.from_string('10.10.0.0/24')!
|
||||
}
|
||||
|
||||
fn test_ipv4_net() {
|
||||
net := netaddr.Ipv4Net.from_string('198.51.100.0/24')!
|
||||
assert net.str() == '198.51.100.0/24'
|
||||
assert net.prefix_len == 24
|
||||
assert net.network_address.str() == '198.51.100.0'
|
||||
assert net.network_mask.str() == '255.255.255.0'
|
||||
assert net.host_mask.str() == '0.0.0.255'
|
||||
assert net.broadcast_address.str() == '198.51.100.255'
|
||||
assert net.capacity() == 256
|
||||
assert !net.is_global()
|
||||
}
|
||||
|
||||
fn test_ipv4_net_from_string() {
|
||||
net1 := netaddr.Ipv4Net.from_string('198.51.100.0/24')!
|
||||
net2 := netaddr.Ipv4Net.from_string('198.51.100.0/255.255.255.0')!
|
||||
net3 := netaddr.Ipv4Net.from_string('198.51.100.0/0.0.0.255')!
|
||||
assert net1.str() == '198.51.100.0/24'
|
||||
assert net2.str() == '198.51.100.0/24'
|
||||
assert net3.str() == '198.51.100.0/24'
|
||||
assert net1.host_address == none
|
||||
assert net2.host_address == none
|
||||
assert net3.host_address == none
|
||||
assert net3.host_address as netaddr.Ipv4Addr == netaddr.Ipv4Addr{}
|
||||
assert (net3.host_address as netaddr.Ipv4Addr).u8_array_fixed() == [4]u8{}
|
||||
net4 := netaddr.Ipv4Net.from_string('198.51.100.12/24')!
|
||||
net5 := netaddr.Ipv4Net.from_string('198.51.100.12/255.255.255.0')!
|
||||
net6 := netaddr.Ipv4Net.from_string('198.51.100.12/0.0.0.255')!
|
||||
assert net4.str() == '198.51.100.0/24'
|
||||
assert net5.str() == '198.51.100.0/24'
|
||||
assert net6.str() == '198.51.100.0/24'
|
||||
assert (net4.host_address as netaddr.Ipv4Addr).str() == '198.51.100.12'
|
||||
assert (net5.host_address as netaddr.Ipv4Addr).str() == '198.51.100.12'
|
||||
assert (net6.host_address as netaddr.Ipv4Addr).str() == '198.51.100.12'
|
||||
net7 := netaddr.Ipv4Net.from_string('172.16.16.6')!
|
||||
assert net7.str() == '172.16.16.6/32'
|
||||
assert net7.host_address == none
|
||||
}
|
||||
|
||||
fn test_ipv4_net_from_u32() {
|
||||
net1 := netaddr.Ipv4Net.from_u32(3405803776, 24)!
|
||||
net2 := netaddr.Ipv4Net.from_u32(3405803788, 24)!
|
||||
assert net1.str() == '203.0.113.0/24'
|
||||
assert net1.host_address == none
|
||||
assert net2.str() == '203.0.113.0/24'
|
||||
assert (net2.host_address as netaddr.Ipv4Addr).u32() == u32(3405803788)
|
||||
}
|
||||
|
||||
fn test_ipv4_net_host_bits() {
|
||||
net := netaddr.Ipv4Net.from_string('10.0.10.2/29')!
|
||||
assert net.network_address.str() == '10.0.10.0'
|
||||
assert (net.host_address as netaddr.Ipv4Addr).str() == '10.0.10.2'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_0() {
|
||||
net := netaddr.Ipv4Net.from_string('0.0.0.0/0')!
|
||||
assert net.str() == '0.0.0.0/0'
|
||||
assert net.prefix_len == 0
|
||||
assert net.network_address.str() == '0.0.0.0'
|
||||
assert net.network_mask.str() == '0.0.0.0'
|
||||
assert net.host_mask.str() == '255.255.255.255'
|
||||
assert net.broadcast_address.str() == '255.255.255.255'
|
||||
assert net.host_address == none
|
||||
assert net.capacity() == u64(max_u32) + 1
|
||||
}
|
||||
|
||||
fn test_ipv4_net_255() {
|
||||
net := netaddr.Ipv4Net.from_string('255.255.255.255/32')!
|
||||
assert net.str() == '255.255.255.255/32'
|
||||
assert net.prefix_len == 32
|
||||
assert net.network_address.str() == '255.255.255.255'
|
||||
assert net.network_mask.str() == '255.255.255.255'
|
||||
assert net.host_mask.str() == '0.0.0.0'
|
||||
assert net.broadcast_address.str() == '255.255.255.255'
|
||||
assert net.host_address == none
|
||||
assert net.capacity() == 1
|
||||
}
|
||||
|
||||
fn test_ipv4_net_next() {
|
||||
net := netaddr.Ipv4Net.from_string('10.0.10.128/30')!
|
||||
mut addrs := []netaddr.Ipv4Addr{}
|
||||
for addr in net {
|
||||
addrs << addr
|
||||
}
|
||||
assert addrs[0].str() == '10.0.10.128'
|
||||
assert addrs[1].str() == '10.0.10.129'
|
||||
assert addrs[2].str() == '10.0.10.130'
|
||||
assert addrs[3].str() == '10.0.10.131'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_subnets() {
|
||||
net := netaddr.Ipv4Net.from_string('10.0.10.0/24')!
|
||||
subnets := net.subnets(26)!
|
||||
mut networks := []netaddr.Ipv4Net{}
|
||||
for subnet in subnets {
|
||||
networks << subnet
|
||||
}
|
||||
assert networks[0].str() == '10.0.10.0/26'
|
||||
assert networks[1].str() == '10.0.10.64/26'
|
||||
assert networks[2].str() == '10.0.10.128/26'
|
||||
assert networks[3].str() == '10.0.10.192/26'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_nth() {
|
||||
net := netaddr.Ipv4Net.from_string('10.0.10.0/24')!
|
||||
assert net.nth(-2)!.str() == '10.0.10.254'
|
||||
assert net.nth(-1)!.str() == '10.0.10.255'
|
||||
assert net.nth(0)!.str() == '10.0.10.0'
|
||||
assert net.nth(1)!.str() == '10.0.10.1'
|
||||
assert (net.nth(99999) or { netaddr.Ipv4Addr{} }).str() == '0.0.0.0'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_supernet() {
|
||||
net := netaddr.Ipv4Net.from_string('10.129.10.0/24')!
|
||||
supernet := net.supernet(10)!
|
||||
assert supernet.str() == '10.128.0.0/10'
|
||||
}
|
||||
|
||||
fn test_ipv4_net_is_subnet_of() {
|
||||
net1 := netaddr.Ipv4Net.from_string('10.10.0.0/16')!
|
||||
net2 := netaddr.Ipv4Net.from_string('10.10.0.0/24')!
|
||||
assert net2.is_subnet_of(net1)
|
||||
}
|
||||
|
||||
fn test_ipv4_net_is_supernet_of() {
|
||||
net1 := netaddr.Ipv4Net.from_string('10.10.0.0/16')!
|
||||
net2 := netaddr.Ipv4Net.from_string('10.10.0.0/24')!
|
||||
net3 := netaddr.Ipv4Net.from_string('172.16.16.0/24')!
|
||||
assert net1.is_supernet_of(net2)
|
||||
assert !net1.is_supernet_of(net3)
|
||||
}
|
||||
|
||||
fn test_ipv4_net_first_last() {
|
||||
net1 := netaddr.Ipv4Net.from_string('10.0.0.0/24')!
|
||||
net2 := netaddr.Ipv4Net.from_string('10.0.0.0/30')!
|
||||
net3 := netaddr.Ipv4Net.from_string('10.0.0.0/31')!
|
||||
net4 := netaddr.Ipv4Net.from_string('10.0.0.0/32')!
|
||||
assert net1.first().str() == '10.0.0.1'
|
||||
assert net1.last().str() == '10.0.0.254'
|
||||
assert net2.first().str() == '10.0.0.1'
|
||||
assert net2.last().str() == '10.0.0.2'
|
||||
assert net3.first().str() == '10.0.0.0'
|
||||
assert net3.last().str() == '10.0.0.1'
|
||||
assert net4.first().str() == '10.0.0.0'
|
||||
assert net4.last().str() == '10.0.0.0'
|
||||
}
|
Reference in New Issue
Block a user