10-recurse.t   [plain text]


# $Id: 10-recurse.t 695 2007-12-28 11:17:12Z olaf $ -*-perl-*-

use Test::More;
use strict;

BEGIN {
	if (-e 't/online.enabled') {

	    #
	    # Some people try to run these on private address space."
	    use IO::Socket::INET;
	    my $sock = IO::Socket::INET->new(PeerAddr => '193.0.14.129', # k.root-servers.net.
					  PeerPort => '25',
					  Proto    => 'udp');
	    
	    
	    unless($sock){
		plan skip_all => "Cannot bind to socket:\n\t".$!."\n";
		diag "This is an indication you do not have network problems";
		exit;
	    }else{

		use Net::IP;
		my $ip=Net::IP->new(inet_ntoa($sock->sockaddr));
	    
		if ($ip->iptype() ne "PUBLIC"){
		    plan skip_all => 'Cannot run these tests from this IP:' .$ip->ip() ;		
		}else{
		    plan tests => 12;
		}
	    }

	} else {

		    plan skip_all => 'Online tests disabled.';		



	}
}


BEGIN { use_ok('Net::DNS::Resolver::Recurse'); }


{
	my $res = Net::DNS::Resolver::Recurse->new;

	isa_ok($res, 'Net::DNS::Resolver::Recurse');

	$res->debug(0);	
	$res->udp_timeout(20);
	
	# Hard code A and K.ROOT-SERVERS.NET hint 
	ok($res->hints("193.0.14.129", "198.41.0.4" ), "hints() set");
	
	ok(%{ $res->{'hints'} }, 'sanity check worked');
	
	my $packet;
	
	# Try a domain that is a CNAME
	$packet = $res->query_dorecursion("www.google.com.","A");
	ok($packet, 'got a packet');
	ok(scalar $packet->answer, 'answer has RRs');
	
	# Try a big hairy one
	undef $packet;
	$packet = $res->query_dorecursion("www.rob.com.au.","A");
	ok($packet, 'got a packet');
	ok(scalar $packet->answer, 'anwer section had RRs');
}

# test the callback



{
	my $res = Net::DNS::Resolver::Recurse->new ;
	my $count;
	$res->debug(1);
	# Hard code root hints, there are some environments that will fail
	# the test otherwise
	$res->hints( qw(
			
			192.33.4.12
			128.8.10.90
			192.203.230.10
			192.5.5.241
			192.112.36.4
			128.63.2.53
			192.36.148.17
			192.58.128.30
			193.0.14.129
			199.7.83.42
			202.12.27.33
			198.41.0.4
			192.228.79.201

			));
 

	$res->recursion_callback(sub {
		my $packet = shift;
		
		isa_ok($packet, 'Net::DNS::Packet');
		
		$count++;
	});

	$res->query_dorecursion('a.t.net-dns.org', 'A');
	
	is($count, 3);
}