hashindex.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. import hashlib
  2. import tempfile
  3. from darc.hashindex import NSIndex, ChunkIndex
  4. from darc.testsuite import DarcTestCase
  5. class HashIndexTestCase(DarcTestCase):
  6. def _generic_test(self, cls, make_value, sha):
  7. idx_name = tempfile.NamedTemporaryFile()
  8. idx = cls.create(idx_name.name)
  9. self.assert_equal(len(idx), 0)
  10. # Test set
  11. for x in range(100):
  12. idx[bytes('%-32d' % x, 'ascii')] = make_value(x)
  13. self.assert_equal(len(idx), 100)
  14. for x in range(100):
  15. self.assert_equal(idx[bytes('%-32d' % x, 'ascii')], make_value(x))
  16. # Test update
  17. for x in range(100):
  18. idx[bytes('%-32d' % x, 'ascii')] = make_value(x * 2)
  19. self.assert_equal(len(idx), 100)
  20. for x in range(100):
  21. self.assert_equal(idx[bytes('%-32d' % x, 'ascii')], make_value(x * 2))
  22. # Test delete
  23. for x in range(50):
  24. del idx[bytes('%-32d' % x, 'ascii')]
  25. self.assert_equal(len(idx), 50)
  26. del idx
  27. # Verify file contents
  28. with open(idx_name.name, 'rb') as fd:
  29. self.assert_equal(hashlib.sha256(fd.read()).hexdigest(), sha)
  30. # Make sure we can open the file
  31. idx = cls(idx_name.name)
  32. self.assert_equal(len(idx), 50)
  33. for x in range(50, 100):
  34. self.assert_equal(idx[bytes('%-32d' % x, 'ascii')], make_value(x * 2))
  35. idx.clear()
  36. self.assert_equal(len(idx), 0)
  37. del idx
  38. self.assert_equal(len(cls(idx_name.name)), 0)
  39. def test_nsindex(self):
  40. self._generic_test(NSIndex, lambda x: (x, x), '926af057de19a82903fab517e0813e6fa16e4129df5b7062e9b1f24bbe98fb24')
  41. def test_chunkindex(self):
  42. self._generic_test(ChunkIndex, lambda x: (x, x, x), 'cc60ec9265d172b20c33b6c00160abda1a6e881d07088b9d1c5997a82e05f5a7')