X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=tests%2Ftest_pyderasn.py;h=10ad675c49bceb537f509b2f685635e033043221;hb=05f030d41edef47ea94f68b9e770590d96e743af;hp=15f54f90d43dd611b8239c5aa43e4490daf5554d;hpb=038b5d9eab3e5dc2a203f064f22caa854f5b68ae;p=pyderasn.git diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 15f54f9..10ad675 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -64,6 +64,7 @@ from pyderasn import DecodeError from pyderasn import DecodePathDefBy from pyderasn import Enumerated from pyderasn import EOC +from pyderasn import EOC_LEN from pyderasn import GeneralizedTime from pyderasn import GeneralString from pyderasn import GraphicString @@ -606,6 +607,54 @@ class TestBoolean(CommonMixin, TestCase): ) self.assertTrue(bool(obj)) self.assertTrue(obj.bered) + self.assertFalse(obj.lenindef) + + @given( + integers(min_value=1).map(tag_ctxc), + lists( + booleans(), + min_size=1, + max_size=5, + ), + ) + def test_ber_expl(self, expl, values): + encoded = b"" + for value in values: + encoded += ( + expl + + b"\x80" + + Boolean(value).encode() + + EOC + ) + encoded = SequenceOf.tag_default + len_encode(len(encoded)) + encoded + + class SeqOf(SequenceOf): + schema = Boolean(expl=expl) + seqof, tail = SeqOf().decode(encoded, ctx={"bered": True}) + self.assertSequenceEqual(tail, b"") + self.assertSequenceEqual([bool(v) for v in seqof], values) + self.assertSetEqual( + set( + ( + v.tlvlen, + v.expl_tlvlen, + v.expl_tlen, + v.expl_llen, + v.bered, + v.lenindef, + v.expl_lenindef, + ) for v in seqof + ), + set((( + 3 + EOC_LEN, + len(expl) + 1 + 3 + EOC_LEN, + len(expl), + 1, + False, + False, + True, + ),)), + ) @composite @@ -1455,7 +1504,10 @@ class TestBitString(CommonMixin, TestCase): ) with assertRaisesRegex(self, DecodeError, "unallowed BER"): BitString(impl=tag_encode(impl)).decode(encoded_indefinite) - for encoded in (encoded_indefinite, encoded_definite): + for lenindef_expected, encoded in ( + (True, encoded_indefinite), + (False, encoded_definite), + ): obj, tail = BitString(impl=tag_encode(impl)).decode( encoded, ctx={"bered": True} ) @@ -1463,6 +1515,7 @@ class TestBitString(CommonMixin, TestCase): self.assertEqual(obj.bit_len, bit_len_expected) self.assertSequenceEqual(bytes(obj), payload_expected) self.assertTrue(obj.bered) + self.assertEqual(obj.lenindef, lenindef_expected) self.assertEqual(len(encoded), obj.tlvlen) def test_x690_vector(self): @@ -1477,6 +1530,8 @@ class TestBitString(CommonMixin, TestCase): ) self.assertSequenceEqual(tail, b"") self.assertEqual(obj, vector) + self.assertTrue(obj.bered) + self.assertTrue(obj.lenindef) @composite @@ -1835,13 +1890,17 @@ class TestOctetString(CommonMixin, TestCase): ) with assertRaisesRegex(self, DecodeError, "unallowed BER"): OctetString(impl=tag_encode(impl)).decode(encoded_indefinite) - for encoded in (encoded_indefinite, encoded_definite): + for lenindef_expected, encoded in ( + (True, encoded_indefinite), + (False, encoded_definite), + ): obj, tail = OctetString(impl=tag_encode(impl)).decode( encoded, ctx={"bered": True} ) self.assertSequenceEqual(tail, b"") self.assertSequenceEqual(bytes(obj), payload_expected) self.assertTrue(obj.bered) + self.assertEqual(obj.lenindef, lenindef_expected) self.assertEqual(len(encoded), obj.tlvlen) @@ -3055,24 +3114,29 @@ class TestVisibleString( base_klass = VisibleString def test_x690_vector(self): - self.assertEqual( - str(VisibleString().decode(hexdec("1A054A6F6E6573"))[0]), - "Jones", - ) - self.assertEqual( - str(VisibleString().decode( - hexdec("3A0904034A6F6E04026573"), - ctx={"bered": True}, - )[0]), - "Jones", + obj, tail = VisibleString().decode(hexdec("1A054A6F6E6573")) + self.assertSequenceEqual(tail, b"") + self.assertEqual(str(obj), "Jones") + self.assertFalse(obj.bered) + self.assertFalse(obj.lenindef) + + obj, tail = VisibleString().decode( + hexdec("3A0904034A6F6E04026573"), + ctx={"bered": True}, ) - self.assertEqual( - str(VisibleString().decode( - hexdec("3A8004034A6F6E040265730000"), - ctx={"bered": True}, - )[0]), - "Jones", + self.assertSequenceEqual(tail, b"") + self.assertEqual(str(obj), "Jones") + self.assertTrue(obj.bered) + self.assertFalse(obj.lenindef) + + obj, tail = VisibleString().decode( + hexdec("3A8004034A6F6E040265730000"), + ctx={"bered": True}, ) + self.assertSequenceEqual(tail, b"") + self.assertEqual(str(obj), "Jones") + self.assertTrue(obj.bered) + self.assertTrue(obj.lenindef) class TestGeneralString(