|
Packit |
e6c8bb |
# $Id: 01-resolver.t 1593 2017-09-04 14:23:26Z willem $ -*-perl-*-
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use strict;
|
|
Packit |
e6c8bb |
use Test::More tests => 27;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
BEGIN {
|
|
Packit |
e6c8bb |
eval {
|
|
Packit |
e6c8bb |
open( TOUCH, '>.resolv.conf' ) || die $!; # owned by effective UID
|
|
Packit |
e6c8bb |
close(TOUCH);
|
|
Packit |
e6c8bb |
};
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
use Net::DNS;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
my $class = ref($resolver);
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
for (@Net::DNS::Resolver::ISA) {
|
|
Packit |
e6c8bb |
diag $_ unless /[:]UNIX$/;
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
ok( $resolver->isa('Net::DNS::Resolver'), 'new() created object' );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
ok( $resolver->print, '$resolver->print' );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
ok( $class->new( debug => 1 )->_diag(@Net::DNS::Resolver::ISA), 'debug message' );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{ ## check class methods
|
|
Packit |
e6c8bb |
$class->nameservers(qw(127.0.0.1 ::1));
|
|
Packit |
e6c8bb |
ok( scalar( $class->nameservers ), '$class->nameservers' );
|
|
Packit |
e6c8bb |
$class->searchlist(qw(sub1.example.com sub2.example.com));
|
|
Packit |
e6c8bb |
ok( scalar( $class->searchlist ), '$class->searchlist' );
|
|
Packit |
e6c8bb |
$class->domain('example.com');
|
|
Packit |
e6c8bb |
ok( $class->domain, '$class->domain' );
|
|
Packit |
e6c8bb |
ok( $class->srcport(1234), '$class->srcport' );
|
|
Packit |
e6c8bb |
ok( $class->string(), '$class->string' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{ ## check instance methods
|
|
Packit |
e6c8bb |
ok( $resolver->domain('example.com'), '$resolver->domain' );
|
|
Packit |
e6c8bb |
ok( $resolver->searchlist('example.com'), '$resolver->searchlist' );
|
|
Packit |
e6c8bb |
$resolver->nameservers(qw(127.0.0.1 ::1));
|
|
Packit |
e6c8bb |
ok( scalar( $resolver->nameservers() ), '$resolver->nameservers' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
$resolver->nameservers(qw(127.0.0.1 ::1 ::ffff:127.0.0.1 fe80::1234%1));
|
|
Packit |
e6c8bb |
$resolver->force_v4(0); # set by default if no IPv6
|
|
Packit |
e6c8bb |
$resolver->prefer_v6(1);
|
|
Packit |
e6c8bb |
my ($address) = $resolver->nameserver();
|
|
Packit |
e6c8bb |
is( $address, '::1', '$resolver->prefer_v6(1)' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
$resolver->nameservers(qw(127.0.0.1 ::1));
|
|
Packit |
e6c8bb |
$resolver->force_v6(0);
|
|
Packit |
e6c8bb |
$resolver->prefer_v4(1);
|
|
Packit |
e6c8bb |
my ($address) = $resolver->nameserver();
|
|
Packit |
e6c8bb |
is( $address, '127.0.0.1', '$resolver->prefer_v4(1)' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
$resolver->force_v6(1);
|
|
Packit |
e6c8bb |
ok( !$resolver->nameservers(qw(127.0.0.1)), '$resolver->force_v6(1)' );
|
|
Packit |
e6c8bb |
like( $resolver->errorstring, '/IPv4.+disabled/', 'errorstring: IPv4 disabled' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
$resolver->force_v4(1);
|
|
Packit |
e6c8bb |
ok( !$resolver->nameservers(qw(::)), '$resolver->force_v4(1)' );
|
|
Packit |
e6c8bb |
like( $resolver->errorstring, '/IPv6.+disabled/', 'errorstring: IPv6 disabled' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new();
|
|
Packit |
e6c8bb |
foreach my $ip (qw(127.0.0.1 ::1)) {
|
|
Packit |
e6c8bb |
is( $resolver->srcaddr($ip), $ip, "\$resolver->srcaddr($ip)" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{ ## exercise possibly unused socket code
|
|
Packit |
e6c8bb |
## check for smoke and flames only
|
|
Packit |
e6c8bb |
my $resolver = Net::DNS::Resolver->new( tcp_timeout => 1 );
|
|
Packit |
e6c8bb |
foreach my $ip (qw(127.0.0.1 ::1)) {
|
|
Packit |
e6c8bb |
eval { $resolver->_create_udp_socket($ip) };
|
|
Packit |
e6c8bb |
is( $@, '', "\$resolver->_create_udp_socket($ip)" );
|
|
Packit |
e6c8bb |
eval { $resolver->_create_dst_sockaddr( $ip, 53 ) };
|
|
Packit |
e6c8bb |
is( $@, '', "\$resolver->_create_dst_sockaddr($ip,53)" );
|
|
Packit |
e6c8bb |
eval { $resolver->_create_tcp_socket($ip) };
|
|
Packit |
e6c8bb |
is( $@, '', "\$resolver->_create_tcp_socket($ip)" );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
{ ## check for exception on bogus AUTOLOAD method
|
|
Packit |
e6c8bb |
eval { $resolver->bogus(); };
|
|
Packit |
e6c8bb |
my $exception = $1 if $@ =~ /^(.+)\n/;
|
|
Packit |
e6c8bb |
ok( $exception ||= '', "unknown method:\t[$exception]" );
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
is( $resolver->DESTROY, undef, 'DESTROY() exists to defeat pre-5.18 AUTOLOAD' );
|
|
Packit |
e6c8bb |
}
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
eval { ## exercise warning for make_query_packet()
|
|
Packit |
e6c8bb |
local *STDERR;
|
|
Packit |
e6c8bb |
my $filename = '01-resolver.tmp';
|
|
Packit |
e6c8bb |
open( STDERR, ">$filename" ) || die "Could not open $filename for writing";
|
|
Packit |
e6c8bb |
$resolver->make_query_packet('example.com'); # carp
|
|
Packit |
e6c8bb |
$resolver->make_query_packet('example.com'); # silent
|
|
Packit |
e6c8bb |
close(STDERR);
|
|
Packit |
e6c8bb |
unlink($filename);
|
|
Packit |
e6c8bb |
};
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
exit;
|
|
Packit |
e6c8bb |
|
|
Packit |
e6c8bb |
__END__
|
|
Packit |
e6c8bb |
|