openwrt-packages/lang/python/python-pyasn1/test.sh

52 lines
1.5 KiB
Bash

#!/bin/sh
[ "$1" = python3-pyasn1 ] || exit 0
python3 - << 'EOF'
from collections import OrderedDict
from pyasn1.type import namedtype
from pyasn1.type import tag
from pyasn1.type import univ
from pyasn1.codec.der.encoder import encode as derEncode
from pyasn1.codec.der.decoder import decode as derDecode
from pyasn1.codec.native.encoder import encode as nativeEncode
from pyasn1.codec.native.decoder import decode as nativeDecode
class Record(univ.Sequence):
componentType = namedtype.NamedTypes(
namedtype.NamedType('id', univ.Integer()),
namedtype.OptionalNamedType(
'room', univ.Integer().subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 0)
)
),
namedtype.DefaultedNamedType(
'house', univ.Integer(0).subtype(
implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 1)
)
)
)
# encoding modifies the object (https://github.com/pyasn1/pyasn1/issues/53)
# so test decoding before encoding
record = Record()
record['id'] = 123
record['room'] = 321
assert str(record) == 'Record:\n id=123\n room=321\n'
substrate = b'0\x07\x02\x01{\x80\x02\x01A'
received_record, _ = derDecode(substrate, asn1Spec=Record())
assert received_record == record
dict_record = nativeDecode({'id': 123, 'room': 321}, asn1Spec=Record())
assert dict_record == record
assert derEncode(record) == substrate
assert nativeEncode(record) == OrderedDict([('id', 123), ('room', 321), ('house', 0)])
EOF