PageRenderTime 48ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/fstmerge/examples/eXe/rev3426-3500/right-branch-3500/twisted/test/test_dirdbm.py

https://github.com/RoDaniel/featurehouse
Python | 106 lines | 102 code | 0 blank | 4 comment | 6 complexity | 471a83f3895eeb081e84fe81d519cd03 MD5 | raw file
  1. """
  2. Test cases for dirdbm module.
  3. """
  4. from twisted.trial import unittest
  5. from twisted.persisted import dirdbm
  6. import os, shutil, glob
  7. class DirDbmTestCase(unittest.TestCase):
  8. def setUp(self):
  9. self.path = self.mktemp()
  10. self.dbm = dirdbm.open(self.path)
  11. self.items = (('abc', 'foo'), ('/lalal', '\000\001'), ('\000\012', 'baz'))
  12. def tearDown(self):
  13. shutil.rmtree(self.path)
  14. def testAll(self):
  15. k = "//==".decode("base64")
  16. self.dbm[k] = "a"
  17. self.dbm[k] = "a"
  18. self.assertEquals(self.dbm[k], "a")
  19. def testRebuildInteraction(self):
  20. from twisted.persisted import dirdbm
  21. from twisted.python import rebuild
  22. s = dirdbm.Shelf('dirdbm.rebuild.test')
  23. s['key'] = 'value'
  24. rebuild.rebuild(dirdbm)
  25. def testDbm(self):
  26. d = self.dbm
  27. keys = []
  28. values = []
  29. for k, v in self.items:
  30. d[k] = v
  31. keys.append(k)
  32. values.append(v)
  33. keys.sort()
  34. values.sort()
  35. for k, v in self.items:
  36. assert d.has_key(k), "has_key() failed"
  37. assert d[k] == v, "database has wrong value"
  38. try:
  39. d["XXX"]
  40. except KeyError:
  41. pass
  42. else:
  43. assert 0, "didn't raise KeyError on non-existent key"
  44. dbkeys = list(d.keys())
  45. dbvalues = list(d.values())
  46. dbitems = list(d.items())
  47. dbkeys.sort()
  48. dbvalues.sort()
  49. dbitems.sort()
  50. items = list(self.items)
  51. items.sort()
  52. assert keys == dbkeys, ".keys() output didn't match: %s != %s" % (repr(keys), repr(dbkeys))
  53. assert values == dbvalues, ".values() output didn't match: %s != %s" % (repr(values), repr(dbvalues))
  54. assert items == dbitems, "items() didn't match: %s != %s" % (repr(items), repr(dbitems))
  55. copyPath = self.mktemp()
  56. d2 = d.copyTo(copyPath)
  57. copykeys = list(d.keys())
  58. copyvalues = list(d.values())
  59. copyitems = list(d.items())
  60. copykeys.sort()
  61. copyvalues.sort()
  62. copyitems.sort()
  63. assert dbkeys == copykeys, ".copyTo().keys() didn't match: %s != %s" % (repr(dbkeys), repr(copykeys))
  64. assert dbvalues == copyvalues, ".copyTo().values() didn't match: %s != %s" % (repr(dbvalues), repr(copyvalues))
  65. assert dbitems == copyitems, ".copyTo().items() didn't match: %s != %s" % (repr(dbkeys), repr(copyitems))
  66. d2.clear()
  67. assert len(d2.keys()) == len(d2.values()) == len(d2.items()) == 0, ".clear() failed"
  68. shutil.rmtree(copyPath)
  69. for k, v in self.items:
  70. del d[k]
  71. assert not d.has_key(k), "has_key() even though we deleted it"
  72. assert len(d.keys()) == 0, "database has keys"
  73. assert len(d.values()) == 0, "database has values"
  74. assert len(d.items()) == 0, "database has items"
  75. def testModificationTime(self):
  76. import time
  77. self.dbm["k"] = "v"
  78. self.assert_(abs(time.time() - self.dbm.getModificationTime("k")) <= 3)
  79. def testRecovery(self):
  80. """DirDBM: test recovery from directory after a faked crash"""
  81. k = self.dbm._encode("key1")
  82. f = open(os.path.join(self.path, k + ".rpl"), "wb")
  83. f.write("value")
  84. f.close()
  85. k2 = self.dbm._encode("key2")
  86. f = open(os.path.join(self.path, k2), "wb")
  87. f.write("correct")
  88. f.close()
  89. f = open(os.path.join(self.path, k2 + ".rpl"), "wb")
  90. f.write("wrong")
  91. f.close()
  92. f = open(os.path.join(self.path, "aa.new"), "wb")
  93. f.write("deleted")
  94. f.close()
  95. dbm = dirdbm.DirDBM(self.path)
  96. assert dbm["key1"] == "value"
  97. assert dbm["key2"] == "correct"
  98. assert not glob.glob(os.path.join(self.path, "*.new"))
  99. assert not glob.glob(os.path.join(self.path, "*.rpl"))
  100. class ShelfTestCase(DirDbmTestCase):
  101. def setUp(self):
  102. self.path = self.mktemp()
  103. self.dbm = dirdbm.Shelf(self.path)
  104. self.items = (('abc', 'foo'), ('/lalal', '\000\001'), ('\000\012', 'baz'),
  105. ('int', 12), ('float', 12.0), ('tuple', (None, 12)))
  106. testCases = [DirDbmTestCase, ShelfTestCase]