X-Git-Url: http://www.git.cypherpunks.ru/?a=blobdiff_plain;f=tests%2Ftest_pyderasn.py;h=d112a60c9a2ae7302f8dbf83afaeb5537a47e159;hb=7decc606fe85d6c37a20ba48b14d80fcb1741443;hp=46e10e53abdbb12848d8be51d21d58f43ff0a11b;hpb=659eb0e090ad8c9209c4e5b030806125509844f9;p=pyderasn.git diff --git a/tests/test_pyderasn.py b/tests/test_pyderasn.py index 46e10e5..d112a60 100644 --- a/tests/test_pyderasn.py +++ b/tests/test_pyderasn.py @@ -2662,7 +2662,6 @@ class TestNull(CommonMixin, TestCase): repr(obj) list(obj.pps()) - @given(integers(min_value=1)) def test_invalid_len(self, l): with self.assertRaises(InvalidLength): @@ -6275,24 +6274,34 @@ class SeqMixing(object): max_size=len(_schema), ))] + class Wahl(Choice): + schema = (("int", Integer()),) + class SeqWithoutDefault(self.base_klass): schema = [ - (n, Integer(impl=t)) + (n, Wahl(expl=t)) for (n, _), t in zip(_schema, tags) ] seq_without_default = SeqWithoutDefault() for name, value in _schema: - seq_without_default[name] = Integer(value) + seq_without_default[name] = Wahl(("int", Integer(value))) seq_encoded = seq_without_default.encode() + seq_without_default.decode(seq_encoded) + self.assertEqual( + len(list(seq_without_default.decode_evgen(seq_encoded))), + len(_schema) * 2 + 1, + ) class SeqWithDefault(self.base_klass): schema = [ - (n, Integer(default=v, impl=t)) + (n, Wahl(default=Wahl(("int", Integer(v))), expl=t)) for (n, v), t in zip(_schema, tags) ] seq_with_default = SeqWithDefault() with assertRaisesRegex(self, DecodeError, "DEFAULT value met"): seq_with_default.decode(seq_encoded) + with assertRaisesRegex(self, DecodeError, "DEFAULT value met"): + list(seq_with_default.decode_evgen(seq_encoded)) for ctx in ({"bered": True}, {"allow_default_values": True}): seq_decoded, _ = seq_with_default.decode(seq_encoded, ctx=ctx) self.assertTrue(seq_decoded.ber_encoded) @@ -6302,7 +6311,21 @@ class SeqMixing(object): self.assertTrue(seq_decoded.bered) for name, value in _schema: self.assertEqual(seq_decoded[name], seq_with_default[name]) - self.assertEqual(seq_decoded[name], value) + self.assertEqual(seq_decoded[name].value, value) + self.assertEqual( + len(list(seq_with_default.decode_evgen(seq_encoded, ctx=ctx))), + len(_schema) + 1, + ) + + seq_without_default = SeqWithoutDefault() + for name, value in _schema: + seq_without_default[name] = Wahl(("int", Integer(value + 1))) + seq_encoded = seq_without_default.encode() + seq_with_default.decode(seq_encoded) + self.assertEqual( + len(list(seq_with_default.decode_evgen(seq_encoded))), + len(_schema) + 1, + ) @given(data_strategy()) def test_missing_from_spec(self, d): @@ -6327,6 +6350,8 @@ class SeqMixing(object): seq_missing = SeqMissing() with self.assertRaises(TagMismatch): seq_missing.decode(seq_encoded) + with self.assertRaises(TagMismatch): + list(seq_missing.decode_evgen(seq_encoded)) def test_bered(self): class Seq(self.base_klass): @@ -6353,6 +6378,9 @@ class SeqMixing(object): encoded = Seq.tag_default + len_encode(len(encoded)) + encoded with self.assertRaises(DecodeError): Seq().decode(encoded) + with self.assertRaises(DecodeError): + list(Seq().decode_evgen(encoded)) + list(Seq().decode_evgen(encoded, ctx={"bered": True})) decoded, _ = Seq().decode(encoded, ctx={"bered": True}) self.assertFalse(decoded.ber_encoded) self.assertFalse(decoded.lenindef) @@ -7018,6 +7046,7 @@ class TestSequenceOf(SeqOfMixing, CommonMixin, TestCase): schema = Integer() bounds = (10, 20) seqof = None + def gen(n): for i in six_xrange(n): yield Integer(i) @@ -7037,6 +7066,7 @@ class TestSequenceOf(SeqOfMixing, CommonMixin, TestCase): class SeqOf(SequenceOf): schema = Integer() bounds = (1, float("+inf")) + def gen(): for i in six_xrange(10): yield Integer(i) @@ -7051,6 +7081,7 @@ class TestSequenceOf(SeqOfMixing, CommonMixin, TestCase): class SeqOf(SequenceOf): schema = Integer() bounds = (1, float("+inf")) + def gen(): for i in six_xrange(10): yield Integer(i) @@ -7585,6 +7616,7 @@ class TestDefinesByPath(TestCase): def test_remaining_data(self): oid = ObjectIdentifier("1.2.3") + class Seq(Sequence): schema = ( ("oid", ObjectIdentifier(defines=((("tgt",), { @@ -7602,6 +7634,7 @@ class TestDefinesByPath(TestCase): def test_remaining_data_seqof(self): oid = ObjectIdentifier("1.2.3") + class SeqOf(SetOf): schema = OctetString()