use strict; use warnings; use blib; use Test::More tests => 15; my $ipv4_address = NetAddr::IP->new('192.168.0.1'); my $ipv6_address_v4mapped = NetAddr::IP->new('::ffff:192.168.0.1'); my $ipv6_address = NetAddr::IP->new('2001:db8::1'); #### Class Compilation #### BEGIN { use_ok('Mail::SPF::Util') } #### hostname() #### # We cannot really test Mail::SPF::Util->hostname, as on some systems it simply cannot get # a fully qualified hostname and thus returns undef. #### ipv4_address_to_ipv6() #### { my $ip_address = eval { Mail::SPF::Util->ipv4_address_to_ipv6($ipv4_address) }; isa_ok($ip_address, 'NetAddr::IP', 'Mail::SPF::Util->ipv4_address_to_ipv6() returns NetAddr::IP object'); ok($ip_address == $ipv6_address_v4mapped, 'Mail::SPF::Util->ipv4_address_to_ipv6() yields correct IPv4-mapped IPv6 address'); eval { Mail::SPF::Util->ipv4_address_to_ipv6('192.168.0.1') }; isa_ok($@, 'Mail::SPF::EInvalidOptionValue', 'Mail::SPF::Util->ipv4_address_to_ipv6($string) exception'); eval { Mail::SPF::Util->ipv4_address_to_ipv6($ipv6_address_v4mapped) }; isa_ok($@, 'Mail::SPF::EInvalidOptionValue', 'Mail::SPF::Util->ipv4_address_to_ipv6($ipv6_address) exception'); } #### ipv6_address_to_ipv4() #### { my $ip_address = eval { Mail::SPF::Util->ipv6_address_to_ipv4($ipv6_address_v4mapped) }; isa_ok($ip_address, 'NetAddr::IP', 'Mail::SPF::Util->ipv6_address_to_ipv4() returns NetAddr::IP object'); ok($ip_address == $ipv4_address, 'Mail::SPF::Util->ipv6_address_to_ipv4() yields correct IPv4 address'); eval { Mail::SPF::Util->ipv6_address_to_ipv4('2001:db8::1') }; isa_ok($@, 'Mail::SPF::EInvalidOptionValue', 'Mail::SPF::Util->ipv6_address_to_ipv4($string) exception'); eval { Mail::SPF::Util->ipv6_address_to_ipv4($ipv4_address) }; isa_ok($@, 'Mail::SPF::EInvalidOptionValue', 'Mail::SPF::Util->ipv6_address_to_ipv4($ipv4_address) exception'); } #### ipv6_address_is_ipv4_mapped() #### { my $is_v4mapped; $is_v4mapped = Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv6_address_v4mapped); ok($is_v4mapped, 'Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv6_address_v4mapped)'); $is_v4mapped = Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv6_address); ok((not $is_v4mapped), 'Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv6_address)'); $is_v4mapped = Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv4_address); ok((not $is_v4mapped), 'Mail::SPF::Util->ipv6_address_is_ipv4_mapped($ipv4_address)'); } #### ip_address_reverse() #### { my $reverse_name; $reverse_name = Mail::SPF::Util->ip_address_reverse($ipv4_address); is($reverse_name, '1.0.168.192.in-addr.arpa.', 'Mail::SPF::Util->ip_address_reverse($ipv4_address)'); $reverse_name = Mail::SPF::Util->ip_address_reverse($ipv6_address_v4mapped); is($reverse_name, '1.0.168.192.in-addr.arpa.', 'Mail::SPF::Util->ip_address_reverse($ipv6_address_v4mapped)'); $reverse_name = Mail::SPF::Util->ip_address_reverse($ipv6_address); is($reverse_name, '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa.', 'Mail::SPF::Util->ip_address_reverse($ipv6_address)'); } #### valid_domain_for_ip_address() #### # TODO