Blame t/21-TSIG-create.t

Packit e6c8bb
# $Id: 21-TSIG-create.t 1439 2015-12-07 10:37:41Z willem $	-*-perl-*-
Packit e6c8bb
Packit e6c8bb
use strict;
Packit e6c8bb
use Test::More;
Packit e6c8bb
use Net::DNS;
Packit e6c8bb
Packit e6c8bb
my @prerequisite = qw(
Packit e6c8bb
		Digest::HMAC
Packit e6c8bb
		Digest::MD5
Packit e6c8bb
		Digest::SHA
Packit e6c8bb
		MIME::Base64
Packit e6c8bb
		);
Packit e6c8bb
Packit e6c8bb
foreach my $package (@prerequisite) {
Packit e6c8bb
	next if eval "require $package";
Packit e6c8bb
	plan skip_all => "$package not installed";
Packit e6c8bb
	exit;
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
plan tests => 11;
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my $tsig = new Net::DNS::RR( type => 'TSIG' );
Packit e6c8bb
my $class = ref($tsig);
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $keyname = 'keyname.example';
Packit e6c8bb
	my $keytext = 'xdX9m8UtQNbJUzUgQ4xDtUNZAmU=';
Packit e6c8bb
	my $tsig    = create $class( $keyname, $keytext );
Packit e6c8bb
	is( ref($tsig), $class, 'create TSIG from argument list' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my $privatekey = 'Khmac-md5.example.+157+53335.private';
Packit e6c8bb
END { unlink($privatekey) if defined $privatekey; }
Packit e6c8bb
Packit e6c8bb
open( KEY, ">$privatekey" ) or die "$privatekey $!";
Packit e6c8bb
print KEY <<'END';
Packit e6c8bb
Private-key-format: v1.2
Packit e6c8bb
Algorithm: 157 (HMAC_MD5)
Packit e6c8bb
Key: ARDJZgtuTDzAWeSGYPAu9uJUkX0=
Packit e6c8bb
END
Packit e6c8bb
close KEY;
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $tsig = create $class($privatekey);
Packit e6c8bb
	is( ref($tsig), $class, 'create TSIG from private key' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my $publickey = 'Khmac-sha1.example.+161+39562.key';
Packit e6c8bb
END { unlink($publickey) if defined $publickey; }
Packit e6c8bb
Packit e6c8bb
open( KEY, ">$publickey" ) or die "$publickey $!";
Packit e6c8bb
print KEY <<'END';
Packit e6c8bb
HMAC-SHA1.example. IN KEY 512 3 161 xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
Packit e6c8bb
END
Packit e6c8bb
close KEY;
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $tsig = create $class($publickey);
Packit e6c8bb
	is( ref($tsig), $class, 'create TSIG from public key' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $packet = new Net::DNS::Packet('query.example');
Packit e6c8bb
	$packet->sign_tsig($privatekey);
Packit e6c8bb
	my $tsig = create $class($packet);
Packit e6c8bb
	is( ref($tsig), $class, 'create TSIG from signed packet' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $chain = eval { create $class($tsig); };
Packit e6c8bb
	is( ref($chain), $class, 'create successor to existing TSIG' );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	eval { create $class(); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "empty argument list\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	eval { create $class(undef); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "argument undefined\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $null = new Net::DNS::RR( type => 'NULL' );
Packit e6c8bb
	eval { create $class($null); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "unexpected argument\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	my $packet = new Net::DNS::Packet('query.example');
Packit e6c8bb
	eval { create $class($packet); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "no TSIG in packet\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my $badprivatekey = 'K+161+39562.private';
Packit e6c8bb
END { unlink($badprivatekey) if defined $badprivatekey; }
Packit e6c8bb
Packit e6c8bb
open( KEY, ">$badprivatekey" ) or die "$badprivatekey $!";
Packit e6c8bb
print KEY <<'END';
Packit e6c8bb
Private-key-format: v1.2
Packit e6c8bb
Algorithm: 161 (HMAC_SHA1)
Packit e6c8bb
Key: xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
Packit e6c8bb
END
Packit e6c8bb
close KEY;
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	eval { create $class($badprivatekey); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "misnamed private key\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
my $dnskey = 'Kbad.example.+161+39562.key';
Packit e6c8bb
END { unlink($dnskey) if defined $dnskey; }
Packit e6c8bb
Packit e6c8bb
open( KEY, ">$dnskey" ) or die "$dnskey $!";
Packit e6c8bb
print KEY <<'END';
Packit e6c8bb
HMAC-SHA1.example. IN DNSKEY 512 3 161 xdX9m8UtQNbJUzUgQ4xDtUNZAmU=
Packit e6c8bb
END
Packit e6c8bb
close KEY;
Packit e6c8bb
Packit e6c8bb
{
Packit e6c8bb
	eval { create $class($dnskey); };
Packit e6c8bb
	my $exception = $1 if $@ =~ /^(.+)\n/;
Packit e6c8bb
	ok( $exception ||= '', "unrecognised public key\t[$exception]" );
Packit e6c8bb
}
Packit e6c8bb
Packit e6c8bb
Packit e6c8bb
__END__
Packit e6c8bb