repository.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import os
  2. import shutil
  3. import tempfile
  4. from attic.helpers import Location
  5. from attic.remote import RemoteRepository
  6. from attic.repository import Repository
  7. from attic.testsuite import AtticTestCase
  8. class RepositoryTestCase(AtticTestCase):
  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('__testsuite__:' + os.path.join(self.tmppath, 'repository')), create=create)