python-api.py 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. #!/usr/bin/env python
  2. # Some simple tests for the Python bindings for TDB
  3. # Note that this tests the interface of the Python bindings
  4. # It does not test tdb itself.
  5. #
  6. # Copyright (C) 2007-2013 Jelmer Vernooij <jelmer@samba.org>
  7. # Published under the GNU LGPLv3 or later
  8. import ntdb
  9. from unittest import TestCase
  10. import os, tempfile
  11. class OpenTdbTests(TestCase):
  12. def test_nonexistent_read(self):
  13. self.assertRaises(IOError, ntdb.Ntdb, "/some/nonexistent/file", 0,
  14. ntdb.DEFAULT, os.O_RDWR)
  15. class CloseTdbTests(TestCase):
  16. def test_double_close(self):
  17. self.ntdb = ntdb.Ntdb(tempfile.mkstemp()[1], ntdb.DEFAULT,
  18. os.O_CREAT|os.O_RDWR)
  19. self.assertNotEqual(None, self.ntdb)
  20. # ensure that double close does not crash python
  21. self.ntdb.close()
  22. self.ntdb.close()
  23. # Check that further operations do not crash python
  24. self.assertRaises(RuntimeError, lambda: self.ntdb.transaction_start())
  25. self.assertRaises(RuntimeError, lambda: self.ntdb["bar"])
  26. class InternalTdbTests(TestCase):
  27. def test_repr(self):
  28. self.ntdb = ntdb.Ntdb()
  29. # repr used to crash on internal db
  30. self.assertEquals(repr(self.ntdb), "Ntdb(<internal>)")
  31. class SimpleTdbTests(TestCase):
  32. def setUp(self):
  33. super(SimpleTdbTests, self).setUp()
  34. self.ntdb = ntdb.Ntdb(tempfile.mkstemp()[1], ntdb.DEFAULT,
  35. os.O_CREAT|os.O_RDWR)
  36. self.assertNotEqual(None, self.ntdb)
  37. def tearDown(self):
  38. del self.ntdb
  39. def test_repr(self):
  40. self.assertTrue(repr(self.ntdb).startswith("Ntdb('"))
  41. def test_lockall(self):
  42. self.ntdb.lock_all()
  43. def test_unlockall(self):
  44. self.ntdb.lock_all()
  45. self.ntdb.unlock_all()
  46. def test_lockall_read(self):
  47. self.ntdb.read_lock_all()
  48. self.ntdb.read_unlock_all()
  49. def test_store(self):
  50. self.ntdb.store("bar", "bla")
  51. self.assertEquals("bla", self.ntdb.get("bar"))
  52. def test_getitem(self):
  53. self.ntdb["bar"] = "foo"
  54. self.assertEquals("foo", self.ntdb["bar"])
  55. def test_delete(self):
  56. self.ntdb["bar"] = "foo"
  57. del self.ntdb["bar"]
  58. self.assertRaises(KeyError, lambda: self.ntdb["bar"])
  59. def test_contains(self):
  60. self.ntdb["bla"] = "bloe"
  61. self.assertTrue("bla" in self.ntdb)
  62. def test_keyerror(self):
  63. self.assertRaises(KeyError, lambda: self.ntdb["bla"])
  64. def test_name(self):
  65. self.ntdb.filename
  66. def test_iterator(self):
  67. self.ntdb["bla"] = "1"
  68. self.ntdb["brainslug"] = "2"
  69. l = list(self.ntdb)
  70. l.sort()
  71. self.assertEquals(["bla", "brainslug"], l)
  72. def test_transaction_cancel(self):
  73. self.ntdb["bloe"] = "2"
  74. self.ntdb.transaction_start()
  75. self.ntdb["bloe"] = "1"
  76. self.ntdb.transaction_cancel()
  77. self.assertEquals("2", self.ntdb["bloe"])
  78. def test_transaction_commit(self):
  79. self.ntdb["bloe"] = "2"
  80. self.ntdb.transaction_start()
  81. self.ntdb["bloe"] = "1"
  82. self.ntdb.transaction_commit()
  83. self.assertEquals("1", self.ntdb["bloe"])
  84. def test_transaction_prepare_commit(self):
  85. self.ntdb["bloe"] = "2"
  86. self.ntdb.transaction_start()
  87. self.ntdb["bloe"] = "1"
  88. self.ntdb.transaction_prepare_commit()
  89. self.ntdb.transaction_commit()
  90. self.assertEquals("1", self.ntdb["bloe"])
  91. def test_iterkeys(self):
  92. self.ntdb["bloe"] = "2"
  93. self.ntdb["bla"] = "25"
  94. i = self.ntdb.iterkeys()
  95. self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
  96. def test_clear(self):
  97. self.ntdb["bloe"] = "2"
  98. self.ntdb["bla"] = "25"
  99. self.assertEquals(2, len(list(self.ntdb)))
  100. self.ntdb.clear()
  101. self.assertEquals(0, len(list(self.ntdb)))
  102. def test_len(self):
  103. self.assertEquals(0, len(list(self.ntdb)))
  104. self.ntdb["entry"] = "value"
  105. self.assertEquals(1, len(list(self.ntdb)))
  106. def test_add_flags(self):
  107. self.ntdb.add_flag(ntdb.NOMMAP)
  108. self.ntdb.remove_flag(ntdb.NOMMAP)
  109. class VersionTests(TestCase):
  110. def test_present(self):
  111. self.assertTrue(isinstance(ntdb.__version__, str))
  112. if __name__ == '__main__':
  113. import unittest
  114. unittest.TestProgram()