test_dht_storage.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import time
  2. from hivemind import DHTID, get_dht_time
  3. from hivemind.dht.protocol import LocalStorage
  4. def test_store():
  5. d = LocalStorage()
  6. d.store(DHTID.generate("key"), b"val", get_dht_time() + 0.5)
  7. assert d.get(DHTID.generate("key"))[0] == b"val", "Wrong value"
  8. print("Test store passed")
  9. def test_get_expired():
  10. d = LocalStorage()
  11. d.store(DHTID.generate("key"), b"val", get_dht_time() + 0.1)
  12. time.sleep(0.5)
  13. assert d.get(DHTID.generate("key")) == (None, None), "Expired value must be deleted"
  14. print("Test get expired passed")
  15. def test_get_empty():
  16. d = LocalStorage()
  17. assert d.get(DHTID.generate(source="key")) == (None, None), "LocalStorage returned non-existent value"
  18. print("Test get expired passed")
  19. def test_change_expiration_time():
  20. d = LocalStorage()
  21. d.store(DHTID.generate("key"), b"val1", get_dht_time() + 1)
  22. assert d.get(DHTID.generate("key"))[0] == b"val1", "Wrong value"
  23. d.store(DHTID.generate("key"), b"val2", get_dht_time() + 200)
  24. time.sleep(1)
  25. assert d.get(DHTID.generate("key"))[0] == b"val2", "Value must be changed, but still kept in table"
  26. print("Test change expiration time passed")
  27. def test_maxsize_cache():
  28. d = LocalStorage(maxsize=1)
  29. d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
  30. d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 200)
  31. assert d.get(DHTID.generate("key2"))[0] == b"val2", "Value with bigger exp. time must be kept"
  32. assert d.get(DHTID.generate("key1"))[0] is None, "Value with less exp time, must be deleted"
  33. def test_localstorage_top():
  34. d = LocalStorage(maxsize=3)
  35. d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
  36. d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 2)
  37. d.store(DHTID.generate("key3"), b"val3", get_dht_time() + 4)
  38. assert d.top()[:2] == (DHTID.generate("key1"), b"val1")
  39. d.store(DHTID.generate("key1"), b"val1_new", get_dht_time() + 3)
  40. assert d.top()[:2] == (DHTID.generate("key2"), b"val2")
  41. del d[DHTID.generate('key2')]
  42. assert d.top()[:2] == (DHTID.generate("key1"), b"val1_new")
  43. d.store(DHTID.generate("key2"), b"val2_new", get_dht_time() + 5)
  44. d.store(DHTID.generate("key4"), b"val4", get_dht_time() + 6) # key4 will push out key1 due to maxsize
  45. assert d.top()[:2] == (DHTID.generate("key3"), b"val3")
  46. def test_localstorage_freeze():
  47. d = LocalStorage(maxsize=2)
  48. with d.freeze():
  49. d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 0.01)
  50. assert DHTID.generate("key1") in d
  51. time.sleep(0.03)
  52. assert DHTID.generate("key1") in d
  53. assert DHTID.generate("key1") not in d
  54. with d.freeze():
  55. d.store(DHTID.generate("key1"), b"val1", get_dht_time() + 1)
  56. d.store(DHTID.generate("key2"), b"val2", get_dht_time() + 2)
  57. d.store(DHTID.generate("key3"), b"val3", get_dht_time() + 3) # key3 will push key1 out due to maxsize
  58. assert DHTID.generate("key1") in d
  59. assert DHTID.generate("key1") not in d