Convert-BER-XS
view release on metacpan or search on metacpan
t/06_snmp.t view on Meta::CPAN
BEGIN { $| = 1; print "1..14\n"; }
use common::sense;
use Convert::BER::XS ':all';
$Convert::BER::XS::SNMP_PROFILE->_set_default;
our $test;
sub ok($;$) {
print $_[0] ? "" : "not ", "ok ", ++$test, " # $_[1]\n";
}
sub fail {
my ($hex, $match) = @_;
y/ //d for $hex;
ok (!eval { ber_decode pack "H*", $hex; 1 }, "# fail $hex");
$@ =~ s/ at .*//s;
ok ($@ =~ $match, "# $@ =~ $match");
}
sub roundtrip {
my ($hex, $is, $hex2) = @_;
$hex2 ||= $hex;
y/ //d for $hex, $hex2;
fail "$hex,", "trailing garbage";
my $bin = pack "H*", $hex;
my $bin2 = pack "H*", $hex2;
my ($dec0, $len) = ber_decode_prefix $bin . chr rand 256;
ok ($len == length $bin, "prefix length $len");
my $dec = ber_decode $bin;
ok (&ber_is ($dec, @$is), "decode $hex => @$dec");
my $enc = ber_encode $dec;
ok ($enc eq $bin2, "encode $hex2 == " . unpack "H*", $enc);
ok (($enc eq ber_encode $dec0), "identical recode");
}
roundtrip "400416583721", [ASN_APPLICATION, SNMP_IPADDRESS, 0, "22.88.55.33"];
fail "4003165837", "invalid length 3";
roundtrip "42050087654321", [ASN_APPLICATION, SNMP_UNSIGNED32, 0, 0x87654321];
( run in 1.971 second using v1.01-cache-2.11-cpan-364913b4093 )