Add unit test for tree cursors

This commit is contained in:
Marc Hulsman 2014-06-12 22:49:30 +01:00 committed by Nick Hall
parent 52928e3a7c
commit f3566ebc34

View File

@ -31,6 +31,8 @@ if config.get('preferences.use-bsddb3') or sys.version_info[0] >= 3:
else:
from bsddb import dbshelve, db
from ..read import DbBsddbTreeCursor
class Data(object):
def __init__(self, handle,surname, name):
@ -76,6 +78,7 @@ class CursorTest(unittest.TestCase):
os.mkdir(env_name)
self.env.open(env_name,env_flags)
(self.person_map,self.surnames) = self._open_tables()
(self.place_map, self.placerefs) = self._open_treetables()
def _open_tables(self):
dbmap = dbshelve.DBShelf(self.env)
@ -100,10 +103,36 @@ class CursorTest(unittest.TestCase):
person_map.associate(surnames, find_surname, table_flags)
return (person_map,surnames)
def _open_treetables(self):
dbmap = dbshelve.DBShelf(self.env)
dbmap.db.set_pagesize(16384)
dbmap.open(self.full_name, 'places', db.DB_HASH,
db.DB_CREATE|db.DB_AUTO_COMMIT, 0o666)
place_map = dbmap
table_flags = db.DB_CREATE|db.DB_AUTO_COMMIT
placerefs = db.DB(self.env)
placerefs.set_flags(db.DB_DUP|db.DB_DUPSORT)
placerefs.open(self.full_name, "placerefs", db.DB_BTREE,
flags=table_flags)
def find_placeref(key,data):
val = data[2]
if isinstance(val, UNITYPE):
val = val.encode('utf-8')
return val
place_map.associate(placerefs, find_placeref, table_flags)
return (place_map, placerefs)
def tearDown(self):
self.person_map.close()
self.surnames.close()
self.place_map.close()
self.placerefs.close()
self.env.close()
shutil.rmtree(self._tmpdir)
@ -183,7 +212,29 @@ class CursorTest(unittest.TestCase):
self.assertEqual(v.handle, data.handle)
def test_treecursor(self):
#fill with data
the_txn = self.env.txn_begin()
data = [(b'1', 'countryA', '' ),
(b'2', 'localityA', '1' ),
(b'3', 'localityB', '1' ),
(b'4', 'countryB', '' ),
(b'5', 'streetA', '2' ),
(b'6', 'countryB', '' )]
for d in data:
self.place_map.put(d[0], d, txn=the_txn)
the_txn.commit()
cursor_txn = self.env.txn_begin()
cursor = DbBsddbTreeCursor(self.placerefs, self.place_map, False,
cursor_txn)
placenames = set([d[1] for handle, d in cursor])
cursor.close()
cursor_txn.commit()
pldata = set([d[1] for d in data])
self.assertEqual(placenames, pldata)
def testSuite():
suite = unittest.makeSuite(CursorTest, 'test')
return suite