equal
deleted
inserted
replaced
|
1 #! perl |
|
2 |
|
3 use 5.010; |
|
4 use Test::More; |
|
5 use strict; |
|
6 use warnings; |
|
7 use File::Basename; |
|
8 |
|
9 use_ok 'DNS::Vi' or BAIL_OUT 'DNS::Vi not found!'; |
|
10 can_ok 'DNS::Vi', qw(ttl2h h2ttl parse nice delta edit update show); |
|
11 |
|
12 # TODO: more tests! |
|
13 is ttl2h(86400), '1d', '-> 1d'; |
|
14 is h2ttl('1d'), 86400, '<- 1d'; |
|
15 |
|
16 sub slurp { |
|
17 local $/ = undef; |
|
18 open(my $x, '<', shift); |
|
19 return <$x>; |
|
20 } |
|
21 |
|
22 # the results must match the t/samples/? files |
|
23 my %result = ( |
|
24 axfr => { |
|
25 RRSETS => 64, |
|
26 SOA => 1, |
|
27 NS => 2, |
|
28 A => 6, |
|
29 TXT => 3, |
|
30 AAAA => 1, |
|
31 MX => 5, |
|
32 }, |
|
33 a => { |
|
34 RRSETS => 32, |
|
35 SOA => 1, |
|
36 NS => 16, |
|
37 A => 9, |
|
38 TXT => 4, |
|
39 AAAA => 0, |
|
40 MX => 0, |
|
41 }, |
|
42 b => { |
|
43 RRSETS => 7, |
|
44 SOA => 1, |
|
45 NS => 2, |
|
46 A => 1, |
|
47 TXT => 3, |
|
48 AAAA => 0, |
|
49 MX => 0, |
|
50 }, |
|
51 c => { |
|
52 RRSETS => 12, |
|
53 SOA => 1, |
|
54 NS => 2, |
|
55 A => 2, |
|
56 TXT => 5, |
|
57 AAAA => 0, |
|
58 MX => 2, |
|
59 }, |
|
60 ); |
|
61 |
|
62 # uniq list of rrtypes we want to test |
|
63 my @sets = do { |
|
64 my %h; |
|
65 @h{ map { keys %{$_} } values %result } = (); |
|
66 grep { $_ ne 'RRSETS' } sort keys %h; |
|
67 }; |
|
68 |
|
69 foreach my $sample (sort keys %result) { |
|
70 my $file = "t/samples/$sample"; |
|
71 |
|
72 subtest "sample $file" => sub { |
|
73 my %result = %{ $result{$sample} }; |
|
74 my @zone = parse(slurp $file); |
|
75 is @zone, $result{RRSETS} => "$sample: $result{RRSETS} RRSETS"; |
|
76 foreach my $type (@sets) { |
|
77 is grep({ $_->{rrset}{rrtype} eq $type } @zone), |
|
78 $result{$type} => "$sample: $result{$type} $type"; |
|
79 } |
|
80 |
|
81 my ($added, $deleted) = delta(\@zone, \@zone); |
|
82 is @$added, 0 => 'nothing added'; |
|
83 is @$deleted, 0 => 'nothing deleted'; |
|
84 } |
|
85 } |
|
86 |
|
87 done_testing(); |