summaryrefslogtreecommitdiffstats
path: root/Lib/bsddb/test/test_basics.py
diff options
context:
space:
mode:
authorJesus Cea <jcea@jcea.es>2010-03-22 14:22:26 (GMT)
committerJesus Cea <jcea@jcea.es>2010-03-22 14:22:26 (GMT)
commit6557aac599f1c22051ee61ba61c8c43add406e94 (patch)
treea06e09b51b3aaf03143cfcea217f14e11db8d7c5 /Lib/bsddb/test/test_basics.py
parent31e928eb3c44d90ec951db118de4736e90532f84 (diff)
downloadcpython-6557aac599f1c22051ee61ba61c8c43add406e94.zip
cpython-6557aac599f1c22051ee61ba61c8c43add406e94.tar.gz
cpython-6557aac599f1c22051ee61ba61c8c43add406e94.tar.bz2
pybsddb 4.8.4 integration. Please, comment in issue #8156
Diffstat (limited to 'Lib/bsddb/test/test_basics.py')
-rw-r--r--Lib/bsddb/test/test_basics.py216
1 files changed, 183 insertions, 33 deletions
diff --git a/Lib/bsddb/test/test_basics.py b/Lib/bsddb/test/test_basics.py
index b713496..8b05c61 100644
--- a/Lib/bsddb/test/test_basics.py
+++ b/Lib/bsddb/test/test_basics.py
@@ -33,6 +33,7 @@ class VersionTestCase(unittest.TestCase):
class BasicTestCase(unittest.TestCase):
dbtype = db.DB_UNKNOWN # must be set in derived class
+ cachesize = (0, 1024*1024, 1)
dbopenflags = 0
dbsetflags = 0
dbmode = 0660
@@ -43,6 +44,13 @@ class BasicTestCase(unittest.TestCase):
_numKeys = 1002 # PRIVATE. NOTE: must be an even value
+ import sys
+ if sys.version_info < (2, 4):
+ def assertTrue(self, expr, msg=None):
+ self.failUnless(expr,msg=msg)
+ def assertFalse(self, expr, msg=None):
+ self.failIf(expr,msg=msg)
+
def setUp(self):
if self.useEnv:
self.homeDir=get_new_environment_path()
@@ -50,7 +58,8 @@ class BasicTestCase(unittest.TestCase):
self.env = db.DBEnv()
self.env.set_lg_max(1024*1024)
self.env.set_tx_max(30)
- self.env.set_tx_timestamp(int(time.time()))
+ self._t = int(time.time())
+ self.env.set_tx_timestamp(self._t)
self.env.set_flags(self.envsetflags, 1)
self.env.open(self.homeDir, self.envflags | db.DB_CREATE)
self.filename = "test"
@@ -64,6 +73,15 @@ class BasicTestCase(unittest.TestCase):
# create and open the DB
self.d = db.DB(self.env)
+ if not self.useEnv :
+ if db.version() >= (4, 2) :
+ self.d.set_cachesize(*self.cachesize)
+ cachesize = self.d.get_cachesize()
+ self.assertEqual(cachesize[0], self.cachesize[0])
+ self.assertEqual(cachesize[2], self.cachesize[2])
+ # Berkeley DB expands the cache 25% accounting overhead,
+ # if the cache is small.
+ self.assertEqual(125, int(100.0*cachesize[1]/self.cachesize[1]))
self.d.set_flags(self.dbsetflags)
if self.dbname:
self.d.open(self.filename, self.dbname, self.dbtype,
@@ -74,6 +92,10 @@ class BasicTestCase(unittest.TestCase):
dbtype = self.dbtype,
flags = self.dbopenflags|db.DB_CREATE)
+ if not self.useEnv:
+ self.assertRaises(db.DBInvalidArgError,
+ self.d.set_cachesize, *self.cachesize)
+
self.populateDB()
@@ -139,7 +161,11 @@ class BasicTestCase(unittest.TestCase):
try:
d.delete('abcd')
except db.DBNotFoundError, val:
- self.assertEqual(val.args[0], db.DB_NOTFOUND)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_NOTFOUND)
+ else :
+ self.assertEqual(val.args[0], db.DB_NOTFOUND)
if verbose: print val
else:
self.fail("expected exception")
@@ -158,7 +184,11 @@ class BasicTestCase(unittest.TestCase):
try:
d.put('abcd', 'this should fail', flags=db.DB_NOOVERWRITE)
except db.DBKeyExistError, val:
- self.assertEqual(val.args[0], db.DB_KEYEXIST)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_KEYEXIST)
+ else :
+ self.assertEqual(val.args[0], db.DB_KEYEXIST)
if verbose: print val
else:
self.fail("expected exception")
@@ -268,6 +298,21 @@ class BasicTestCase(unittest.TestCase):
pprint(values[:10])
+ #----------------------------------------
+
+ def test02b_SequenceMethods(self):
+ d = self.d
+
+ for key in ['0002', '0101', '0401', '0701', '0998']:
+ data = d[key]
+ self.assertEqual(data, self.makeData(key))
+ if verbose:
+ print data
+
+ self.assertTrue(hasattr(d, "__contains__"))
+ self.assertTrue("0401" in d)
+ self.assertFalse("1234" in d)
+
#----------------------------------------
@@ -293,7 +338,11 @@ class BasicTestCase(unittest.TestCase):
rec = c.next()
except db.DBNotFoundError, val:
if get_raises_error:
- self.assertEqual(val.args[0], db.DB_NOTFOUND)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_NOTFOUND)
+ else :
+ self.assertEqual(val.args[0], db.DB_NOTFOUND)
if verbose: print val
rec = None
else:
@@ -314,7 +363,11 @@ class BasicTestCase(unittest.TestCase):
rec = c.prev()
except db.DBNotFoundError, val:
if get_raises_error:
- self.assertEqual(val.args[0], db.DB_NOTFOUND)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_NOTFOUND)
+ else :
+ self.assertEqual(val.args[0], db.DB_NOTFOUND)
if verbose: print val
rec = None
else:
@@ -337,7 +390,11 @@ class BasicTestCase(unittest.TestCase):
try:
n = c.set('bad key')
except db.DBNotFoundError, val:
- self.assertEqual(val.args[0], db.DB_NOTFOUND)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_NOTFOUND)
+ else :
+ self.assertEqual(val.args[0], db.DB_NOTFOUND)
if verbose: print val
else:
if set_raises_error:
@@ -351,7 +408,11 @@ class BasicTestCase(unittest.TestCase):
try:
n = c.get_both('0404', 'bad data')
except db.DBNotFoundError, val:
- self.assertEqual(val.args[0], db.DB_NOTFOUND)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_NOTFOUND)
+ else :
+ self.assertEqual(val.args[0], db.DB_NOTFOUND)
if verbose: print val
else:
if get_raises_error:
@@ -380,7 +441,11 @@ class BasicTestCase(unittest.TestCase):
rec = c.current()
except db.DBKeyEmptyError, val:
if get_raises_error:
- self.assertEqual(val.args[0], db.DB_KEYEMPTY)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], db.DB_KEYEMPTY)
+ else :
+ self.assertEqual(val.args[0], db.DB_KEYEMPTY)
if verbose: print val
else:
self.fail("unexpected DBKeyEmptyError")
@@ -425,7 +490,11 @@ class BasicTestCase(unittest.TestCase):
# a bug may cause a NULL pointer dereference...
getattr(c, method)(*args)
except db.DBError, val:
- self.assertEqual(val.args[0], 0)
+ import sys
+ if sys.version_info < (2, 6) :
+ self.assertEqual(val[0], 0)
+ else :
+ self.assertEqual(val.args[0], 0)
if verbose: print val
else:
self.fail("no exception raised when using a buggy cursor's"
@@ -477,6 +546,15 @@ class BasicTestCase(unittest.TestCase):
self.assertEqual(old, 1)
self.test03_SimpleCursorStuff(get_raises_error=0, set_raises_error=0)
+ if db.version() >= (4, 6):
+ def test03d_SimpleCursorPriority(self) :
+ c = self.d.cursor()
+ c.set_priority(db.DB_PRIORITY_VERY_LOW) # Positional
+ self.assertEqual(db.DB_PRIORITY_VERY_LOW, c.get_priority())
+ c.set_priority(priority=db.DB_PRIORITY_HIGH) # Keyword
+ self.assertEqual(db.DB_PRIORITY_HIGH, c.get_priority())
+ c.close()
+
#----------------------------------------
def test04_PartialGetAndPut(self):
@@ -530,7 +608,7 @@ class BasicTestCase(unittest.TestCase):
d = self.d
if verbose:
print '\n', '-=' * 30
- print "Running %s.test99_Truncate..." % self.__class__.__name__
+ print "Running %s.test06_Truncate..." % self.__class__.__name__
d.put("abcde", "ABCDE");
num = d.truncate()
@@ -550,6 +628,33 @@ class BasicTestCase(unittest.TestCase):
#----------------------------------------
+ if db.version() >= (4, 6):
+ def test08_exists(self) :
+ self.d.put("abcde", "ABCDE")
+ self.assert_(self.d.exists("abcde") == True,
+ "DB->exists() returns wrong value")
+ self.assert_(self.d.exists("x") == False,
+ "DB->exists() returns wrong value")
+
+ #----------------------------------------
+
+ if db.version() >= (4, 7):
+ def test_compact(self) :
+ d = self.d
+ self.assertEqual(0, d.compact(flags=db.DB_FREELIST_ONLY))
+ self.assertEqual(0, d.compact(flags=db.DB_FREELIST_ONLY))
+ d.put("abcde", "ABCDE");
+ d.put("bcde", "BCDE");
+ d.put("abc", "ABC");
+ d.put("monty", "python");
+ d.delete("abc")
+ d.delete("bcde")
+ d.compact(start='abcde', stop='monty', txn=None,
+ compact_fillpercent=42, compact_pages=1,
+ compact_timeout=50000000,
+ flags=db.DB_FREELIST_ONLY|db.DB_FREE_SPACE)
+
+ #----------------------------------------
#----------------------------------------------------------------------
@@ -579,13 +684,13 @@ class BasicWithEnvTestCase(BasicTestCase):
#----------------------------------------
- def test08_EnvRemoveAndRename(self):
+ def test09_EnvRemoveAndRename(self):
if not self.env:
return
if verbose:
print '\n', '-=' * 30
- print "Running %s.test08_EnvRemoveAndRename..." % self.__class__.__name__
+ print "Running %s.test09_EnvRemoveAndRename..." % self.__class__.__name__
# can't rename or remove an open DB
self.d.close()
@@ -594,10 +699,6 @@ class BasicWithEnvTestCase(BasicTestCase):
self.env.dbrename(self.filename, None, newname)
self.env.dbremove(newname)
- # dbremove and dbrename are in 4.1 and later
- if db.version() < (4,1):
- del test08_EnvRemoveAndRename
-
#----------------------------------------
class BasicBTreeWithEnvTestCase(BasicWithEnvTestCase):
@@ -612,9 +713,14 @@ class BasicHashWithEnvTestCase(BasicWithEnvTestCase):
class BasicTransactionTestCase(BasicTestCase):
import sys
- if sys.version_info[:3] < (2, 4, 0):
+ if sys.version_info < (2, 4):
def assertTrue(self, expr, msg=None):
- self.failUnless(expr,msg=msg)
+ return self.failUnless(expr,msg=msg)
+
+ if (sys.version_info < (2, 7)) or ((sys.version_info >= (3, 0)) and
+ (sys.version_info < (3, 2))) :
+ def assertIn(self, a, b, msg=None) :
+ return self.assertTrue(a in b, msg=msg)
dbopenflags = db.DB_THREAD | db.DB_AUTO_COMMIT
useEnv = 1
@@ -672,10 +778,7 @@ class BasicTransactionTestCase(BasicTestCase):
self.txn.commit()
# flush pending updates
- try:
- self.env.txn_checkpoint (0, 0, 0)
- except db.DBIncompleteError:
- pass
+ self.env.txn_checkpoint (0, 0, 0)
statDict = self.env.log_stat(0);
self.assertIn('magic', statDict)
@@ -697,11 +800,25 @@ class BasicTransactionTestCase(BasicTestCase):
#----------------------------------------
- def test08_TxnTruncate(self):
+ if db.version() >= (4, 6):
+ def test08_exists(self) :
+ txn = self.env.txn_begin()
+ self.d.put("abcde", "ABCDE", txn=txn)
+ txn.commit()
+ txn = self.env.txn_begin()
+ self.assert_(self.d.exists("abcde", txn=txn) == True,
+ "DB->exists() returns wrong value")
+ self.assert_(self.d.exists("x", txn=txn) == False,
+ "DB->exists() returns wrong value")
+ txn.abort()
+
+ #----------------------------------------
+
+ def test09_TxnTruncate(self):
d = self.d
if verbose:
print '\n', '-=' * 30
- print "Running %s.test08_TxnTruncate..." % self.__class__.__name__
+ print "Running %s.test09_TxnTruncate..." % self.__class__.__name__
d.put("abcde", "ABCDE");
txn = self.env.txn_begin()
@@ -714,7 +831,7 @@ class BasicTransactionTestCase(BasicTestCase):
#----------------------------------------
- def test09_TxnLateUse(self):
+ def test10_TxnLateUse(self):
txn = self.env.txn_begin()
txn.abort()
try:
@@ -734,6 +851,39 @@ class BasicTransactionTestCase(BasicTestCase):
raise RuntimeError, "DBTxn.commit() called after DB_TXN no longer valid w/o an exception"
+ #----------------------------------------
+
+
+ if db.version() >= (4, 4):
+ def test_txn_name(self) :
+ txn=self.env.txn_begin()
+ self.assertEqual(txn.get_name(), "")
+ txn.set_name("XXYY")
+ self.assertEqual(txn.get_name(), "XXYY")
+ txn.set_name("")
+ self.assertEqual(txn.get_name(), "")
+ txn.abort()
+
+ #----------------------------------------
+
+
+ def test_txn_set_timeout(self) :
+ txn=self.env.txn_begin()
+ txn.set_timeout(1234567, db.DB_SET_LOCK_TIMEOUT)
+ txn.set_timeout(2345678, flags=db.DB_SET_TXN_TIMEOUT)
+ txn.abort()
+
+ #----------------------------------------
+
+ if db.version() >= (4, 2) :
+ def test_get_tx_max(self) :
+ self.assertEqual(self.env.get_tx_max(), 30)
+
+ def test_get_tx_timestamp(self) :
+ self.assertEqual(self.env.get_tx_timestamp(), self._t)
+
+
+
class BTreeTransactionTestCase(BasicTransactionTestCase):
dbtype = db.DB_BTREE
@@ -748,11 +898,11 @@ class BTreeRecnoTestCase(BasicTestCase):
dbtype = db.DB_BTREE
dbsetflags = db.DB_RECNUM
- def test08_RecnoInBTree(self):
+ def test09_RecnoInBTree(self):
d = self.d
if verbose:
print '\n', '-=' * 30
- print "Running %s.test08_RecnoInBTree..." % self.__class__.__name__
+ print "Running %s.test09_RecnoInBTree..." % self.__class__.__name__
rec = d.get(200)
self.assertEqual(type(rec), type(()))
@@ -782,11 +932,11 @@ class BTreeRecnoWithThreadFlagTestCase(BTreeRecnoTestCase):
class BasicDUPTestCase(BasicTestCase):
dbsetflags = db.DB_DUP
- def test09_DuplicateKeys(self):
+ def test10_DuplicateKeys(self):
d = self.d
if verbose:
print '\n', '-=' * 30
- print "Running %s.test09_DuplicateKeys..." % \
+ print "Running %s.test10_DuplicateKeys..." % \
self.__class__.__name__
d.put("dup0", "before")
@@ -855,11 +1005,11 @@ class BasicMultiDBTestCase(BasicTestCase):
else:
return db.DB_BTREE
- def test10_MultiDB(self):
+ def test11_MultiDB(self):
d1 = self.d
if verbose:
print '\n', '-=' * 30
- print "Running %s.test10_MultiDB..." % self.__class__.__name__
+ print "Running %s.test11_MultiDB..." % self.__class__.__name__
d2 = db.DB(self.env)
d2.open(self.filename, "second", self.dbtype,
@@ -949,7 +1099,7 @@ class HashMultiDBTestCase(BasicMultiDBTestCase):
class PrivateObject(unittest.TestCase) :
import sys
- if sys.version_info[:3] < (2, 4, 0):
+ if sys.version_info < (2, 4):
def assertTrue(self, expr, msg=None):
self.failUnless(expr,msg=msg)
@@ -992,7 +1142,7 @@ class DBPrivateObject(PrivateObject) :
class CrashAndBurn(unittest.TestCase) :
import sys
- if sys.version_info[:3] < (2, 4, 0):
+ if sys.version_info < (2, 4):
def assertTrue(self, expr, msg=None):
self.failUnless(expr,msg=msg)