2018-05-24 00:28:22 +02:00
|
|
|
from twisted.trial import unittest
|
2018-07-31 03:23:38 +02:00
|
|
|
from lbrynet.dht.encoding import bencode, bdecode, DecodeError
|
|
|
|
|
|
|
|
|
|
|
|
class EncodeDecodeTest(unittest.TestCase):
|
|
|
|
|
|
|
|
def test_integer(self):
|
|
|
|
self.assertEqual(bencode(42), b'i42e')
|
|
|
|
|
|
|
|
self.assertEqual(bdecode(b'i42e'), 42)
|
|
|
|
|
|
|
|
def test_bytes(self):
|
|
|
|
self.assertEqual(bencode(b''), b'0:')
|
|
|
|
self.assertEqual(bencode(b'spam'), b'4:spam')
|
|
|
|
self.assertEqual(bencode(b'4:spam'), b'6:4:spam')
|
|
|
|
self.assertEqual(bencode(bytearray(b'spam')), b'4:spam')
|
|
|
|
|
|
|
|
self.assertEqual(bdecode(b'0:'), b'')
|
|
|
|
self.assertEqual(bdecode(b'4:spam'), b'spam')
|
|
|
|
self.assertEqual(bdecode(b'6:4:spam'), b'4:spam')
|
|
|
|
|
|
|
|
def test_string(self):
|
|
|
|
self.assertEqual(bencode(''), b'0:')
|
|
|
|
self.assertEqual(bencode('spam'), b'4:spam')
|
|
|
|
self.assertEqual(bencode('4:spam'), b'6:4:spam')
|
|
|
|
|
|
|
|
def test_list(self):
|
|
|
|
self.assertEqual(bencode([b'spam', 42]), b'l4:spami42ee')
|
|
|
|
|
|
|
|
self.assertEqual(bdecode(b'l4:spami42ee'), [b'spam', 42])
|
|
|
|
|
|
|
|
def test_dict(self):
|
|
|
|
self.assertEqual(bencode({b'foo': 42, b'bar': b'spam'}), b'd3:bar4:spam3:fooi42ee')
|
|
|
|
|
|
|
|
self.assertEqual(bdecode(b'd3:bar4:spam3:fooi42ee'), {b'foo': 42, b'bar': b'spam'})
|
|
|
|
|
|
|
|
def test_mixed(self):
|
|
|
|
self.assertEqual(bencode(
|
|
|
|
[[b'abc', b'127.0.0.1', 1919], [b'def', b'127.0.0.1', 1921]]),
|
|
|
|
b'll3:abc9:127.0.0.1i1919eel3:def9:127.0.0.1i1921eee'
|
|
|
|
)
|
|
|
|
|
|
|
|
self.assertEqual(bdecode(
|
|
|
|
b'll3:abc9:127.0.0.1i1919eel3:def9:127.0.0.1i1921eee'),
|
|
|
|
[[b'abc', b'127.0.0.1', 1919], [b'def', b'127.0.0.1', 1921]]
|
|
|
|
)
|
|
|
|
|
|
|
|
def test_decode_error(self):
|
|
|
|
self.assertRaises(DecodeError, bdecode, b'abcdefghijklmnopqrstuvwxyz')
|
|
|
|
self.assertRaises(DecodeError, bdecode, b'')
|