Index: tools/telemetry/third_party/gsutilz/third_party/pyasn1/test/codec/ber/test_decoder.py |
diff --git a/tools/telemetry/third_party/gsutilz/third_party/pyasn1/test/codec/ber/test_decoder.py b/tools/telemetry/third_party/gsutilz/third_party/pyasn1/test/codec/ber/test_decoder.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..36999e84d4dc6d1fee96ffe76e85457e85eb0296 |
--- /dev/null |
+++ b/tools/telemetry/third_party/gsutilz/third_party/pyasn1/test/codec/ber/test_decoder.py |
@@ -0,0 +1,535 @@ |
+from pyasn1.type import tag, namedtype, univ |
+from pyasn1.codec.ber import decoder |
+from pyasn1.compat.octets import ints2octs, str2octs, null |
+from pyasn1.error import PyAsn1Error |
+from sys import version_info |
+if version_info[0:2] < (2, 7) or \ |
+ version_info[0:2] in ( (3, 0), (3, 1) ): |
+ try: |
+ import unittest2 as unittest |
+ except ImportError: |
+ import unittest |
+else: |
+ import unittest |
+ |
+class LargeTagDecoderTestCase(unittest.TestCase): |
+ def testLargeTag(self): |
+ assert decoder.decode(ints2octs((127, 141, 245, 182, 253, 47, 3, 2, 1, 1))) == (1, null) |
+ |
+class IntegerDecoderTestCase(unittest.TestCase): |
+ def testPosInt(self): |
+ assert decoder.decode(ints2octs((2, 1, 12))) == (12, null) |
+ def testNegInt(self): |
+ assert decoder.decode(ints2octs((2, 1, 244))) == (-12, null) |
+ def testZero(self): |
+ assert decoder.decode(ints2octs((2, 0))) == (0, null) |
+ def testZeroLong(self): |
+ assert decoder.decode(ints2octs((2, 1, 0))) == (0, null) |
+ def testMinusOne(self): |
+ assert decoder.decode(ints2octs((2, 1, 255))) == (-1, null) |
+ def testPosLong(self): |
+ assert decoder.decode( |
+ ints2octs((2, 9, 0, 255, 255, 255, 255, 255, 255, 255, 255)) |
+ ) == (0xffffffffffffffff, null) |
+ def testNegLong(self): |
+ assert decoder.decode( |
+ ints2octs((2, 9, 255, 0, 0, 0, 0, 0, 0, 0, 1)) |
+ ) == (-0xffffffffffffffff, null) |
+ def testSpec(self): |
+ try: |
+ decoder.decode( |
+ ints2octs((2, 1, 12)), asn1Spec=univ.Null() |
+ ) == (12, null) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong asn1Spec worked out' |
+ assert decoder.decode( |
+ ints2octs((2, 1, 12)), asn1Spec=univ.Integer() |
+ ) == (12, null) |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode(ints2octs((34, 1, 12))) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class BooleanDecoderTestCase(unittest.TestCase): |
+ def testTrue(self): |
+ assert decoder.decode(ints2octs((1, 1, 1))) == (1, null) |
+ def testTrueNeg(self): |
+ assert decoder.decode(ints2octs((1, 1, 255))) == (1, null) |
+ def testExtraTrue(self): |
+ assert decoder.decode(ints2octs((1, 1, 1, 0, 120, 50, 50))) == (1, ints2octs((0, 120, 50, 50))) |
+ def testFalse(self): |
+ assert decoder.decode(ints2octs((1, 1, 0))) == (0, null) |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode(ints2octs((33, 1, 1))) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class BitStringDecoderTestCase(unittest.TestCase): |
+ def testDefMode(self): |
+ assert decoder.decode( |
+ ints2octs((3, 3, 1, 169, 138)) |
+ ) == ((1,0,1,0,1,0,0,1,1,0,0,0,1,0,1), null) |
+ def testIndefMode(self): |
+ assert decoder.decode( |
+ ints2octs((3, 3, 1, 169, 138)) |
+ ) == ((1,0,1,0,1,0,0,1,1,0,0,0,1,0,1), null) |
+ def testDefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((35, 8, 3, 2, 0, 169, 3, 2, 1, 138)) |
+ ) == ((1,0,1,0,1,0,0,1,1,0,0,0,1,0,1), null) |
+ def testIndefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)) |
+ ) == ((1,0,1,0,1,0,0,1,1,0,0,0,1,0,1), null) |
+ def testDefModeChunkedSubst(self): |
+ assert decoder.decode( |
+ ints2octs((35, 8, 3, 2, 0, 169, 3, 2, 1, 138)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((3, 2, 0, 169, 3, 2, 1, 138)), 8) |
+ def testIndefModeChunkedSubst(self): |
+ assert decoder.decode( |
+ ints2octs((35, 128, 3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((3, 2, 0, 169, 3, 2, 1, 138, 0, 0)), -1) |
+ |
+class OctetStringDecoderTestCase(unittest.TestCase): |
+ def testDefMode(self): |
+ assert decoder.decode( |
+ ints2octs((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)) |
+ ) == (str2octs('Quick brown fox'), null) |
+ def testIndefMode(self): |
+ assert decoder.decode( |
+ ints2octs((36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0)) |
+ ) == (str2octs('Quick brown fox'), null) |
+ def testDefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)) |
+ ) == (str2octs('Quick brown fox'), null) |
+ def testIndefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)) |
+ ) == (str2octs('Quick brown fox'), null) |
+ def testDefModeChunkedSubst(self): |
+ assert decoder.decode( |
+ ints2octs((36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120)), 23) |
+ def testIndefModeChunkedSubst(self): |
+ assert decoder.decode( |
+ ints2octs((36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0)), -1) |
+ |
+class ExpTaggedOctetStringDecoderTestCase(unittest.TestCase): |
+ def setUp(self): |
+ self.o = univ.OctetString( |
+ 'Quick brown fox', |
+ tagSet=univ.OctetString.tagSet.tagExplicitly( |
+ tag.Tag(tag.tagClassApplication, tag.tagFormatSimple, 5) |
+ )) |
+ |
+ def testDefMode(self): |
+ assert self.o.isSameTypeWith(decoder.decode( |
+ ints2octs((101, 17, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)) |
+ )[0]) |
+ |
+ def testIndefMode(self): |
+ v, s = decoder.decode(ints2octs((101, 128, 36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0))) |
+ assert self.o.isSameTypeWith(v) |
+ assert not s |
+ |
+ def testDefModeChunked(self): |
+ v, s = decoder.decode(ints2octs((101, 25, 36, 23, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120))) |
+ assert self.o.isSameTypeWith(v) |
+ assert not s |
+ |
+ def testIndefModeChunked(self): |
+ v, s = decoder.decode(ints2octs((101, 128, 36, 128, 4, 4, 81, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 4, 111, 119, 110, 32, 4, 3, 102, 111, 120, 0, 0, 0, 0))) |
+ assert self.o.isSameTypeWith(v) |
+ assert not s |
+ |
+ def testDefModeSubst(self): |
+ assert decoder.decode( |
+ ints2octs((101, 17, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120)), 17) |
+ |
+ def testIndefModeSubst(self): |
+ assert decoder.decode( |
+ ints2octs((101, 128, 36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((36, 128, 4, 15, 81, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 32, 102, 111, 120, 0, 0, 0, 0)), -1) |
+ |
+class NullDecoderTestCase(unittest.TestCase): |
+ def testNull(self): |
+ assert decoder.decode(ints2octs((5, 0))) == (null, null) |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode(ints2octs((37, 0))) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class ObjectIdentifierDecoderTestCase(unittest.TestCase): |
+ def testOID(self): |
+ assert decoder.decode( |
+ ints2octs((6, 6, 43, 6, 0, 191, 255, 126)) |
+ ) == ((1,3,6,0,0xffffe), null) |
+ |
+ def testEdges1(self): |
+ assert decoder.decode( |
+ ints2octs((6, 1, 255)) |
+ ) == ((6,15), null) |
+ |
+ def testEdges2(self): |
+ assert decoder.decode( |
+ ints2octs((6, 1, 239)) |
+ ) == ((5,39), null) |
+ |
+ def testEdges3(self): |
+ assert decoder.decode( |
+ ints2octs((6, 7, 43, 6, 143, 255, 255, 255, 127)) |
+ ) == ((1, 3, 6, 4294967295), null) |
+ |
+ def testNonLeading0x80(self): |
+ assert decoder.decode( |
+ ints2octs((6, 5, 85, 4, 129, 128, 0)), |
+ ) == ((2, 5, 4, 16384), null) |
+ |
+ def testLeading0x80(self): |
+ try: |
+ decoder.decode( |
+ ints2octs((6, 5, 85, 4, 128, 129, 0)) |
+ ) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 1, 'Leading 0x80 tolarated' |
+ |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode(ints2octs((38, 1, 239))) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class RealDecoderTestCase(unittest.TestCase): |
+ def testChar(self): |
+ assert decoder.decode( |
+ ints2octs((9, 7, 3, 49, 50, 51, 69, 49, 49)) |
+ ) == (univ.Real((123, 10, 11)), null) |
+ |
+ def testBin1(self): |
+ assert decoder.decode( |
+ ints2octs((9, 4, 128, 245, 4, 77)) |
+ ) == (univ.Real((1101, 2, -11)), null) |
+ |
+ def testBin2(self): |
+ assert decoder.decode( |
+ ints2octs((9, 4, 128, 11, 4, 77)) |
+ ) == (univ.Real((1101, 2, 11)), null) |
+ |
+ def testBin3(self): |
+ assert decoder.decode( |
+ ints2octs((9, 3, 192, 10, 123)) |
+ ) == (univ.Real((-123, 2, 10)), null) |
+ |
+ |
+ def testPlusInf(self): |
+ assert decoder.decode( |
+ ints2octs((9, 1, 64)) |
+ ) == (univ.Real('inf'), null) |
+ |
+ def testMinusInf(self): |
+ assert decoder.decode( |
+ ints2octs((9, 1, 65)) |
+ ) == (univ.Real('-inf'), null) |
+ |
+ def testEmpty(self): |
+ assert decoder.decode( |
+ ints2octs((9, 0)) |
+ ) == (univ.Real(0.0), null) |
+ |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode(ints2octs((41, 0))) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class SequenceDecoderTestCase(unittest.TestCase): |
+ def setUp(self): |
+ self.s = univ.Sequence(componentType=namedtype.NamedTypes( |
+ namedtype.NamedType('place-holder', univ.Null(null)), |
+ namedtype.NamedType('first-name', univ.OctetString(null)), |
+ namedtype.NamedType('age', univ.Integer(33)), |
+ )) |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ self.s.setComponentByPosition(1, univ.OctetString('quick brown')) |
+ self.s.setComponentByPosition(2, univ.Integer(1)) |
+ self.s.setDefaultComponents() |
+ |
+ def testWithOptionalAndDefaultedDefMode(self): |
+ assert decoder.decode( |
+ ints2octs((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedIndefMode(self): |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedDefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((48, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)) |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedIndefModeChunked(self): |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)) |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedDefModeSubst(self): |
+ assert decoder.decode( |
+ ints2octs((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), 18) |
+ |
+ def testWithOptionalAndDefaultedIndefModeSubst(self): |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), -1) |
+ |
+ def testTagFormat(self): |
+ try: |
+ decoder.decode( |
+ ints2octs((16, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)) |
+ ) |
+ except PyAsn1Error: |
+ pass |
+ else: |
+ assert 0, 'wrong tagFormat worked out' |
+ |
+class GuidedSequenceDecoderTestCase(unittest.TestCase): |
+ def setUp(self): |
+ self.s = univ.Sequence(componentType=namedtype.NamedTypes( |
+ namedtype.NamedType('place-holder', univ.Null(null)), |
+ namedtype.OptionalNamedType('first-name', univ.OctetString(null)), |
+ namedtype.DefaultedNamedType('age', univ.Integer(33)), |
+ )) |
+ |
+ def __init(self): |
+ self.s.clear() |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ self.s.setDefaultComponents() |
+ |
+ def __initWithOptional(self): |
+ self.s.clear() |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ self.s.setComponentByPosition(1, univ.OctetString('quick brown')) |
+ self.s.setDefaultComponents() |
+ |
+ def __initWithDefaulted(self): |
+ self.s.clear() |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ self.s.setComponentByPosition(2, univ.Integer(1)) |
+ self.s.setDefaultComponents() |
+ |
+ def __initWithOptionalAndDefaulted(self): |
+ self.s.clear() |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ self.s.setComponentByPosition(1, univ.OctetString('quick brown')) |
+ self.s.setComponentByPosition(2, univ.Integer(1)) |
+ self.s.setDefaultComponents() |
+ |
+ def testDefMode(self): |
+ self.__init() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testIndefMode(self): |
+ self.__init() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testDefModeChunked(self): |
+ self.__init() |
+ assert decoder.decode( |
+ ints2octs((48, 2, 5, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testIndefModeChunked(self): |
+ self.__init() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalDefMode(self): |
+ self.__initWithOptional() |
+ assert decoder.decode( |
+ ints2octs((48, 15, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionaIndefMode(self): |
+ self.__initWithOptional() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 0, 0)), |
+ asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalDefModeChunked(self): |
+ self.__initWithOptional() |
+ assert decoder.decode( |
+ ints2octs((48, 21, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110)), |
+ asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalIndefModeChunked(self): |
+ self.__initWithOptional() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 0, 0)), |
+ asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithDefaultedDefMode(self): |
+ self.__initWithDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithDefaultedIndefMode(self): |
+ self.__initWithDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithDefaultedDefModeChunked(self): |
+ self.__initWithDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 5, 5, 0, 2, 1, 1)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithDefaultedIndefModeChunked(self): |
+ self.__initWithDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedDefMode(self): |
+ self.__initWithOptionalAndDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 18, 5, 0, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedIndefMode(self): |
+ self.__initWithOptionalAndDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 11, 113, 117, 105, 99, 107, 32, 98, 114, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedDefModeChunked(self): |
+ self.__initWithOptionalAndDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 24, 5, 0, 36, 17, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 2, 1, 1)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithOptionalAndDefaultedIndefModeChunked(self): |
+ self.__initWithOptionalAndDefaulted() |
+ assert decoder.decode( |
+ ints2octs((48, 128, 5, 0, 36, 128, 4, 4, 113, 117, 105, 99, 4, 4, 107, 32, 98, 114, 4, 3, 111, 119, 110, 0, 0, 2, 1, 1, 0, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+class ChoiceDecoderTestCase(unittest.TestCase): |
+ def setUp(self): |
+ self.s = univ.Choice(componentType=namedtype.NamedTypes( |
+ namedtype.NamedType('place-holder', univ.Null(null)), |
+ namedtype.NamedType('number', univ.Integer(0)), |
+ namedtype.NamedType('string', univ.OctetString()) |
+ )) |
+ |
+ def testBySpec(self): |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ assert decoder.decode( |
+ ints2octs((5, 0)), asn1Spec=self.s |
+ ) == (self.s, null) |
+ |
+ def testWithoutSpec(self): |
+ self.s.setComponentByPosition(0, univ.Null(null)) |
+ assert decoder.decode(ints2octs((5, 0))) == (self.s, null) |
+ assert decoder.decode(ints2octs((5, 0))) == (univ.Null(null), null) |
+ |
+ def testUndefLength(self): |
+ self.s.setComponentByPosition(2, univ.OctetString('abcdefgh')) |
+ assert decoder.decode(ints2octs((36, 128, 4, 3, 97, 98, 99, 4, 3, 100, 101, 102, 4, 2, 103, 104, 0, 0)), asn1Spec=self.s) == (self.s, null) |
+ |
+ def testExplicitTag(self): |
+ s = self.s.subtype(explicitTag=tag.Tag(tag.tagClassContext, |
+ tag.tagFormatConstructed, 4)) |
+ s.setComponentByPosition(0, univ.Null(null)) |
+ assert decoder.decode(ints2octs((164, 2, 5, 0)), asn1Spec=s) == (s, null) |
+ |
+ def testExplicitTagUndefLength(self): |
+ s = self.s.subtype(explicitTag=tag.Tag(tag.tagClassContext, |
+ tag.tagFormatConstructed, 4)) |
+ s.setComponentByPosition(0, univ.Null(null)) |
+ assert decoder.decode(ints2octs((164, 128, 5, 0, 0, 0)), asn1Spec=s) == (s, null) |
+ |
+class AnyDecoderTestCase(unittest.TestCase): |
+ def setUp(self): |
+ self.s = univ.Any() |
+ |
+ def testByUntagged(self): |
+ assert decoder.decode( |
+ ints2octs((4, 3, 102, 111, 120)), asn1Spec=self.s |
+ ) == (univ.Any('\004\003fox'), null) |
+ |
+ def testTaggedEx(self): |
+ s = univ.Any('\004\003fox').subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) |
+ assert decoder.decode(ints2octs((164, 5, 4, 3, 102, 111, 120)), asn1Spec=s) == (s, null) |
+ |
+ def testTaggedIm(self): |
+ s = univ.Any('\004\003fox').subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) |
+ assert decoder.decode(ints2octs((132, 5, 4, 3, 102, 111, 120)), asn1Spec=s) == (s, null) |
+ |
+ def testByUntaggedIndefMode(self): |
+ assert decoder.decode( |
+ ints2octs((4, 3, 102, 111, 120)), asn1Spec=self.s |
+ ) == (univ.Any('\004\003fox'), null) |
+ |
+ def testTaggedExIndefMode(self): |
+ s = univ.Any('\004\003fox').subtype(explicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) |
+ assert decoder.decode(ints2octs((164, 128, 4, 3, 102, 111, 120, 0, 0)), asn1Spec=s) == (s, null) |
+ |
+ def testTaggedImIndefMode(self): |
+ s = univ.Any('\004\003fox').subtype(implicitTag=tag.Tag(tag.tagClassContext, tag.tagFormatSimple, 4)) |
+ assert decoder.decode(ints2octs((164, 128, 4, 3, 102, 111, 120, 0, 0)), asn1Spec=s) == (s, null) |
+ |
+ def testByUntaggedSubst(self): |
+ assert decoder.decode( |
+ ints2octs((4, 3, 102, 111, 120)), |
+ asn1Spec=self.s, |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((4, 3, 102, 111, 120)), 5) |
+ |
+ def testTaggedExSubst(self): |
+ assert decoder.decode( |
+ ints2octs((164, 5, 4, 3, 102, 111, 120)), |
+ asn1Spec=self.s, |
+ substrateFun=lambda a,b,c: (b,c) |
+ ) == (ints2octs((164, 5, 4, 3, 102, 111, 120)), 7) |
+ |
+if __name__ == '__main__': unittest.main() |