pytdb: Add support for tdb_repack()
[samba.git] / lib / tdb / python / tests / simple.py
index 7147718c91fa8fc5cd70798db34e6b3868be307e..6386a2871f30d21b94426e89a51bc56c7170c2a6 100644 (file)
@@ -1,4 +1,4 @@
-#!/usr/bin/python
+#!/usr/bin/env python
 # Some simple tests for the Python bindings for TDB
 # Note that this tests the interface of the Python bindings
 # It does not test tdb itself.
@@ -12,14 +12,38 @@ import os, tempfile
 
 
 class OpenTdbTests(TestCase):
+
     def test_nonexistant_read(self):
-        self.assertRaises(IOError, tdb.Tdb, "/some/nonexistant/file", 0, tdb.DEFAULT, os.O_RDWR)
+        self.assertRaises(IOError, tdb.Tdb, "/some/nonexistant/file", 0,
+                tdb.DEFAULT, os.O_RDWR)
+
+class CloseTdbTests(TestCase):
+
+    def test_double_close(self):
+        self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT,
+                os.O_CREAT|os.O_RDWR)
+        self.assertNotEqual(None, self.tdb)
+
+        # ensure that double close does not crash python
+        self.tdb.close()
+        self.tdb.close()
+
+
+class InternalTdbTests(TestCase):
+
+    def test_repr(self):
+        self.tdb = tdb.Tdb()
+
+        # repr used to crash on internal db
+        self.assertEquals(repr(self.tdb), "Tdb(<internal>)")
 
 
 class SimpleTdbTests(TestCase):
+
     def setUp(self):
         super(SimpleTdbTests, self).setUp()
-        self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT, os.O_CREAT|os.O_RDWR)
+        self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT,
+                os.O_CREAT|os.O_RDWR)
         self.assertNotEqual(None, self.tdb)
 
     def tearDown(self):
@@ -72,26 +96,17 @@ class SimpleTdbTests(TestCase):
     def test_map_size(self):
         self.tdb.map_size
 
+    def test_freelist_size(self):
+        self.tdb.freelist_size
+
     def test_name(self):
-        self.tdb.name
+        self.tdb.filename
 
     def test_iterator(self):
         self.tdb["bla"] = "1"
         self.tdb["brainslug"] = "2"
         self.assertEquals(["bla", "brainslug"], list(self.tdb))
 
-    def test_items(self):
-        self.tdb["bla"] = "1"
-        self.tdb["brainslug"] = "2"
-        self.assertEquals([("bla", "1"), ("brainslug", "2")], self.tdb.items())
-
-    def test_iteritems(self):
-        self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "25"
-        i = self.tdb.iteritems()
-        self.assertEquals(set([("bla", "25"), ("bloe", "2")]),
-                              set([i.next(), i.next()]))
-
     def test_transaction_cancel(self):
         self.tdb["bloe"] = "2"
         self.tdb.transaction_start()
@@ -106,16 +121,13 @@ class SimpleTdbTests(TestCase):
         self.tdb.transaction_commit()
         self.assertEquals("1", self.tdb["bloe"])
 
-    def test_iterator(self):
+    def test_transaction_prepare_commit(self):
         self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "hoi"
-        i = iter(self.tdb)
-        self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
-
-    def test_keys(self):
-        self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "25"
-        self.assertEquals(["bla", "bloe"], self.tdb.keys())
+        self.tdb.transaction_start()
+        self.tdb["bloe"] = "1"
+        self.tdb.transaction_prepare_commit()
+        self.tdb.transaction_commit()
+        self.assertEquals("1", self.tdb["bloe"])
 
     def test_iterkeys(self):
         self.tdb["bloe"] = "2"
@@ -123,28 +135,34 @@ class SimpleTdbTests(TestCase):
         i = self.tdb.iterkeys()
         self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
 
-    def test_values(self):
-        self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "25"
-        self.assertEquals(["25", "2"], self.tdb.values())
-
-    def test_itervalues(self):
-        self.tdb["bloe"] = "2"
-        self.tdb["bla"] = "25"
-        i = self.tdb.itervalues()
-        self.assertEquals(set(["25", "2"]), set([i.next(), i.next()]))
-
     def test_clear(self):
         self.tdb["bloe"] = "2"
         self.tdb["bla"] = "25"
-        self.assertEquals(2, len(self.tdb))
+        self.assertEquals(2, len(list(self.tdb)))
         self.tdb.clear()
-        self.assertEquals(0, len(self.tdb))
+        self.assertEquals(0, len(list(self.tdb)))
+
+    def test_repack(self):
+        self.tdb["foo"] = "abc"
+        self.tdb["bar"] = "def"
+        del self.tdb["foo"]
+        self.tdb.repack()
+
+    def test_seqnum(self):
+        self.tdb.enable_seqnum()
+        seq1 = self.tdb.seqnum
+        self.tdb.increment_seqnum_nonblock()
+        seq2 = self.tdb.seqnum
+        self.assertEquals(seq2-seq1, 1)
 
     def test_len(self):
-        self.assertEquals(0, len(self.tdb))
+        self.assertEquals(0, len(list(self.tdb)))
         self.tdb["entry"] = "value"
-        self.assertEquals(1, len(self.tdb))
+        self.assertEquals(1, len(list(self.tdb)))
+
+    def test_add_flags(self):
+        self.tdb.add_flags(tdb.NOMMAP)
+        self.tdb.remove_flags(tdb.NOMMAP)
 
 
 if __name__ == '__main__':