Blame t/06-packet-unique-push.t

Packit e6c8bb
# $Id: 06-packet-unique-push.t 1561 2017-04-19 13:08:13Z willem $
Packit e6c8bb
Packit e6c8bb
use strict;
Packit e6c8bb
Packit e6c8bb
BEGIN {
Packit e6c8bb
	use Test::More tests => 45;
Packit e6c8bb
Packit e6c8bb
	use_ok('Net::DNS');
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
# Matching of RR name is not case sensitive
Packit e6c8bb
my $domain = 'example.com';
Packit e6c8bb
my $method = 'unique_push';
Packit e6c8bb
my $packet = Net::DNS::Packet->new($domain);
Packit e6c8bb
Packit e6c8bb
my $rr_1 = Net::DNS::RR->new('bla.foo 100 IN TXT "text" ;lower case');
Packit e6c8bb
my $rr_2 = Net::DNS::RR->new('bla.Foo 100 IN Txt "text" ;mixed case');
Packit e6c8bb
my $rr_3 = Net::DNS::RR->new('bla.foo 100 IN TXT "mixed CASE"');
Packit e6c8bb
my $rr_4 = Net::DNS::RR->new('bla.foo 100 IN TXT "MIXED case"');
Packit e6c8bb
Packit e6c8bb
$packet->unique_push( "answer", $rr_1 );
Packit e6c8bb
$packet->unique_push( "answer", $rr_2 );
Packit e6c8bb
is( $packet->header->ancount, 1, "unique_push  case sensitivity test 1" );
Packit e6c8bb
Packit e6c8bb
$packet->unique_push( "answer", $rr_3 );
Packit e6c8bb
$packet->unique_push( "answer", $rr_4 );
Packit e6c8bb
is( $packet->header->ancount, 3, "unique_push  case sensitivity test 2" );
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my %sections = (
Packit e6c8bb
	answer	   => 'ancount',
Packit e6c8bb
	authority  => 'nscount',
Packit e6c8bb
	additional => 'arcount',
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
my @tests = (
Packit e6c8bb
	[	1,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		],
Packit e6c8bb
	[	2,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('bar.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		],
Packit e6c8bb
	[	1,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 90 IN A 192.0.2.1'),
Packit e6c8bb
		],
Packit e6c8bb
	[	3,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.2'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.3'),
Packit e6c8bb
		],
Packit e6c8bb
	[	3,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.2'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.3'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		],
Packit e6c8bb
	[	3,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.2'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.1'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 IN A 192.0.2.4'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com 60 HS A 192.0.2.4'),
Packit e6c8bb
		],
Packit e6c8bb
	[	3,
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com IN A'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com ANY A'),
Packit e6c8bb
		Net::DNS::RR->new('foo.example.com NONE A'),
Packit e6c8bb
		],
Packit e6c8bb
	);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
foreach my $test (@tests) {
Packit e6c8bb
	my ( $expect, @rrs ) = @$test;
Packit e6c8bb
Packit e6c8bb
	while ( my ( $section, $count_meth ) = each %sections ) {
Packit e6c8bb
Packit e6c8bb
		my $packet = new Net::DNS::Update($domain);
Packit e6c8bb
Packit e6c8bb
		$packet->$method( $section => @rrs );
Packit e6c8bb
Packit e6c8bb
		my $count = $packet->header->$count_meth();
Packit e6c8bb
		is( $count, $expect, "$method  $section	=> RR, RR, ..." );
Packit e6c8bb
Packit e6c8bb
	}
Packit e6c8bb
Packit e6c8bb
	#
Packit e6c8bb
	# Now do it again, pushing each RR individually.
Packit e6c8bb
	#
Packit e6c8bb
	while ( my ( $section, $count_meth ) = each %sections ) {
Packit e6c8bb
Packit e6c8bb
		my $packet = new Net::DNS::Update($domain);
Packit e6c8bb
Packit e6c8bb
		foreach my $rr (@rrs) {
Packit e6c8bb
			$packet->$method( $section => $rr );
Packit e6c8bb
		}
Packit e6c8bb
Packit e6c8bb
		my $count = $packet->header->$count_meth();
Packit e6c8bb
		is( $count, $expect, "$method  $section	=> RR" );
Packit e6c8bb
	}
Packit e6c8bb
}
Packit e6c8bb