12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import time
- from hivemind import DHTID, get_dht_time
- from hivemind.dht.protocol import LocalStorage
- def test_store():
- d = LocalStorage()
- d.store(DHTID.generate("key"), b"val", get_dht_time() + 0.5)
- assert d.get(DHTID.generate("key"))[0] == b"val", "Wrong value"
- print("Test store passed")
- def test_get_expired():
- d = LocalStorage()
- d.store(DHTID.generate("key"), b"val", get_dht_time() + 0.1)
- time.sleep(0.5)
- assert d.get(DHTID.generate("key")) == (None, None), "Expired value must be deleted"
- print("Test get expired passed")
- def test_get_empty():
- d = LocalStorage()
- assert d.get(DHTID.generate(source="key")) == (None, None), "LocalStorage returned non-existent value"
- print("Test get expired passed")
- def test_change_expiration_time():
- d = LocalStorage()
- d.store(DHTID.generate("key"), b"val1", get_dht_time() + 1)
- assert d.get(DHTID.generate("key"))[0] == b"val1", "Wrong value"
- d.store(DHTID.generate("key"), b"val2", get_dht_time() + 200)
- time.sleep(1)
- assert d.get(DHTID.generate("key"))[0] == b"val2", "Value must be changed, but still kept in table"
- print("Test change expiration time passed")
- def test_maxsize_cache():
- d = LocalStorage(maxsize=1)
- d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
- d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 200)
- assert d.get(DHTID.generate("key2"))[0] == b"val2", "Value with bigger exp. time must be kept"
- assert d.get(DHTID.generate("key1"))[0] is None, "Value with less exp time, must be deleted"
- def test_localstorage_top():
- d = LocalStorage(maxsize=3)
- d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
- d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 2)
- d.store(DHTID.generate("key3"), b"val3", get_dht_time() + 4)
- assert d.top()[:2] == (DHTID.generate("key1"), b"val1")
- d.store(DHTID.generate("key1"), b"val1_new", get_dht_time() + 3)
- assert d.top()[:2] == (DHTID.generate("key2"), b"val2")
- del d[DHTID.generate('key2')]
- assert d.top()[:2] == (DHTID.generate("key1"), b"val1_new")
- d.store(DHTID.generate("key2"), b"val2_new", get_dht_time() + 5)
- d.store(DHTID.generate("key4"), b"val4", get_dht_time() + 6) # key4 will push out key1 due to maxsize
- assert d.top()[:2] == (DHTID.generate("key3"), b"val3")
- def test_localstorage_freeze():
- d = LocalStorage(maxsize=2)
- with d.freeze():
- d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 0.01)
- assert DHTID.generate("key1") in d
- time.sleep(0.03)
- assert DHTID.generate("key1") in d
- assert DHTID.generate("key1") not in d
- with d.freeze():
- d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
- d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 2)
- d.store(DHTID.generate("key3"), b"val3", get_dht_time() + 3) # key3 will push key1 out due to maxsize
- assert DHTID.generate("key1") in d
- assert DHTID.generate("key1") not in d
|