44 lines
1.1 KiB
Python
44 lines
1.1 KiB
Python
|
import imp
|
||
|
from test.test_support import TestFailed, TestSkipped
|
||
|
try:
|
||
|
import thread
|
||
|
except ImportError:
|
||
|
raise TestSkipped("test only valid when thread support is available")
|
||
|
|
||
|
def verify_lock_state(expected):
|
||
|
if imp.lock_held() != expected:
|
||
|
raise TestFailed("expected imp.lock_held() to be %r" % expected)
|
||
|
|
||
|
def testLock():
|
||
|
LOOPS = 50
|
||
|
|
||
|
# The import lock may already be held, e.g. if the test suite is run
|
||
|
# via "import test.autotest".
|
||
|
lock_held_at_start = imp.lock_held()
|
||
|
verify_lock_state(lock_held_at_start)
|
||
|
|
||
|
for i in range(LOOPS):
|
||
|
imp.acquire_lock()
|
||
|
verify_lock_state(True)
|
||
|
|
||
|
for i in range(LOOPS):
|
||
|
imp.release_lock()
|
||
|
|
||
|
# The original state should be restored now.
|
||
|
verify_lock_state(lock_held_at_start)
|
||
|
|
||
|
if not lock_held_at_start:
|
||
|
try:
|
||
|
imp.release_lock()
|
||
|
except RuntimeError:
|
||
|
pass
|
||
|
else:
|
||
|
raise TestFailed("release_lock() without lock should raise "
|
||
|
"RuntimeError")
|
||
|
|
||
|
def test_main():
|
||
|
testLock()
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
test_main()
|