Source code for bytestag.dht.models_test
from bytestag.dht.models import (NodeList, KVPExchangeInfoList, KVPExchangeInfo,
FileInfo, CollectionInfo)
from bytestag.dht.tables import Node
from bytestag.keys import KeyBytes
import unittest
[docs]class TestNodeList(unittest.TestCase):
[docs] def test_josn_support(self):
'''It should convert to json and back'''
node_list = NodeList([Node(KeyBytes(), ('127.0.0.1', 12345))])
self.assertEqual(node_list,
NodeList.from_json_loadable(node_list.to_json_dumpable()))
[docs]class TestKVPExchangeInfoList(unittest.TestCase):
[docs] def test_josn_support(self):
'''It should convert to json and back'''
kvp_info_list = KVPExchangeInfoList(
[KVPExchangeInfo(KeyBytes(), KeyBytes(), 123, 456)])
self.assertEqual(kvp_info_list,
KVPExchangeInfoList.from_json_loadable(
kvp_info_list.to_json_dumpable()))
[docs]class TestKVPExchangeInfo(unittest.TestCase):
[docs] def test_json_support(self):
'''It should convert to json and back'''
kvp_info = KVPExchangeInfo(KeyBytes(), KeyBytes(), 1234, 123456789)
self.assertEqual(kvp_info,
KVPExchangeInfo.from_json_loadable(kvp_info.to_json_dumpable()))
[docs]class TestFileInfo(unittest.TestCase):
[docs] def test_read_json(self):
'''It should read in a json with basic info'''
s = (b'{'
b'"!":"BytestagFileInfo",'
b'"hash":"jbip9t8iC9lEz3jndkm5I2fTWV0=",'
b'"parts":["jbip9t8iC9lEz3jndkm5I2fTWV0="]'
b'}')
info = FileInfo.from_bytes(s)
self.assertEqual(info.file_hash,
KeyBytes('jbip9t8iC9lEz3jndkm5I2fTWV0='))
self.assertEqual(info.part_hashes,
[KeyBytes('jbip9t8iC9lEz3jndkm5I2fTWV0=')])
result_bytes = info.to_bytes()
self.assertEqual(s, result_bytes)
[docs] def test_read_json_extended(self):
'''It should read in a json with extended info'''
s = (b'{'
b'"!":"BytestagFileInfo",'
b'"filename":["my_file.txt"],'
b'"hash":"jbip9t8iC9lEz3jndkm5I2fTWV0=",'
b'"parts":["jbip9t8iC9lEz3jndkm5I2fTWV0="],'
b'"size":123'
b'}')
info = FileInfo.from_bytes(s)
self.assertEqual(info.file_hash,
KeyBytes('jbip9t8iC9lEz3jndkm5I2fTWV0='))
self.assertEqual(info.part_hashes,
[KeyBytes('jbip9t8iC9lEz3jndkm5I2fTWV0=')])
self.assertEqual(info.size, 123)
self.assertEqual(info.filename, ['my_file.txt'])
result_bytes = info.to_bytes()
self.assertEqual(s, result_bytes)
[docs]class TestCollectionInfo(unittest.TestCase):
[docs] def test_read_json(self):
'''It should read in json with basic info'''
s = (b'{'
b'"!":"BytestagCollectionInfo",'
b'"files":['
b'{'
b'"!":"BytestagFileInfo",'
b'"hash":"jbip9t8iC9lEz3jndkm5I2fTWV0=",'
b'"parts":["jbip9t8iC9lEz3jndkm5I2fTWV0="]'
b'}'
b']'
b'}')
info = CollectionInfo.from_bytes(s)
self.assertIsInstance(info.file_infos[0], FileInfo)
result_bytes = info.to_bytes()
self.assertEqual(s, result_bytes)