Net-DNS-QueryID
view release on metacpan or search on metacpan
t/wrapover.t view on Meta::CPAN
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; print "1..20\n"; }
END {print "not ok 1\n" unless $loaded;}
use Net::DNS::QueryID qw(
id_get
id_clr
id_busy
);
$loaded = 1;
print "ok 1\n";
*mode = \&Net::DNS::QueryID::_mode;
$test = 2;
sub ok {
print "ok $test\n";
++$test;
}
mode(65534); # set "next" ID to 65534 for testing
## test 2 - 5 generate 4 ID's
my $exp = 4;
my @qid;
foreach (1..$exp) {
my $try = id_get();
print "failed to get Query ID\nnot "
unless $try;
push @qid, $try;
&ok;
}
## test 6 check that 4 were generated
my $idvec = mode(0); # retrieve vector set RANDOM mode
my $got = unpack("%32b*",$idvec);
print "got: $got, exp: $exp\nnot "
unless $got == $exp;
&ok;
## test 7 - 10 check that ID's are in cache
foreach(@qid) {
unless (id_busy($_)) {
print "$_ not found in Query ID cache\nnot "
}
&ok;
}
my @exp = (65534, 65535, 1, 2);
## test 11 - 14 check that overflow ID's were created sequentially
foreach(0..$#qid) {
print "got: $qid[$_], exp: $exp[$_]\nnot "
unless $qid[$_] == $exp[$_];
&ok;
}
print STDERR "\tthis may take a while\n";
## test 15 fill remainder of cache in random fashion
foreach(3..(65534 +2 - $got)) {
unless (id_get()) {
print "failed to get/set Query ID\nnot ";
last;
}
}
&ok;
## test 16 check that there are 65534 entries
$idvec = mode(0);
$got = unpack("%32b*",$idvec);
print "got: $got, exp: 65534\nnot "
unless $got == 65534;
&ok;
## test 17 check that one more space exists
print "failed to get one more Query ID\nnot "
unless id_get();
&ok;
print STDERR "\tthis may take a while\n";
## test 18 check that cache is full
print "cache was NOT full and should have been\nnot "
if id_get();
&ok;
## test 19 check busy underflow
print "ID zero present\nnot "
if id_busy(0);
&ok;
## test 20 check busy overflow
print "ID 65536 present \nnot "
if id_busy(65536);
&ok;
( run in 1.207 second using v1.01-cache-2.11-cpan-39bf76dae61 )