mirror of
https://github.com/python/cpython.git
synced 2026-06-25 12:27:09 -04:00
7767711f54
svn+ssh://pythondev@svn.python.org/python/trunk ........ r58822 | brett.cannon | 2007-11-02 23:47:02 -0700 (Fri, 02 Nov 2007) | 2 lines Add a missing quotation mark. ........ r58840 | skip.montanaro | 2007-11-04 07:56:52 -0800 (Sun, 04 Nov 2007) | 2 lines Note change to get_dialect semantics in 2.5. Will backport to 2.5. ........ r58844 | georg.brandl | 2007-11-04 09:43:49 -0800 (Sun, 04 Nov 2007) | 2 lines Fix syntax for versionchanged markup. ........ r58850 | gregory.p.smith | 2007-11-04 18:32:26 -0800 (Sun, 04 Nov 2007) | 9 lines Fixes bug 477182 on pybsddb.sf.net. DB objects now load the flags and pay attention to them when opening an existing database. This means that d[] behaves properly even on databases previously created with DB_DUP or DB_DUPSORT flags to allow duplicate keys. http://sourceforge.net/tracker/index.php?func=detail&aid=477182&group_id=13900&atid=113900 Do not backport, this bugfix could be considered an API change. ........ r58851 | gregory.p.smith | 2007-11-04 18:56:31 -0800 (Sun, 04 Nov 2007) | 3 lines Add the bsddb.db.DBEnv.lock_id_free method. Improve test_lock's tempdir creation and cleanup. ........ r58852 | gregory.p.smith | 2007-11-05 01:06:28 -0800 (Mon, 05 Nov 2007) | 3 lines * db->get_types is only available in BerkeleyDB >= 4.2 * get compiling with older versions of python again for a stand alone release. ........ r58853 | gregory.p.smith | 2007-11-05 01:07:40 -0800 (Mon, 05 Nov 2007) | 2 lines * db->get_flags is only available in BerkeleyDB >= 4.2 ........ r58854 | mark.summerfield | 2007-11-05 01:22:48 -0800 (Mon, 05 Nov 2007) | 3 lines Added cross-references between the various archive file formats. ........ r58857 | mark.summerfield | 2007-11-05 06:38:50 -0800 (Mon, 05 Nov 2007) | 5 lines Clarified the fact that you can have comments for individual archive members even though comments to the archive itself aren't currently supported. ........
126 lines
4.0 KiB
Python
126 lines
4.0 KiB
Python
"""Miscellaneous bsddb module test cases
|
|
"""
|
|
|
|
import os
|
|
import shutil
|
|
import sys
|
|
import unittest
|
|
import tempfile
|
|
|
|
try:
|
|
# For Pythons w/distutils pybsddb
|
|
from bsddb3 import db, dbshelve, hashopen
|
|
except ImportError:
|
|
# For the bundled bsddb
|
|
from bsddb import db, dbshelve, hashopen
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
class MiscTestCase(unittest.TestCase):
|
|
def setUp(self):
|
|
self.filename = self.__class__.__name__ + '.db'
|
|
self.homeDir = tempfile.mkdtemp()
|
|
|
|
def tearDown(self):
|
|
try:
|
|
os.remove(self.filename)
|
|
except OSError:
|
|
pass
|
|
shutil.rmtree(self.homeDir)
|
|
|
|
def test01_badpointer(self):
|
|
dbs = dbshelve.open(self.filename)
|
|
dbs.close()
|
|
self.assertRaises(db.DBError, dbs.get, b"foo")
|
|
|
|
def test02_db_home(self):
|
|
env = db.DBEnv()
|
|
# check for crash fixed when db_home is used before open()
|
|
assert env.db_home is None
|
|
env.open(self.homeDir, db.DB_CREATE)
|
|
assert self.homeDir == env.db_home
|
|
|
|
def test03_repr_closed_db(self):
|
|
db = hashopen(self.filename)
|
|
db.close()
|
|
rp = repr(db)
|
|
self.assertEquals(rp, "{}")
|
|
|
|
# http://sourceforge.net/tracker/index.php?func=detail&aid=1708868&group_id=13900&atid=313900
|
|
#
|
|
# See the bug report for details.
|
|
#
|
|
# The problem was that make_key_dbt() was not allocating a copy of
|
|
# string keys but FREE_DBT() was always being told to free it when the
|
|
# database was opened with DB_THREAD.
|
|
def test04_double_free_make_key_dbt(self):
|
|
try:
|
|
db1 = db.DB()
|
|
db1.open(self.filename, None, db.DB_BTREE,
|
|
db.DB_CREATE | db.DB_THREAD)
|
|
|
|
curs = db1.cursor()
|
|
t = curs.get(b"/foo", db.DB_SET)
|
|
# double free happened during exit from DBC_get
|
|
finally:
|
|
db1.close()
|
|
os.unlink(self.filename)
|
|
|
|
def test05_key_with_null_bytes(self):
|
|
try:
|
|
db1 = db.DB()
|
|
db1.open(self.filename, None, db.DB_HASH, db.DB_CREATE)
|
|
db1[b'a'] = b'eh?'
|
|
db1[b'a\x00'] = b'eh zed.'
|
|
db1[b'a\x00a'] = b'eh zed eh?'
|
|
db1[b'aaa'] = b'eh eh eh!'
|
|
keys = db1.keys()
|
|
keys.sort()
|
|
self.assertEqual([b'a', b'a\x00', b'a\x00a', b'aaa'], keys)
|
|
self.assertEqual(db1[b'a'], b'eh?')
|
|
self.assertEqual(db1[b'a\x00'], b'eh zed.')
|
|
self.assertEqual(db1[b'a\x00a'], b'eh zed eh?')
|
|
self.assertEqual(db1[b'aaa'], b'eh eh eh!')
|
|
finally:
|
|
db1.close()
|
|
os.unlink(self.filename)
|
|
|
|
def test_DB_set_flags_persists(self):
|
|
if db.version() < (4,2):
|
|
# The get_flags API required for this to work is only available
|
|
# in BerkeleyDB >= 4.2
|
|
return
|
|
try:
|
|
db1 = db.DB()
|
|
db1.set_flags(db.DB_DUPSORT)
|
|
db1.open(self.filename, db.DB_HASH, db.DB_CREATE)
|
|
db1[b'a'] = b'eh'
|
|
db1[b'a'] = b'A'
|
|
self.assertEqual([(b'a', b'A')], db1.items())
|
|
db1.put(b'a', b'Aa')
|
|
self.assertEqual([(b'a', b'A'), (b'a', b'Aa')], db1.items())
|
|
db1.close()
|
|
db1 = db.DB()
|
|
# no set_flags call, we're testing that it reads and obeys
|
|
# the flags on open.
|
|
db1.open(self.filename, db.DB_HASH)
|
|
self.assertEqual([(b'a', b'A'), (b'a', b'Aa')], db1.items())
|
|
# if it read the flags right this will replace all values
|
|
# for key b'a' instead of adding a new one. (as a dict should)
|
|
db1[b'a'] = b'new A'
|
|
self.assertEqual([(b'a', b'new A')], db1.items())
|
|
finally:
|
|
db1.close()
|
|
os.unlink(self.filename)
|
|
|
|
|
|
#----------------------------------------------------------------------
|
|
|
|
|
|
def test_suite():
|
|
return unittest.makeSuite(MiscTestCase)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main(defaultTest='test_suite')
|