ยปCore Development>Code coverage>Lib/bsddb/test/test_misc.py

Python code coverage for Lib/bsddb/test/test_misc.py

#countcontent
1n/a"""Miscellaneous bsddb module test cases
2n/a"""
3n/a
4n/aimport os, sys
5n/aimport unittest
6n/a
7n/afrom test_all import db, dbshelve, hashopen, test_support, get_new_environment_path, get_new_database_path
8n/a
9n/a#----------------------------------------------------------------------
10n/a
11n/aclass MiscTestCase(unittest.TestCase):
12n/a if sys.version_info < (2, 4) :
13n/a def assertTrue(self, expr, msg=None):
14n/a self.failUnless(expr, msg=msg)
15n/a
16n/a def assertFalse(self, expr, msg=None):
17n/a self.failIf(expr, msg=msg)
18n/a
19n/a def setUp(self):
20n/a self.filename = get_new_database_path()
21n/a self.homeDir = get_new_environment_path()
22n/a
23n/a def tearDown(self):
24n/a test_support.unlink(self.filename)
25n/a test_support.rmtree(self.homeDir)
26n/a
27n/a def test01_badpointer(self):
28n/a dbs = dbshelve.open(self.filename)
29n/a dbs.close()
30n/a self.assertRaises(db.DBError, dbs.get, "foo")
31n/a
32n/a def test02_db_home(self):
33n/a env = db.DBEnv()
34n/a # check for crash fixed when db_home is used before open()
35n/a self.assert_(env.db_home is None)
36n/a env.open(self.homeDir, db.DB_CREATE)
37n/a if sys.version_info[0] < 3 :
38n/a self.assertEqual(self.homeDir, env.db_home)
39n/a else :
40n/a self.assertEqual(bytes(self.homeDir, "ascii"), env.db_home)
41n/a
42n/a def test03_repr_closed_db(self):
43n/a db = hashopen(self.filename)
44n/a db.close()
45n/a rp = repr(db)
46n/a self.assertEquals(rp, "{}")
47n/a
48n/a def test04_repr_db(self) :
49n/a db = hashopen(self.filename)
50n/a d = {}
51n/a for i in xrange(100) :
52n/a db[repr(i)] = repr(100*i)
53n/a d[repr(i)] = repr(100*i)
54n/a db.close()
55n/a db = hashopen(self.filename)
56n/a rp = repr(db)
57n/a self.assertEquals(rp, repr(d))
58n/a db.close()
59n/a
60n/a # http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900
61n/a #
62n/a # See the bug report for details.
63n/a #
64n/a # The problem was that make_key_dbt() was not allocating a copy of
65n/a # string keys but FREE_DBT() was always being told to free it when the
66n/a # database was opened with DB_THREAD.
67n/a def test05_double_free_make_key_dbt(self):
68n/a try:
69n/a db1 = db.DB()
70n/a db1.open(self.filename, None, db.DB_BTREE,
71n/a db.DB_CREATE | db.DB_THREAD)
72n/a
73n/a curs = db1.cursor()
74n/a t = curs.get("/foo", db.DB_SET)
75n/a # double free happened during exit from DBC_get
76n/a finally:
77n/a db1.close()
78n/a test_support.unlink(self.filename)
79n/a
80n/a def test06_key_with_null_bytes(self):
81n/a try:
82n/a db1 = db.DB()
83n/a db1.open(self.filename, None, db.DB_HASH, db.DB_CREATE)
84n/a db1['a'] = 'eh?'
85n/a db1['a\x00'] = 'eh zed.'
86n/a db1['a\x00a'] = 'eh zed eh?'
87n/a db1['aaa'] = 'eh eh eh!'
88n/a keys = db1.keys()
89n/a keys.sort()
90n/a self.assertEqual(['a', 'a\x00', 'a\x00a', 'aaa'], keys)
91n/a self.assertEqual(db1['a'], 'eh?')
92n/a self.assertEqual(db1['a\x00'], 'eh zed.')
93n/a self.assertEqual(db1['a\x00a'], 'eh zed eh?')
94n/a self.assertEqual(db1['aaa'], 'eh eh eh!')
95n/a finally:
96n/a db1.close()
97n/a test_support.unlink(self.filename)
98n/a
99n/a def test07_DB_set_flags_persists(self):
100n/a if db.version() < (4,2):
101n/a # The get_flags API required for this to work is only available
102n/a # in Berkeley DB >= 4.2
103n/a return
104n/a try:
105n/a db1 = db.DB()
106n/a db1.set_flags(db.DB_DUPSORT)
107n/a db1.open(self.filename, db.DB_HASH, db.DB_CREATE)
108n/a db1['a'] = 'eh'
109n/a db1['a'] = 'A'
110n/a self.assertEqual([('a', 'A')], db1.items())
111n/a db1.put('a', 'Aa')
112n/a self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items())
113n/a db1.close()
114n/a db1 = db.DB()
115n/a # no set_flags call, we're testing that it reads and obeys
116n/a # the flags on open.
117n/a db1.open(self.filename, db.DB_HASH)
118n/a self.assertEqual([('a', 'A'), ('a', 'Aa')], db1.items())
119n/a # if it read the flags right this will replace all values
120n/a # for key 'a' instead of adding a new one. (as a dict should)
121n/a db1['a'] = 'new A'
122n/a self.assertEqual([('a', 'new A')], db1.items())
123n/a finally:
124n/a db1.close()
125n/a test_support.unlink(self.filename)
126n/a
127n/a
128n/a def test08_ExceptionTypes(self) :
129n/a self.assertTrue(issubclass(db.DBError, Exception))
130n/a for i, j in db.__dict__.items() :
131n/a if i.startswith("DB") and i.endswith("Error") :
132n/a self.assertTrue(issubclass(j, db.DBError), msg=i)
133n/a if i not in ("DBKeyEmptyError", "DBNotFoundError") :
134n/a self.assertFalse(issubclass(j, KeyError), msg=i)
135n/a
136n/a # This two exceptions have two bases
137n/a self.assertTrue(issubclass(db.DBKeyEmptyError, KeyError))
138n/a self.assertTrue(issubclass(db.DBNotFoundError, KeyError))
139n/a
140n/a
141n/a#----------------------------------------------------------------------
142n/a
143n/a
144n/adef test_suite():
145n/a return unittest.makeSuite(MiscTestCase)
146n/a
147n/a
148n/aif __name__ == '__main__':
149n/a unittest.main(defaultTest='test_suite')