1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
use Test::More;
use 5.14.2;
use strict;
use warnings;
use List::Util qw[max];
use Zonemaster::Engine::Nameserver;
use Zonemaster::Engine::Util;
BEGIN { use_ok( 'Zonemaster::Engine::Recursor' ) }
my $datafile = 't/recursor.data';
if ( not $ENV{ZONEMASTER_RECORD} ) {
die "Stored data file missing" if not -r $datafile;
Zonemaster::Engine::Nameserver->restore( $datafile );
Zonemaster::Engine::Profile->effective->set( q{no_network}, 1 );
}
my $p = Zonemaster::Engine::Recursor->recurse( 'www.iis.se' );
isa_ok( $p, 'Zonemaster::Engine::Packet' );
ok( $p->answer > 0, 'answer records' );
is( name( ($p->answer)[0]->name ), 'www.iis.se', 'RR name ok' );
my $p2 = Zonemaster::Engine::Recursor->recurse( 'www.wiccainfo.se' );
isa_ok( $p2, 'Zonemaster::Engine::Packet' );
is( scalar( $p2->answer ), 2, 'answer records' );
isa_ok( ($p2->answer)[0], 'Zonemaster::LDNS::RR::CNAME' );
is( name( ($p2->answer)[0]->owner ), 'www.wiccainfo.se', 'RR name ok' );
is( name( ($p2->answer)[0]->cname ), 'spencer.faerywicca.se', 'RR cname ok' );
isa_ok( ($p2->answer)[1], 'Zonemaster::LDNS::RR::A' );
is( name( ($p2->answer)[1]->owner ), 'spencer.faerywicca.se', 'RR name ok' );
is( ($p2->answer)[1]->address, '109.74.12.164', 'RR address ok' );
is_parent( 'iis.se', 'se' );
is_parent( 'www.iis.se', 'iis.se' );
is_parent( 'pp.se', 'se' );
is_parent( 'sno.pp.se', 'se' );
is_parent( '2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.4.9.5.0.7.2.0.0.0.7.4.0.1.0.0.2.ip6.arpa', '0.7.4.0.1.0.0.2.ip6.arpa' );
is_parent( '.', '.' );
is_parent( 'foo.bar.baz.example.org', 'example.org' );
is_parent( 'xx--doesnotexist.se', 'se' );
is_parent( 'xx--doesnotexist.com', 'com' );
is_parent( 'pewc.eu', 'eu' );
is_parent( 'melbourneit.com.au', 'com.au' );
sub is_parent {
my ( $name, $pname ) = @_;
my $pn = Zonemaster::Engine::Recursor->parent( $name );
is( $pn, $pname, "parent for $name is $pn" );
}
my ( $name, $packet ) = Zonemaster::Engine::Recursor->parent( 'www.iis.se' );
isa_ok( $packet, 'Zonemaster::Engine::Packet' );
is( $name, 'iis.se', 'name ok' );
ok( $packet->no_such_record, 'expected packet content' );
my @addr = Zonemaster::Engine::Recursor->get_addresses_for( 'ns.nic.se' );
isa_ok( $_, 'Net::IP::XS' ) for @addr;
is( $addr[0]->short, '212.247.7.228', 'expected address' );
is( $addr[1]->short, '2a00:801:f0:53::53', 'expected address' );
my $ns_count = Zonemaster::Engine::Nameserver->all_known_nameservers;
my $cache_count = keys %Zonemaster::Engine::Nameserver::Cache::object_cache;
ok( $cache_count < $ns_count, 'Fewer cache than ns' );
if ( $ENV{ZONEMASTER_RECORD} ) {
Zonemaster::Engine::Nameserver->save( $datafile );
}
done_testing;
|