]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - tests/test_pyderasn.py
Fix *Time encoding error capture
[pyderasn.git] / tests / test_pyderasn.py
index c730633c5a8433bd1badd2a05f7ca20d5baeed43..03e10813999f56ff20276290ff170a9992229c42 100644 (file)
@@ -3609,6 +3609,13 @@ class TestGeneralizedTime(TimeMixin, CommonMixin, TestCase):
             datetime(2010, 1, 2, 3, 4, 5, 0),
         )
 
+    def test_encoding(self):
+        raw = GeneralizedTime(b"20100102030405Z").encode()
+        with assertRaisesRegex(self, DecodeError, "encoding"):
+            GeneralizedTime().decode(raw.replace(b"201001", "привет".encode("utf-8")))
+        with self.assertRaises(DecodeError):
+            GeneralizedTime().decode(raw.replace(b"20100", b"hello"))
+
 
 class TestUTCTime(TimeMixin, CommonMixin, TestCase):
     base_klass = UTCTime
@@ -3673,6 +3680,13 @@ class TestUTCTime(TimeMixin, CommonMixin, TestCase):
             1900 + year,
         )
 
+    def test_encoding(self):
+        raw = UTCTime(b"910506234540Z").encode()
+        with assertRaisesRegex(self, DecodeError, "encoding"):
+            UTCTime().decode(raw.replace(b"910506", "привет".encode("utf-8")))
+        with self.assertRaises(DecodeError):
+            UTCTime().decode(raw.replace(b"91050", b"hello"))
+
 
 @composite
 def any_values_strategy(draw, do_expl=False):
@@ -3928,12 +3942,18 @@ class TestAny(CommonMixin, TestCase):
 def choice_values_strategy(draw, value_required=False, schema=None, do_expl=False):
     if schema is None:
         names = list(draw(sets(text_letters(), min_size=1, max_size=5)))
-        tags = [tag_encode(tag) for tag in draw(sets(
-            integers(min_value=0),
+        tags = [{tag_type: tag_value} for tag_type, tag_value in draw(sets(
+            one_of(
+                tuples(just("impl"), integers(min_value=0).map(tag_encode)),
+                tuples(just("expl"), integers(min_value=0).map(tag_ctxp)),
+            ),
             min_size=len(names),
             max_size=len(names),
         ))]
-        schema = [(name, Integer(impl=tag)) for name, tag in zip(names, tags)]
+        schema = [
+            (name, Integer(**tag_kwargs))
+            for name, tag_kwargs in zip(names, tags)
+        ]
     value = None
     if value_required or draw(booleans()):
         value = draw(tuples(
@@ -4175,8 +4195,8 @@ class TestChoice(CommonMixin, TestCase):
         self.assertEqual(obj_decoded.expl_offset, offset)
         self.assertSequenceEqual(
             obj_expled_encoded[
-                obj_decoded.value.offset - offset:
-                obj_decoded.value.offset + obj_decoded.value.tlvlen - offset
+                obj_decoded.value.fulloffset - offset:
+                obj_decoded.value.fulloffset + obj_decoded.value.fulllen - offset
             ],
             obj_encoded,
         )