repository.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import os
  2. import shutil
  3. import tempfile
  4. from darc.helpers import Location
  5. from darc.remote import RemoteRepository
  6. from darc.repository import Repository
  7. from darc.testsuite import DarcTestCase
  8. class RepositoryTestCase(DarcTestCase):
  9. def open(self, create=False):
  10. return Repository(os.path.join(self.tmppath, 'repository'), create=create)
  11. def setUp(self):
  12. self.tmppath = tempfile.mkdtemp()
  13. self.repository = self.open(create=True)
  14. def tearDown(self):
  15. self.repository.close()
  16. shutil.rmtree(self.tmppath)
  17. def test1(self):
  18. for x in range(100):
  19. self.repository.put(('%-32d' % x).encode('ascii'), b'SOMEDATA')
  20. key50 = ('%-32d' % 50).encode('ascii')
  21. self.assert_equal(self.repository.get(key50), b'SOMEDATA')
  22. self.repository.delete(key50)
  23. self.assert_raises(Repository.DoesNotExist, lambda: self.repository.get(key50))
  24. self.repository.commit()
  25. self.repository.close()
  26. repository2 = self.open()
  27. self.assert_raises(Repository.DoesNotExist, lambda: repository2.get(key50))
  28. for x in range(100):
  29. if x == 50:
  30. continue
  31. self.assert_equal(repository2.get(('%-32d' % x).encode('ascii')), b'SOMEDATA')
  32. repository2.close()
  33. def test2(self):
  34. """Test multiple sequential transactions
  35. """
  36. self.repository.put(b'00000000000000000000000000000000', b'foo')
  37. self.repository.put(b'00000000000000000000000000000001', b'foo')
  38. self.repository.commit()
  39. self.repository.delete(b'00000000000000000000000000000000')
  40. self.repository.put(b'00000000000000000000000000000001', b'bar')
  41. self.repository.commit()
  42. self.assert_equal(self.repository.get(b'00000000000000000000000000000001'), b'bar')
  43. def test_consistency(self):
  44. """Test cache consistency
  45. """
  46. self.repository.put(b'00000000000000000000000000000000', b'foo')
  47. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'foo')
  48. self.repository.put(b'00000000000000000000000000000000', b'foo2')
  49. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'foo2')
  50. self.repository.put(b'00000000000000000000000000000000', b'bar')
  51. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'bar')
  52. self.repository.delete(b'00000000000000000000000000000000')
  53. self.assert_raises(Repository.DoesNotExist, lambda: self.repository.get(b'00000000000000000000000000000000'))
  54. def test_consistency2(self):
  55. """Test cache consistency2
  56. """
  57. self.repository.put(b'00000000000000000000000000000000', b'foo')
  58. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'foo')
  59. self.repository.commit()
  60. self.repository.put(b'00000000000000000000000000000000', b'foo2')
  61. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'foo2')
  62. self.repository.rollback()
  63. self.assert_equal(self.repository.get(b'00000000000000000000000000000000'), b'foo')
  64. def test_single_kind_transactions(self):
  65. # put
  66. self.repository.put(b'00000000000000000000000000000000', b'foo')
  67. self.repository.commit()
  68. self.repository.close()
  69. # replace
  70. self.repository = self.open()
  71. self.repository.put(b'00000000000000000000000000000000', b'bar')
  72. self.repository.commit()
  73. self.repository.close()
  74. # delete
  75. self.repository = self.open()
  76. self.repository.delete(b'00000000000000000000000000000000')
  77. self.repository.commit()
  78. class RemoteRepositoryTestCase(RepositoryTestCase):
  79. def open(self, create=False):
  80. return RemoteRepository(Location('localhost:' + os.path.join(self.tmppath, 'repository')), create=create)