2003-02-13 07:02:21 +08:00
|
|
|
import imp
|
2004-12-19 05:06:55 +08:00
|
|
|
from test.test_support import TestFailed, TestSkipped
|
|
|
|
try:
|
|
|
|
import thread
|
|
|
|
except ImportError:
|
|
|
|
raise TestSkipped("test only valid when thread support is available")
|
2003-02-13 07:02:21 +08:00
|
|
|
|
2003-04-26 22:31:24 +08:00
|
|
|
def verify_lock_state(expected):
|
|
|
|
if imp.lock_held() != expected:
|
|
|
|
raise TestFailed("expected imp.lock_held() to be %r" % expected)
|
2003-02-13 07:02:21 +08:00
|
|
|
|
2003-04-26 22:31:24 +08:00
|
|
|
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)
|
2003-02-13 07:02:21 +08:00
|
|
|
|
2003-04-26 22:31:24 +08:00
|
|
|
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")
|
2003-02-13 07:02:21 +08:00
|
|
|
|
2003-02-17 22:51:41 +08:00
|
|
|
def test_main():
|
2003-04-26 22:31:24 +08:00
|
|
|
testLock()
|
2003-02-17 22:51:41 +08:00
|
|
|
|
2003-02-13 07:02:21 +08:00
|
|
|
if __name__ == "__main__":
|
2003-02-17 22:51:41 +08:00
|
|
|
test_main()
|