laforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/pysim/+/24346 )
Change subject: add unit tests for BER-TLV encoder/decoder functions ...................................................................... add unit tests for BER-TLV encoder/decoder functions ... and while at it resolve a bug in bertlv_parse_len() discovered by those new tests. Change-Id: I9f14dafab4f712c29224c4eb25cacab7885e2b68 --- M pySim/utils.py M tests/test_utils.py 2 files changed, 25 insertions(+), 1 deletion(-) git pull ssh://gerrit.osmocom.org:29418/pysim refs/changes/46/24346/1 diff --git a/pySim/utils.py b/pySim/utils.py index ff55642..1191983 100644 --- a/pySim/utils.py +++ b/pySim/utils.py @@ -132,7 +132,7 @@ for i in range(1, 1+num_len_oct): length <<= 8 length |= binary[i] - return (length, binary[num_len_oct:]) + return (length, binary[1+num_len_oct:]) def bertlv_encode_len(length:int) -> bytes: """Encode a single Length value according to ITU-T X.690 8.1.3; diff --git a/tests/test_utils.py b/tests/test_utils.py index 0fb502c..24f0fc9 100755 --- a/tests/test_utils.py +++ b/tests/test_utils.py @@ -152,5 +152,29 @@ msisdn_decoded = utils.dec_msisdn("ffffffffffffffffffffffffffffffffffffffff0bb121436587092143658709ffff") self.assertEqual(msisdn_decoded, (1, 3, "12345678901234567890")) +class TestBerTlv(unittest.TestCase): + def test_BerTlvTagDec(self): + res = utils.bertlv_parse_tag(b'\x01') + self.assertEqual(res, ({'tag':1, 'constructed':False, 'class': 0}, b'')) + res = utils.bertlv_parse_tag(b'\x21') + self.assertEqual(res, ({'tag':1, 'constructed':True, 'class': 0}, b'')) + res = utils.bertlv_parse_tag(b'\x81\x23') + self.assertEqual(res, ({'tag':1, 'constructed':False, 'class': 2}, b'\x23')) + res = utils.bertlv_parse_tag(b'\x1f\x8f\x00\x23') + self.assertEqual(res, ({'tag':0xf<<7, 'constructed':False, 'class': 0}, b'\x23')) + + def test_BerTlvLenDec(self): + self.assertEqual(utils.bertlv_encode_len(1), b'\x01') + self.assertEqual(utils.bertlv_encode_len(127), b'\x7f') + self.assertEqual(utils.bertlv_encode_len(128), b'\x81\x80') + self.assertEqual(utils.bertlv_encode_len(0x123456), b'\x83\x12\x34\x56') + + def test_BerTlvLenEnc(self): + self.assertEqual(utils.bertlv_parse_len(b'\x01\x23'), (1, b'\x23')) + self.assertEqual(utils.bertlv_parse_len(b'\x7f'), (127, b'')) + self.assertEqual(utils.bertlv_parse_len(b'\x81\x80'), (128, b'')) + self.assertEqual(utils.bertlv_parse_len(b'\x83\x12\x34\x56\x78'), (0x123456, b'\x78')) + + if __name__ == "__main__": unittest.main() -- To view, visit https://gerrit.osmocom.org/c/pysim/+/24346 To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings Gerrit-Project: pysim Gerrit-Branch: master Gerrit-Change-Id: I9f14dafab4f712c29224c4eb25cacab7885e2b68 Gerrit-Change-Number: 24346 Gerrit-PatchSet: 1 Gerrit-Owner: laforge <lafo...@osmocom.org> Gerrit-MessageType: newchange