X-Git-Url: http://www.git.cypherpunks.ru/?p=pyderasn.git;a=blobdiff_plain;f=tests%2Ftest_pyderasn.py;h=13322d7b454679e13d5f9e97d40fb9313729a12e;hp=498b160a23698a7ba37848c3a2cbf87e9f627034;hb=b30d8ddf17d02cc72acee7a9d6eff9b1ea9e0477;hpb=78833daa9b9637827bfb570135e699b5871aefd3 diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 498b160..13322d7 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -5003,6 +5003,9 @@ class TestDefinesByPath(TestCase): self.assertIsNotNone(seq_integered["value"].defined) self.assertEqual(seq_integered["value"].defined[0], type_integered) self.assertEqual(seq_integered["value"].defined[1], Integer(123)) + self.assertTrue(seq_integered_raw[ + seq_integered["value"].defined[1].offset: + ].startswith(Integer(123).encode())) seq_sequenced, _ = Seq().decode( seq_sequenced_raw, @@ -5081,6 +5084,7 @@ class TestDefinesByPath(TestCase): decoded, _ = Outer().decode(outer.encode()) self.assertEqual(decoded["tgt"].defined[1], Integer(tgt)) + class TestAbsDecodePath(TestCase): @given( lists(text(alphabet=ascii_letters, min_size=1)).map(tuple), @@ -5112,3 +5116,26 @@ class TestAbsDecodePath(TestCase): abs_decode_path(decode_path, tuple([".."] * number_of_dots) + rel_path), decode_path[:-number_of_dots] + rel_path, ) + + +class TestStrictDefaultExistence(TestCase): + @given(data_strategy()) + def runTest(self, d): + count = d.draw(integers(min_value=1, max_value=10)) + chosen = d.draw(integers(min_value=0, max_value=count - 1)) + _schema = [ + ("int%d" % i, Integer(expl=tag_ctxc(i + 1))) + for i in range(count) + ] + + class Seq(Sequence): + schema = _schema + seq = Seq() + for i in range(count): + seq["int%d" % i] = Integer(123) + raw = seq.encode() + chosen = "int%d" % chosen + seq.specs[chosen] = seq.specs[chosen](default=123) + seq.decode(raw) + with assertRaisesRegex(self, DecodeError, "DEFAULT value met"): + seq.decode(raw, ctx={"strict_default_existence": True})