Blame t/14any.t

Packit Service 69ef42
#!/usr/local/bin/perl
Packit ef9df4
Packit ef9df4
#
Packit ef9df4
# Check whether the ANY DEFINED BY syntax is working
Packit ef9df4
#
Packit ef9df4
Packit ef9df4
BEGIN { require 't/funcs.pl'}
Packit ef9df4
Packit ef9df4
use Convert::ASN1;
Packit ef9df4
Packit ef9df4
print "1..21\n";
Packit ef9df4
Packit ef9df4
btest 1, $asn_str=Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 2, $asn_str->prepare("string STRING") or warn $asn->error;
Packit ef9df4
btest 3, $asn_seq=Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 4, $asn_seq->prepare(q(
Packit ef9df4
  SEQUENCE { 
Packit ef9df4
    integer INTEGER,
Packit ef9df4
    str STRING
Packit ef9df4
  }
Packit ef9df4
)) or warn $asn_seq->error;
Packit ef9df4
Packit ef9df4
btest 5, $asn = Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 6, $asn->prepare(q(
Packit ef9df4
	type OBJECT IDENTIFIER,
Packit ef9df4
	content ANY DEFINED BY type
Packit ef9df4
)) or warn $asn->error;
Packit ef9df4
Packit ef9df4
# Bogus OIDs - testing only!
Packit ef9df4
btest 7, $asn->registeroid("1.1.1.1",$asn_str);
Packit ef9df4
btest 8, $asn->registeroid("1.1.1.2",$asn_seq);
Packit ef9df4
Packit ef9df4
# Encode the first type
Packit ef9df4
my $result = pack("C*", 0x06, 0x03, 0x29, 0x01, 0x01, 0x04, 0x0d, 0x4a, 0x75,
Packit ef9df4
		        0x73, 0x74, 0x20, 0x61, 0x20, 0x73, 0x74, 0x72, 0x69,
Packit ef9df4
                        0x6e, 0x67);
Packit ef9df4
Packit ef9df4
stest 9, $result, $asn->encode(type => "1.1.1.1", content => {string=>"Just a string"});
Packit ef9df4
btest 10, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
stest 11, "Just a string", $ret->{content}->{string};
Packit ef9df4
Packit ef9df4
# Now check the second
Packit ef9df4
Packit ef9df4
$result = pack("C*", 0x06, 0x03, 0x29, 0x01, 0x02, 0x30, 0x11, 0x02,
Packit ef9df4
		     0x01, 0x01, 0x04, 0x0c, 0x61, 0x6e, 0x64, 0x20,
Packit ef9df4
		     0x61, 0x20, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67);
Packit ef9df4
Packit ef9df4
stest 12, $result, $asn->encode(type => "1.1.1.2", 
Packit ef9df4
			        content => {integer=>1, str=>"and a string"});
Packit ef9df4
btest 13, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
ntest 14, 1, $ret->{content}->{integer};
Packit ef9df4
stest 15, "and a string", $ret->{content}->{str};
Packit ef9df4
Packit ef9df4
# Decoding ANY with indefinite length must include the trailing terminator
Packit ef9df4
Packit ef9df4
btest 16, $asn = Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 17, $asn->prepare(q(
Packit ef9df4
        Test2 ::= ANY
Packit ef9df4
        Test1 ::= SEQUENCE OF ANY
Packit ef9df4
)) or warn $asn->error;
Packit ef9df4
Packit ef9df4
$result = pack("H*","3080020109308002010900000000");
Packit ef9df4
Packit ef9df4
btest 18, $ret = $asn->find('Test1')->decode($result);
Packit ef9df4
rtest 19, [pack("H*","020109"),pack("H*","30800201090000")], $ret;
Packit ef9df4
Packit ef9df4
btest 20, $ret = $asn->find('Test2')->decode($result);
Packit ef9df4
stest 21, $result, $ret;