def test_decode_example_3(self): input_data = b'\x01\x15\x01\x10e\xad\x8b\xe8\xb3fD\xcb\xbde#\xccc\n\xb8\xef\x02\x01\x01' structure = { 1: { 1: tlv8.DataType.BYTES, 2: tlv8.DataType.INTEGER, }, 2: { 1: tlv8.DataType.INTEGER, 2: tlv8.DataType.BYTES, 3: tlv8.DataType.BYTES, 4: tlv8.DataType.BYTES }, 3: { 1: tlv8.DataType.INTEGER, 2: tlv8.DataType.INTEGER, 3: tlv8.DataType.INTEGER, 4: tlv8.DataType.INTEGER, 5: tlv8.DataType.INTEGER } } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, tlv8.EntryList([ tlv8.Entry(1, b'e\xad\x8b\xe8\xb3fD\xcb\xbde#\xccc\n\xb8\xef'), tlv8.Entry(2, 1), ])), ]) self.assertEqual(expected, result)
def test_entrylist_by_id(self): el = tlv8.EntryList([ tlv8.Entry(2, b'\x23'), tlv8.Entry(2, b'\x42') ]) self.assertEqual(el.by_id(1), tlv8.EntryList()) self.assertEqual(el.by_id(2), el)
def test_entrylist_init(self): with self.assertRaises(ValueError) as error_context: tlv8.EntryList('not a list') self.assertEqual(str(error_context.exception), 'No valid list: not a list') with self.assertRaises(ValueError) as error_context: tlv8.EntryList(['not an entry']) self.assertEqual(str(error_context.exception), 'Not a valid tlv8.Entry: not an entry')
def test_decode_misinterpretation(self): """This show how data may be misinterpreted by deep_decode""" data = tlv8.encode([tlv8.Entry(1, 16843330), tlv8.Entry(2, b'\x01')]) result = tlv8.deep_decode(data) expected_data = tlv8.EntryList([ tlv8.Entry(1, tlv8.EntryList([tlv8.Entry(66, b'\x01\x01')])), tlv8.Entry(2, b'\x01') ]) self.assertEqual(result, expected_data)
def test_decode_4(self): input_data = b'\x01\x01\x23\x02\x03\x04\x01\x42\x01\x01\x23' result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'#'), tlv8.Entry(2, tlv8.EntryList([ tlv8.Entry(4, b'B'), ])), tlv8.Entry(1, b'#'), ]) self.assertEqual(expected, result)
def test_decode_supported_rtp_configs(self): data = \ b'\x02\x01\x00' + \ b'\x00\x00' + \ b'\x02\x01\x01' result = tlv8.deep_decode(data, ) expected_data = tlv8.EntryList([ tlv8.Entry(2, b'\x00'), tlv8.Entry(0, tlv8.EntryList()), tlv8.Entry(2, b'\x01') ]) self.assertEqual(result, expected_data)
def test_decode_example_3(self): input_data = b'\x01\x15\x01\x10e\xad\x8b\xe8\xb3fD\xcb\xbde#\xccc\n\xb8\xef\x02\x01\x01' result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry( 1, tlv8.EntryList([ tlv8.Entry( 1, b'e\xad\x8b\xe8\xb3fD\xcb\xbde#\xccc\n\xb8\xef'), tlv8.Entry(2, b'\x01'), ])), ]) self.assertEqual(expected, result)
def test_decode_missing_separator_nonstrict(self): data = b'\x01\x01\x02\x01\x01\x02' result = tlv8.deep_decode(data, strict_mode=False) self.assertEqual( result, tlv8.EntryList([tlv8.Entry(1, b'\x02'), tlv8.Entry(1, b'\x02')]))
def test_decode_example_2(self): input_data = b'\x01\x01\x00' result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'\x00'), ]) self.assertEqual(expected, result)
def test_entrylist_encode_same_sep_type(self): el = tlv8.EntryList([ tlv8.Entry(2, b'\x23'), tlv8.Entry(2, b'\x42') ]) result = el.encode(1) self.assertEqual(b'\x02\x01\x23\x01\x00\x02\x01\x42', result)
def test_entrylist_index(self): el = tlv8.EntryList() e1 = tlv8.Entry(1, 2) e2 = tlv8.Entry(3, 4) el.append(e1) el.append(e2) self.assertEqual(e2, el[1])
def test_entrylist_length(self): el = tlv8.EntryList() self.assertEqual(0, len(el)) el.append(tlv8.Entry(1, 2)) self.assertEqual(1, len(el)) el.append(tlv8.Entry(1, 2)) self.assertEqual(2, len(el))
def test_decode_int1(self): input_data = b'\x01\x01' + pack('<b', -123) result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'\x85'), ]) self.assertEqual(expected, result)
def test_decode_error_4(self): data = b'\x01\x02Hi' result = tlv8.decode(data, {1: tlv8.DataType.STRING}) expected_data = tlv8.EntryList([ tlv8.Entry(1, 'Hi') ]) self.assertEqual(result, expected_data)
def test_decode_float(self): input_data = b'\x01\x04' + pack('<f', 3.141) result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'%\x06I@'), ]) self.assertEqual(expected, result)
def test_decode_2_entries_1_expected(self): input_data = b'\x02\x01\x23\x03\x01\x42' structure = { 2: tlv8.DataType.INTEGER } result = tlv8.decode(input_data, structure) self.assertEqual(tlv8.EntryList([tlv8.Entry(2, 0x23)]), result)
def test_decode_int4(self): input_data = b'\x01\x08' + pack('<q', 4611686018427387904) result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'\x00\x00\x00\x00\x00\x00\x00@'), ]) self.assertEqual(expected, result)
def test_decode_int2(self): input_data = b'\x01\x02' + pack('<h', 12345) result = tlv8.deep_decode(input_data) expected = tlv8.EntryList([ tlv8.Entry(1, b'90'), ]) self.assertEqual(expected, result)
def test_entrylist_first_by_id(self): el = tlv8.EntryList([ tlv8.Entry(2, b'\x23'), tlv8.Entry(2, b'\x42') ]) self.assertEqual(el.first_by_id(1), None) self.assertEqual(el.first_by_id(2), el[0])
def test_decode_4(self): input_data = b'\x01\x01\x23\x02\x03\x04\x01\x42\x01\x01\x23' structure = { 1: tlv8.DataType.INTEGER, 2: { 4: tlv8.DataType.INTEGER, } } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 0x23), tlv8.Entry(2, tlv8.EntryList([ tlv8.Entry(4, 0x42), ])), tlv8.Entry(1, 0x23), ]) self.assertEqual(expected, result)
def test_entrylist_assert_has(self): el = tlv8.EntryList([ tlv8.Entry(2, b'\x23') ]) with self.assertRaises(AssertionError) as error_context: el.assert_has(3, 'no bla bla') self.assertEqual(str(error_context.exception), 'no bla bla') el.assert_has(2, 'no bla bla')
def test_decode_example_2(self): input_data = b'\x01\x01\x00' structure = { 1: tlv8.DataType.INTEGER, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 0), ]) self.assertEqual(expected, result)
def test_entrylist_format_string(self): el = tlv8.EntryList([ tlv8.Entry(1, 1), tlv8.Entry(2, tlv8.EntryList([ tlv8.Entry(4, 4), tlv8.Entry(5, 5) ])), tlv8.Entry(3, 3), ]) result = tlv8.format_string(el) expected = """[ <1, 1>, <2, [ <4, 4>, <5, 5>, ]>, <3, 3>, ]""" self.assertEqual(result, expected)
def test_decode_value(self): class TestValues(enum.IntEnum): VALUE_1 = 1 VALUE_2 = 2 data = b'\x01\x01\x02' result = tlv8.decode(data, {1: TestValues}) expected = tlv8.EntryList([tlv8.Entry(1, 2)]) self.assertIsInstance(result[0].data, TestValues) self.assertEqual(expected, result)
def test_decode_float(self): input_data = b'\x01\x04' + pack('<f', 3.141) structure = { 1: tlv8.DataType.FLOAT, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 3.141), ]) self.assertEqual(expected, result)
def test_decode_key(self): class TestKeys(enum.IntEnum): KEY_1 = 1 KEY_2 = 2 data = b'\x01\x03foo' result = tlv8.decode(data, {TestKeys.KEY_1: tlv8.DataType.STRING}) expected = tlv8.EntryList([tlv8.Entry(TestKeys.KEY_1, 'foo')]) self.assertIsInstance(result[0].type_id, TestKeys) self.assertEqual(expected, result)
def test_decode_int2_un(self): input_data = b'\x01\x02' + pack('<H', 12345) structure = { 1: tlv8.DataType.UNSIGNED_INTEGER, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 12345), ]) self.assertEqual(expected, result)
def test_decode_int1_pos(self): input_data = b'\x01\x01' + pack('<b', 123) structure = { 1: tlv8.DataType.INTEGER, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 123), ]) self.assertEqual(expected, result)
def test_decode_int8_un(self): input_data = b'\x01\x08' + pack('<q', 4611686018427387904) structure = { 1: tlv8.DataType.UNSIGNED_INTEGER, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, 4611686018427387904), ]) self.assertEqual(expected, result)
def test_decode_int4_neg(self): input_data = b'\x01\x04' + pack('<i', -12345) structure = { 1: tlv8.DataType.INTEGER, } result = tlv8.decode(input_data, structure) expected = tlv8.EntryList([ tlv8.Entry(1, -12345), ]) self.assertEqual(expected, result)