t/10-minimal.t
changeset 49 62b17372f2d8
parent 48 a9a9b00be37f
equal deleted inserted replaced
48:a9a9b00be37f 49:62b17372f2d8
     1 #! perl
       
     2 use 5.014;
       
     3 use strict;
       
     4 use warnings;
       
     5 use Test::More;
       
     6 use File::Temp;
       
     7 use Test::Exception;
       
     8 use Storable qw(freeze);
       
     9 
       
    10 my $tmp = File::Temp->new;
       
    11 $tmp->print(<<__);
       
    12 # kommentar
       
    13     a # more comment
       
    14     b
       
    15     c ns1 ns2 # comment
       
    16     d
       
    17 __
       
    18 $tmp->flush;
       
    19 
       
    20 
       
    21 sub dig_serial { (split " ", `dig +short SOA @_`)[2] }
       
    22 sub dig_ns { sort map { /(\S+?)\.?$/ } `dig +short NS @_` }
       
    23 
       
    24 # we require it, it's not a normal module
       
    25 use blib;
       
    26 use_ok('Nagios::Check::DNS::delegation')
       
    27   or BAIL_OUT q{can't require the module};
       
    28 
       
    29 
       
    30 subtest 'tools' => sub {
       
    31     is_deeply [sort +uniq(qw(a b a c))], [qw(a b c)] => 'uniq helper';
       
    32 
       
    33     # get_domains should read a list of names, either from a file
       
    34     # or from the arguments, or from a combination of both
       
    35     is_deeply [get_domains(sources => [qw/a b c/])], [qw(a b c)] => 'domains from list';
       
    36     is_deeply [get_domains(sources => ["$tmp"])],    [qw(a b c d)] => 'domains from file';
       
    37     is_deeply [get_domains(sources => ['a', "$tmp", 'z'])], [qw(a a b c d z)] => 'domains from args and file';
       
    38 
       
    39     is_deeply {read_override("$tmp")}, { c => ['ns1', 'ns2'] }, 'override file';
       
    40 
       
    41     my %google = ( nameservers => [qw/8.8.8.8 8.8.4.4/]);
       
    42     my %level3 = ( nameservers => [qw/209.244.0.3 209.244.0.4/]);
       
    43 
       
    44     my $r1a = Net::DNS::Resolver->new(%google);
       
    45     my $r1b = Net::DNS::Resolver->new(%google);
       
    46 
       
    47     my $r2a = Net::DNS::Resolver->new(%level3);
       
    48     my $r2b = Net::DNS::Resolver->new(%level3);
       
    49 
       
    50     is $r1a, $r1b => 'same google';
       
    51     is $r2a, $r2b => 'same level3';
       
    52     isnt $r1a, $r2a => 'not same google/level3';
       
    53 
       
    54     my (@a, @b);
       
    55     @a = qw[8.8.8.1];
       
    56     my $r3a = Net::DNS::Resolver->new(nameservers => \@a);
       
    57     @a = qw[8.8.4.2];
       
    58     my $r3b = Net::DNS::Resolver->new(nameservers => \@a);
       
    59     isnt $r3a, $r3b => 'same ref, but not same object';
       
    60 
       
    61     @b = @a;
       
    62     is freeze(\@a), freeze(\@b) => 'frozen lists';
       
    63     my $r3c = Net::DNS::Resolver->new(nameservers => \@b);
       
    64     is $r3b, $r3c => 'same servers, but not same ref';
       
    65 
       
    66 };
       
    67 
       
    68 
       
    69 
       
    70 for (qw(heise.de schlittermann.de google.com debian.org example.org)) {
       
    71 
       
    72     subtest $_ => sub {
       
    73 
       
    74         throws_ok { ns($_, nameservers => [qw/8.8.8.8/], aa => 1) }
       
    75         qr/no aa/ => 'not authoritive @8.8.8.8';
       
    76         is_deeply [ns($_)], [dig_ns($_)] => "ns \@default";
       
    77         is_deeply [ns($_, nameservers => [qw/8.8.4.4/])],
       
    78           [dig_ns('@8.8.4.4', $_)] => "ns \@8.8.4.4";
       
    79         is serial($_, nameservers => [qw/8.8.8.8/]),
       
    80           dig_serial('@8.8.8.8', $_) => 'serial';
       
    81     };
       
    82 
       
    83 }
       
    84 
       
    85 # ns for some domain we're not the master for, should be refused
       
    86 throws_ok { ns('example.org', nameservers => [qw/f.nic.de a.nic.de/]) }
       
    87 qr/^REFUSED/ => 'throws on refused query';
       
    88 throws_ok { ns('safasdfasdfrandomadsfefvddeas') }
       
    89 qr/^NXDOMAIN/ => 'throws on nx domain';
       
    90 
       
    91 ok ns_ok('schlittermann.de', ['212.80.235.130']) => 'ns_ok for schlittermann.de';
       
    92 throws_ok { ns_ok('heise.de', ['212.80.235.130']) } qr/no aa|differ|REFUSED/ => 'ns_ok for heise.de';
       
    93 throws_ok { ns_ok('heise.de', ['8.8.8.8']) } qr/no aa|differ|REFUSED/ => 'ns_ok for heise.de';
       
    94 
       
    95 # serial
       
    96 
       
    97 done_testing();
       
    98 
       
    99 # vim:sts=4 sw=4 ts=8: