pytdb: Add support for tdb_add_flags() & tdb_remove_flags()
[samba.git] / lib / tdb / python / tests / simple.py
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-2008 Jelmer Vernooij <jelmer@samba.org>
7 # Published under the GNU LGPLv3 or later
8
9 import tdb
10 from unittest import TestCase
11 import os, tempfile
12
13
14 class OpenTdbTests(TestCase):
15
16     def test_nonexistant_read(self):
17         self.assertRaises(IOError, tdb.Tdb, "/some/nonexistant/file", 0,
18                 tdb.DEFAULT, os.O_RDWR)
19
20 class CloseTdbTests(TestCase):
21     def test_double_close(self):
22         self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT,
23                 os.O_CREAT|os.O_RDWR)
24         self.assertNotEqual(None, self.tdb)
25
26         # ensure that double close does not crash python
27         self.tdb.close()
28         self.tdb.close()
29
30
31 class SimpleTdbTests(TestCase):
32
33     def setUp(self):
34         super(SimpleTdbTests, self).setUp()
35         self.tdb = tdb.Tdb(tempfile.mkstemp()[1], 0, tdb.DEFAULT,
36                 os.O_CREAT|os.O_RDWR)
37         self.assertNotEqual(None, self.tdb)
38
39     def tearDown(self):
40         del self.tdb
41
42     def test_repr(self):
43         self.assertTrue(repr(self.tdb).startswith("Tdb('"))
44
45     def test_lockall(self):
46         self.tdb.lock_all()
47
48     def test_max_dead(self):
49         self.tdb.max_dead = 20
50
51     def test_unlockall(self):
52         self.tdb.lock_all()
53         self.tdb.unlock_all()
54
55     def test_lockall_read(self):
56         self.tdb.read_lock_all()
57         self.tdb.read_unlock_all()
58
59     def test_reopen(self):
60         self.tdb.reopen()
61
62     def test_store(self):
63         self.tdb.store("bar", "bla")
64         self.assertEquals("bla", self.tdb.get("bar"))
65
66     def test_getitem(self):
67         self.tdb["bar"] = "foo"
68         self.tdb.reopen()
69         self.assertEquals("foo", self.tdb["bar"])
70
71     def test_delete(self):
72         self.tdb["bar"] = "foo"
73         del self.tdb["bar"]
74         self.assertRaises(KeyError, lambda: self.tdb["bar"])
75     
76     def test_contains(self):
77         self.tdb["bla"] = "bloe"
78         self.assertTrue("bla" in self.tdb)
79
80     def test_keyerror(self):
81         self.assertRaises(KeyError, lambda: self.tdb["bla"])
82
83     def test_hash_size(self):
84         self.tdb.hash_size
85
86     def test_map_size(self):
87         self.tdb.map_size
88
89     def test_name(self):
90         self.tdb.filename
91
92     def test_iterator(self):
93         self.tdb["bla"] = "1"
94         self.tdb["brainslug"] = "2"
95         self.assertEquals(["bla", "brainslug"], list(self.tdb))
96
97     def test_transaction_cancel(self):
98         self.tdb["bloe"] = "2"
99         self.tdb.transaction_start()
100         self.tdb["bloe"] = "1"
101         self.tdb.transaction_cancel()
102         self.assertEquals("2", self.tdb["bloe"])
103
104     def test_transaction_commit(self):
105         self.tdb["bloe"] = "2"
106         self.tdb.transaction_start()
107         self.tdb["bloe"] = "1"
108         self.tdb.transaction_commit()
109         self.assertEquals("1", self.tdb["bloe"])
110
111     def test_iterator(self):
112         self.tdb["bloe"] = "2"
113         self.tdb["bla"] = "hoi"
114         i = iter(self.tdb)
115         self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
116
117     def test_iterkeys(self):
118         self.tdb["bloe"] = "2"
119         self.tdb["bla"] = "25"
120         i = self.tdb.iterkeys()
121         self.assertEquals(set(["bloe", "bla"]), set([i.next(), i.next()]))
122
123     def test_clear(self):
124         self.tdb["bloe"] = "2"
125         self.tdb["bla"] = "25"
126         self.assertEquals(2, len(list(self.tdb)))
127         self.tdb.clear()
128         self.assertEquals(0, len(list(self.tdb)))
129
130     def test_len(self):
131         self.assertEquals(0, len(list(self.tdb)))
132         self.tdb["entry"] = "value"
133         self.assertEquals(1, len(list(self.tdb)))
134
135     def test_add_flags(self):
136         self.tdb.add_flags(tdb.NOMMAP)
137         self.tdb.remove_flags(tdb.NOMMAP)
138
139
140 if __name__ == '__main__':
141     import unittest
142     unittest.TestProgram()