summaryrefslogtreecommitdiffstats
path: root/Lib/bsddb/test/test_lock.py
diff options
context:
space:
mode:
Diffstat (limited to 'Lib/bsddb/test/test_lock.py')
-rw-r--r--Lib/bsddb/test/test_lock.py112
1 files changed, 54 insertions, 58 deletions
diff --git a/Lib/bsddb/test/test_lock.py b/Lib/bsddb/test/test_lock.py
index 99adb7e..75c1022 100644
--- a/Lib/bsddb/test/test_lock.py
+++ b/Lib/bsddb/test/test_lock.py
@@ -2,39 +2,31 @@
TestCases for testing the locking sub-system.
"""
-import sys
-import tempfile
import time
-try:
- from threading import Thread, current_thread
- have_threads = 1
-except ImportError:
- have_threads = 0
-
-
import unittest
-from bsddb.test.test_all import verbose
-
-try:
- # For Pythons w/distutils pybsddb
- from bsddb3 import db
-except ImportError:
- # For Python 2.3
- from bsddb import db
-
-try:
- from bsddb3 import test_support
-except ImportError:
- from test import support as test_support
+from .test_all import db, test_support, verbose, have_threads, \
+ get_new_environment_path, get_new_database_path
+if have_threads :
+ from threading import Thread
+ import sys
+ if sys.version_info[0] < 3 :
+ from threading import currentThread
+ else :
+ from threading import current_thread as currentThread
#----------------------------------------------------------------------
class LockingTestCase(unittest.TestCase):
+ import sys
+ if sys.version_info[:3] < (2, 4, 0):
+ def assertTrue(self, expr, msg=None):
+ self.failUnless(expr,msg=msg)
+
def setUp(self):
- self.homeDir = tempfile.mkdtemp('.test_lock')
+ self.homeDir = get_new_environment_path()
self.env = db.DBEnv()
self.env.open(self.homeDir, db.DB_THREAD | db.DB_INIT_MPOOL |
db.DB_INIT_LOCK | db.DB_CREATE)
@@ -53,15 +45,13 @@ class LockingTestCase(unittest.TestCase):
anID = self.env.lock_id()
if verbose:
print("locker ID: %s" % anID)
- lock = self.env.lock_get(anID, b"some locked thing", db.DB_LOCK_WRITE)
+ lock = self.env.lock_get(anID, "some locked thing", db.DB_LOCK_WRITE)
if verbose:
print("Aquired lock: %s" % lock)
- time.sleep(1)
self.env.lock_put(lock)
if verbose:
print("Released lock: %s" % lock)
- if db.version() >= (4,0):
- self.env.lock_id_free(anID)
+ self.env.lock_id_free(anID)
def test02_threaded(self):
@@ -71,34 +61,35 @@ class LockingTestCase(unittest.TestCase):
threads = []
threads.append(Thread(target = self.theThread,
- args=(5, db.DB_LOCK_WRITE)))
+ args=(db.DB_LOCK_WRITE,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_READ)))
+ args=(db.DB_LOCK_READ,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_READ)))
+ args=(db.DB_LOCK_READ,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_WRITE)))
+ args=(db.DB_LOCK_WRITE,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_READ)))
+ args=(db.DB_LOCK_READ,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_READ)))
+ args=(db.DB_LOCK_READ,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_WRITE)))
+ args=(db.DB_LOCK_WRITE,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_WRITE)))
+ args=(db.DB_LOCK_WRITE,)))
threads.append(Thread(target = self.theThread,
- args=(1, db.DB_LOCK_WRITE)))
+ args=(db.DB_LOCK_WRITE,)))
for t in threads:
+ import sys
+ if sys.version_info[0] < 3 :
+ t.setDaemon(True)
+ else :
+ t.daemon = True
t.start()
for t in threads:
t.join()
- def _DISABLED_test03_lock_timeout(self):
- # Disabled as this test crashes the python interpreter built in
- # debug mode with:
- # Fatal Python error: UNREF invalid object
- # the error occurs as marked below.
+ def test03_lock_timeout(self):
self.env.set_timeout(0, db.DB_SET_LOCK_TIMEOUT)
self.env.set_timeout(0, db.DB_SET_TXN_TIMEOUT)
self.env.set_timeout(123456, db.DB_SET_LOCK_TIMEOUT)
@@ -117,7 +108,11 @@ class LockingTestCase(unittest.TestCase):
deadlock_detection.end=False
deadlock_detection.count=0
t=Thread(target=deadlock_detection)
- t.daemon = True
+ import sys
+ if sys.version_info[0] < 3 :
+ t.setDaemon(True)
+ else :
+ t.daemon = True
t.start()
self.env.set_timeout(100000, db.DB_SET_LOCK_TIMEOUT)
anID = self.env.lock_id()
@@ -125,8 +120,6 @@ class LockingTestCase(unittest.TestCase):
self.assertNotEqual(anID, anID2)
lock = self.env.lock_get(anID, "shared lock", db.DB_LOCK_WRITE)
start_time=time.time()
- # FIXME: I see the UNREF crash as the interpreter trys to exit
- # from this call to lock_get.
self.assertRaises(db.DBLockNotGrantedError,
self.env.lock_get,anID2, "shared lock", db.DB_LOCK_READ)
end_time=time.time()
@@ -135,15 +128,19 @@ class LockingTestCase(unittest.TestCase):
self.env.lock_put(lock)
t.join()
- if db.version() >= (4,0):
- self.env.lock_id_free(anID)
- self.env.lock_id_free(anID2)
+ self.env.lock_id_free(anID)
+ self.env.lock_id_free(anID2)
if db.version() >= (4,6):
self.assertTrue(deadlock_detection.count>0)
- def theThread(self, sleepTime, lockType):
- name = current_thread().name
+ def theThread(self, lockType):
+ import sys
+ if sys.version_info[0] < 3 :
+ name = currentThread().getName()
+ else :
+ name = currentThread().name
+
if lockType == db.DB_LOCK_WRITE:
lt = "write"
else:
@@ -153,17 +150,16 @@ class LockingTestCase(unittest.TestCase):
if verbose:
print("%s: locker ID: %s" % (name, anID))
- lock = self.env.lock_get(anID, b"some locked thing", lockType)
- if verbose:
- print("%s: Aquired %s lock: %s" % (name, lt, lock))
+ for i in range(1000) :
+ lock = self.env.lock_get(anID, "some locked thing", lockType)
+ if verbose:
+ print("%s: Aquired %s lock: %s" % (name, lt, lock))
- time.sleep(sleepTime)
+ self.env.lock_put(lock)
+ if verbose:
+ print("%s: Released %s lock: %s" % (name, lt, lock))
- self.env.lock_put(lock)
- if verbose:
- print("%s: Released %s lock: %s" % (name, lt, lock))
- if db.version() >= (4,0):
- self.env.lock_id_free(anID)
+ self.env.lock_id_free(anID)
#----------------------------------------------------------------------