Blame t/03seqof.t

Packit ef9df4
#!/usr/local/bin/perl
Packit ef9df4
Packit ef9df4
#
Packit ef9df4
# Test that the primitive operators are 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..35\n";
Packit ef9df4
Packit ef9df4
btest 1, $asn = Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 2, $asn->prepare(' ints SEQUENCE OF INTEGER ') or warn $asn->error;
Packit ef9df4
Packit ef9df4
$result = pack("C*", 0x30, 0x0C, 0x02, 0x01, 0x09, 0x02, 0x01, 0x05,
Packit ef9df4
		     0x02, 0x01, 0x03, 0x02, 0x01, 0x01);
Packit ef9df4
Packit ef9df4
stest 3, $result, $asn->encode(ints => [9,5,3,1]) or warn $asn->error;
Packit ef9df4
btest 4, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
btest 5, exists $ret->{'ints'};
Packit ef9df4
stest 6, "9:5:3:1", join(":", @{$ret->{'ints'}});
Packit ef9df4
Packit ef9df4
##
Packit ef9df4
##
Packit ef9df4
##
Packit ef9df4
Packit ef9df4
$result = pack("C*",
Packit ef9df4
  0x30, 0x25,
Packit ef9df4
    0x30, 0x11,
Packit ef9df4
      0x04, 0x04, ord('f'), ord('r'), ord('e'), ord('d'),
Packit ef9df4
      0x30, 0x09,
Packit ef9df4
	0x04, 0x01, ord('a'),
Packit ef9df4
	0x04, 0x01, ord('b'),
Packit ef9df4
	0x04, 0x01, ord('c'),
Packit ef9df4
    0x30, 0x10,
Packit ef9df4
      0x04, 0x03, ord('j'), ord('o'), ord('e'),
Packit ef9df4
      0x30, 0x09,
Packit ef9df4
	0x04, 0x01, ord('q'),
Packit ef9df4
	0x04, 0x01, ord('w'),
Packit ef9df4
	0x04, 0x01, ord('e'),
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
btest 7, $asn->prepare(' seq SEQUENCE OF SEQUENCE { str STRING, val SEQUENCE OF STRING } ')
Packit ef9df4
  or warn $asn->error;
Packit ef9df4
stest 8, $result, $asn->encode(
Packit ef9df4
		seq => [
Packit ef9df4
		  { str => 'fred', val => [qw(a b c)] },
Packit ef9df4
		  { str => 'joe',  val => [qw(q w e)] }
Packit ef9df4
		]) or warn $asn->error;
Packit ef9df4
Packit ef9df4
btest 9, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
ntest 10, 1, scalar keys %$ret;
Packit ef9df4
btest 11, exists $ret->{'seq'};
Packit ef9df4
ntest 12, 2, scalar @{$ret->{'seq'}};
Packit ef9df4
stest 13, 'fred', $ret->{'seq'}[0]{'str'};
Packit ef9df4
stest 14, 'joe', $ret->{'seq'}[1]{'str'};
Packit ef9df4
stest 15, "a:b:c", join(":", @{$ret->{'seq'}[0]{'val'}});
Packit ef9df4
stest 16, "q:w:e", join(":", @{$ret->{'seq'}[1]{'val'}});
Packit ef9df4
Packit ef9df4
btest 17, $asn = Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 18, $asn->prepare(<<'EOS') or warn $asn->error;
Packit ef9df4
Packit ef9df4
AttributeTypeAndValue ::= SEQUENCE {
Packit ef9df4
	type    STRING,
Packit ef9df4
	value   STRING }
Packit ef9df4
Packit ef9df4
RelativeDistinguishedName ::= SET OF AttributeTypeAndValue
Packit ef9df4
Packit ef9df4
RDNSequence ::= SEQUENCE OF RelativeDistinguishedName
Packit ef9df4
Packit ef9df4
Name  ::= CHOICE { -- only one possibility for now --
Packit ef9df4
	rdnSequence  RDNSequence }
Packit ef9df4
Packit ef9df4
Issuer ::= SEQUENCE { issuer Name }
Packit ef9df4
Packit ef9df4
EOS
Packit ef9df4
Packit ef9df4
btest 19, $asn = $asn->find('Issuer') or warn $asn->error;
Packit ef9df4
Packit ef9df4
$result = pack("C*",
Packit ef9df4
 0x30, 0x26, 0x30, 0x24, 0x31, 0x10, 0x30, 0x06,
Packit ef9df4
 0x04, 0x01, 0x31, 0x04, 0x01, 0x61, 0x30, 0x06,
Packit ef9df4
 0x04, 0x01, 0x32, 0x04, 0x01, 0x62, 0x31, 0x10,
Packit ef9df4
 0x30, 0x06, 0x04, 0x01, 0x33, 0x04, 0x01, 0x63,
Packit ef9df4
 0x30, 0x06, 0x04, 0x01, 0x34, 0x04, 0x01, 0x64
Packit ef9df4
);
Packit ef9df4
Packit ef9df4
stest 20, $result, $asn->encode(
Packit ef9df4
  issuer => {
Packit ef9df4
    rdnSequence => [
Packit ef9df4
      [{ type => "1", value => "a" }, { type => "2", value => "b" }],
Packit ef9df4
      [{ type => "3", value => "c" }, { type => "4", value => "d" }],
Packit ef9df4
    ]
Packit ef9df4
  }
Packit ef9df4
) or warn $asn->error;
Packit ef9df4
Packit ef9df4
btest 21, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
Packit ef9df4
ntest 22, 1, $ret->{issuer}{rdnSequence}[0][0]{type};
Packit ef9df4
ntest 23, 2, $ret->{issuer}{rdnSequence}[0][1]{type};
Packit ef9df4
ntest 24, 3, $ret->{issuer}{rdnSequence}[1][0]{type};
Packit ef9df4
ntest 25, 4, $ret->{issuer}{rdnSequence}[1][1]{type};
Packit ef9df4
Packit ef9df4
stest 26, 'a', $ret->{issuer}{rdnSequence}[0][0]{value};
Packit ef9df4
stest 27, 'b', $ret->{issuer}{rdnSequence}[0][1]{value};
Packit ef9df4
stest 28, 'c', $ret->{issuer}{rdnSequence}[1][0]{value};
Packit ef9df4
stest 29, 'd', $ret->{issuer}{rdnSequence}[1][1]{value};
Packit ef9df4
Packit ef9df4
Packit ef9df4
btest 30, $asn = Convert::ASN1->new or warn $asn->error;
Packit ef9df4
btest 31, $asn->prepare('test ::= SEQUENCE OF INTEGER ') or warn $asn->error;
Packit ef9df4
Packit ef9df4
$result = pack("C*", 0x30, 0x0C, 0x02, 0x01, 0x09, 0x02, 0x01, 0x05,
Packit ef9df4
		     0x02, 0x01, 0x03, 0x02, 0x01, 0x01);
Packit ef9df4
Packit ef9df4
stest 32, $result, $asn->encode([9,5,3,1]) or warn $asn->error;
Packit ef9df4
btest 33, $ret = $asn->decode($result) or warn $asn->error;
Packit ef9df4
btest 34, ref($ret) eq 'ARRAY';
Packit ef9df4
stest 35, "9:5:3:1", join(":", @{$ret});