test_encoder.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #
  2. # This file is part of pyasn1 software.
  3. #
  4. # Copyright (c) 2005-2020, Ilya Etingof <etingof@gmail.com>
  5. # License: https://pyasn1.readthedocs.io/en/latest/license.html
  6. #
  7. import sys
  8. import unittest
  9. from __tests__.base import BaseTestCase
  10. from pyasn1.type import namedtype
  11. from pyasn1.type import univ
  12. from pyasn1.codec.native import encoder
  13. from pyasn1.error import PyAsn1Error
  14. class BadAsn1SpecTestCase(BaseTestCase):
  15. def testBadValueType(self):
  16. try:
  17. encoder.encode('not an Asn1Item')
  18. except PyAsn1Error:
  19. pass
  20. else:
  21. assert 0, 'Invalid value type accepted'
  22. class IntegerEncoderTestCase(BaseTestCase):
  23. def testPosInt(self):
  24. assert encoder.encode(univ.Integer(12)) == 12
  25. def testNegInt(self):
  26. assert encoder.encode(univ.Integer(-12)) == -12
  27. class BooleanEncoderTestCase(BaseTestCase):
  28. def testTrue(self):
  29. assert encoder.encode(univ.Boolean(1)) is True
  30. def testFalse(self):
  31. assert encoder.encode(univ.Boolean(0)) is False
  32. class BitStringEncoderTestCase(BaseTestCase):
  33. def setUp(self):
  34. BaseTestCase.setUp(self)
  35. self.b = univ.BitString((1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1))
  36. def testValue(self):
  37. assert encoder.encode(self.b) == '101010011000101'
  38. class OctetStringEncoderTestCase(BaseTestCase):
  39. def setUp(self):
  40. BaseTestCase.setUp(self)
  41. self.o = univ.OctetString('Quick brown fox')
  42. def testValue(self):
  43. assert encoder.encode(self.o) == b'Quick brown fox'
  44. class NullEncoderTestCase(BaseTestCase):
  45. def testNull(self):
  46. assert encoder.encode(univ.Null('')) is None
  47. class ObjectIdentifierEncoderTestCase(BaseTestCase):
  48. def testOne(self):
  49. assert encoder.encode(univ.ObjectIdentifier((1, 3, 6, 0, 12345))) == '1.3.6.0.12345'
  50. class RealEncoderTestCase(BaseTestCase):
  51. def testChar(self):
  52. assert encoder.encode(univ.Real((123, 10, 11))) == 1.23e+13
  53. def testPlusInf(self):
  54. assert encoder.encode(univ.Real('inf')) == float('inf')
  55. def testMinusInf(self):
  56. assert encoder.encode(univ.Real('-inf')) == float('-inf')
  57. class SequenceEncoderTestCase(BaseTestCase):
  58. def setUp(self):
  59. BaseTestCase.setUp(self)
  60. self.s = univ.Sequence(componentType=namedtype.NamedTypes(
  61. namedtype.NamedType('place-holder', univ.Null('')),
  62. namedtype.OptionalNamedType('first-name', univ.OctetString('')),
  63. namedtype.DefaultedNamedType('age', univ.Integer(33)),
  64. ))
  65. def testSimple(self):
  66. s = self.s.clone()
  67. s[0] = univ.Null('')
  68. s[1] = 'abc'
  69. s[2] = 123
  70. assert encoder.encode(s) == {'place-holder': None, 'first-name': b'abc', 'age': 123}
  71. class ChoiceEncoderTestCase(BaseTestCase):
  72. def setUp(self):
  73. BaseTestCase.setUp(self)
  74. self.s = univ.Choice(
  75. componentType=namedtype.NamedTypes(
  76. namedtype.NamedType('place-holder', univ.Null('')),
  77. namedtype.NamedType('number', univ.Integer(0)),
  78. namedtype.NamedType('string', univ.OctetString())
  79. )
  80. )
  81. def testEmpty(self):
  82. try:
  83. encoder.encode(self.s)
  84. except PyAsn1Error:
  85. pass
  86. else:
  87. assert False, 'encoded unset choice'
  88. def testFilled(self):
  89. self.s.setComponentByPosition(0, univ.Null(''))
  90. assert encoder.encode(self.s) == {'place-holder': None}
  91. class AnyEncoderTestCase(BaseTestCase):
  92. def setUp(self):
  93. BaseTestCase.setUp(self)
  94. self.s = univ.Any(encoder.encode(univ.OctetString('fox')))
  95. def testSimple(self):
  96. assert encoder.encode(self.s) == b'fox'
  97. suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
  98. if __name__ == '__main__':
  99. unittest.TextTestRunner(verbosity=2).run(suite)