"""TestCases for checking that it does not segfault when a DBEnv object
is closed before its DB objects.
# For Pythons w/distutils pybsddb
from test_all
import verbose
# We're going to get warnings in this module about trying to close the db when
# its env is already closed. Let's just ignore those.
warnings
.filterwarnings('ignore',
message
='DB could not be closed in',
#----------------------------------------------------------------------
class DBEnvClosedEarlyCrash(unittest
.TestCase
):
self
.homeDir
= os
.path
.join(os
.path
.dirname(sys
.argv
[0]), 'db_home')
try: os
.mkdir(self
.homeDir
)
tempfile
.tempdir
= self
.homeDir
self
.filename
= os
.path
.split(tempfile
.mktemp())[1]
files
= glob
.glob(os
.path
.join(self
.homeDir
, '*'))
def test01_close_dbenv_before_db(self
):
db
.DB_INIT_CDB| db
.DB_CREATE |db
.DB_THREAD|db
.DB_INIT_MPOOL
,
d
.open(self
.filename
, db
.DB_BTREE
, db
.DB_CREATE | db
.DB_THREAD
, 0666)
"DB close did not raise an exception about its "\
# XXX This may fail when using older versions of BerkeleyDB.
# E.g. 3.2.9 never raised the exception.
assert 0, "dbenv did not raise an exception about its DB being open"
def test02_close_dbenv_delete_db_success(self
):
db
.DB_INIT_CDB| db
.DB_CREATE |db
.DB_THREAD|db
.DB_INIT_MPOOL
,
d
.open(self
.filename
, db
.DB_BTREE
, db
.DB_CREATE | db
.DB_THREAD
, 0666)
pass # good, it should raise an exception
# force d.__del__ [DB_dealloc] to be called
#----------------------------------------------------------------------
suite
= unittest
.TestSuite()
suite
.addTest(unittest
.makeSuite(DBEnvClosedEarlyCrash
))
if __name__
== '__main__':
unittest
.main(defaultTest
='test_suite')