<p>laforge <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/pysim/+/24346">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">add unit tests for BER-TLV encoder/decoder functions<br><br>... and while at it resolve a bug in bertlv_parse_len()<br>discovered by those new tests.<br><br>Change-Id: I9f14dafab4f712c29224c4eb25cacab7885e2b68<br>---<br>M pySim/utils.py<br>M tests/test_utils.py<br>2 files changed, 25 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/pySim/utils.py b/pySim/utils.py</span><br><span>index ff55642..1191983 100644</span><br><span>--- a/pySim/utils.py</span><br><span>+++ b/pySim/utils.py</span><br><span>@@ -132,7 +132,7 @@</span><br><span>          for i in range(1, 1+num_len_oct):</span><br><span>                    length <<= 8</span><br><span>                   length |= binary[i]</span><br><span style="color: hsl(0, 100%, 40%);">-             return (length, binary[num_len_oct:])</span><br><span style="color: hsl(120, 100%, 40%);">+         return (length, binary[1+num_len_oct:])</span><br><span> </span><br><span> def bertlv_encode_len(length:int) -> bytes:</span><br><span>        """Encode a single Length value according to ITU-T X.690 8.1.3;</span><br><span>diff --git a/tests/test_utils.py b/tests/test_utils.py</span><br><span>index 0fb502c..24f0fc9 100755</span><br><span>--- a/tests/test_utils.py</span><br><span>+++ b/tests/test_utils.py</span><br><span>@@ -152,5 +152,29 @@</span><br><span>               msisdn_decoded = utils.dec_msisdn("ffffffffffffffffffffffffffffffffffffffff0bb121436587092143658709ffff")</span><br><span>          self.assertEqual(msisdn_decoded, (1, 3, "12345678901234567890"))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+class TestBerTlv(unittest.TestCase):</span><br><span style="color: hsl(120, 100%, 40%);">+    def test_BerTlvTagDec(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        res = utils.bertlv_parse_tag(b'\x01')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res, ({'tag':1, 'constructed':False, 'class': 0}, b''))</span><br><span style="color: hsl(120, 100%, 40%);">+        res = utils.bertlv_parse_tag(b'\x21')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res, ({'tag':1, 'constructed':True, 'class': 0}, b''))</span><br><span style="color: hsl(120, 100%, 40%);">+        res = utils.bertlv_parse_tag(b'\x81\x23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res, ({'tag':1, 'constructed':False, 'class': 2}, b'\x23'))</span><br><span style="color: hsl(120, 100%, 40%);">+        res = utils.bertlv_parse_tag(b'\x1f\x8f\x00\x23')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(res, ({'tag':0xf<<7, 'constructed':False, 'class': 0}, b'\x23'))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def test_BerTlvLenDec(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_encode_len(1), b'\x01')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_encode_len(127), b'\x7f')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_encode_len(128), b'\x81\x80')</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_encode_len(0x123456), b'\x83\x12\x34\x56')</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def test_BerTlvLenEnc(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_parse_len(b'\x01\x23'), (1, b'\x23'))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_parse_len(b'\x7f'), (127, b''))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_parse_len(b'\x81\x80'), (128, b''))</span><br><span style="color: hsl(120, 100%, 40%);">+        self.assertEqual(utils.bertlv_parse_len(b'\x83\x12\x34\x56\x78'), (0x123456, b'\x78'))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> if __name__ == "__main__":</span><br><span>       unittest.main()</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/pysim/+/24346">change 24346</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/pysim/+/24346"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: pysim </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I9f14dafab4f712c29224c4eb25cacab7885e2b68 </div>
<div style="display:none"> Gerrit-Change-Number: 24346 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>