TestCases for checking dbShelve objects.
from pprint
import pprint
# For Pythons w/distutils pybsddb
from bsddb3
import db
, dbshelve
from bsddb
import db
, dbshelve
from test_all
import verbose
#----------------------------------------------------------------------
# We want the objects to be comparable so we can test dbshelve.values
self
.value
= random
.random()
def __cmp__(self
, other
):
return cmp(self
.value
, other
)
class DBShelveTestCase(unittest
.TestCase
):
self
.filename
= tempfile
.mktemp()
d
['S' + x
] = 10 * x
# add a string
d
['I' + x
] = ord(x
) # add an integer
d
['L' + x
] = [x
] * 10 # add a list
inst
= DataClass() # add an instance
# overridable in derived classes to affect how the shelf is created/opened
self
.d
= dbshelve
.open(self
.filename
)
print "Running %s.test01_basics..." % self
.__class
__.__name
__
assert 0 == d
.has_key('bad key')
assert 1 == d
.has_key('IA')
assert 1 == d
.has_key('OA')
assert 0 == d
.has_key('IA')
assert 0 == d
.has_key('OA')
print "%s: %s" % (key
, value
)
self
.checkrec(key
, value
)
assert len(dbvalues
) == len(d
.keys())
assert values
== dbvalues
assert len(items
) == len(values
)
self
.checkrec(key
, value
)
assert d
.get('bad key') == None
assert d
.get('bad key', None) == None
assert d
.get('bad key', 'a string') == 'a string'
assert d
.get('bad key', [1, 2, 3]) == [1, 2, 3]
d
.set_get_returns_none(0)
self
.assertRaises(db
.DBNotFoundError
, d
.get
, 'bad key')
d
.set_get_returns_none(1)
d
.put('new key', 'new data')
assert d
.get('new key') == 'new data'
assert d
['new key'] == 'new data'
def test02_cursors(self
):
print "Running %s.test02_cursors..." % self
.__class
__.__name
__
self
.checkrec(key
, value
)
self
.checkrec(key
, value
)
self
.checkrec(key
, value
)
def checkrec(self
, key
, value
):
assert type(value
) == StringType
assert type(value
) == IntType
assert type(value
) == ListType
assert type(value
) == InstanceType
assert value
.L
== [x
] * 10
raise AssertionError, 'Unknown key type, fix the test'
#----------------------------------------------------------------------
class BasicShelveTestCase(DBShelveTestCase
):
self
.d
= dbshelve
.DBShelf()
self
.d
.open(self
.filename
, self
.dbtype
, self
.dbflags
)
class BTreeShelveTestCase(BasicShelveTestCase
):
class HashShelveTestCase(BasicShelveTestCase
):
class ThreadBTreeShelveTestCase(BasicShelveTestCase
):
dbflags
= db
.DB_CREATE | db
.DB_THREAD
class ThreadHashShelveTestCase(BasicShelveTestCase
):
dbflags
= db
.DB_CREATE | db
.DB_THREAD
#----------------------------------------------------------------------
class BasicEnvShelveTestCase(DBShelveTestCase
):
self
.homeDir
= homeDir
= os
.path
.join(
os
.path
.dirname(sys
.argv
[0]), 'db_home')
self
.env
.open(homeDir
, self
.envflags | db
.DB_INIT_MPOOL | db
.DB_CREATE
)
self
.filename
= os
.path
.split(self
.filename
)[1]
self
.d
= dbshelve
.DBShelf(self
.env
)
self
.d
.open(self
.filename
, self
.dbtype
, self
.dbflags
)
files
= glob
.glob(os
.path
.join(self
.homeDir
, '*'))
class EnvBTreeShelveTestCase(BasicEnvShelveTestCase
):
class EnvHashShelveTestCase(BasicEnvShelveTestCase
):
class EnvThreadBTreeShelveTestCase(BasicEnvShelveTestCase
):
dbflags
= db
.DB_CREATE | db
.DB_THREAD
class EnvThreadHashShelveTestCase(BasicEnvShelveTestCase
):
dbflags
= db
.DB_CREATE | db
.DB_THREAD
#----------------------------------------------------------------------
# TODO: Add test cases for a DBShelf in a RECNO DB.
#----------------------------------------------------------------------
suite
= unittest
.TestSuite()
suite
.addTest(unittest
.makeSuite(DBShelveTestCase
))
suite
.addTest(unittest
.makeSuite(BTreeShelveTestCase
))
suite
.addTest(unittest
.makeSuite(HashShelveTestCase
))
suite
.addTest(unittest
.makeSuite(ThreadBTreeShelveTestCase
))
suite
.addTest(unittest
.makeSuite(ThreadHashShelveTestCase
))
suite
.addTest(unittest
.makeSuite(EnvBTreeShelveTestCase
))
suite
.addTest(unittest
.makeSuite(EnvHashShelveTestCase
))
suite
.addTest(unittest
.makeSuite(EnvThreadBTreeShelveTestCase
))
suite
.addTest(unittest
.makeSuite(EnvThreadHashShelveTestCase
))
if __name__
== '__main__':
unittest
.main(defaultTest
='test_suite')