2003-02-12 19:02:21 -04:00
|
|
|
import imp
|
2004-12-18 17:06:55 -04: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-12 19:02:21 -04:00
|
|
|
|
2003-04-26 11:31:24 -03:00
|
|
|
def verify_lock_state(expected):
|
|
|
|
if imp.lock_held() != expected:
|
|
|
|
raise TestFailed("expected imp.lock_held() to be %r" % expected)
|
2003-02-12 19:02:21 -04:00
|
|
|
|
2003-04-26 11:31:24 -03: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-12 19:02:21 -04:00
|
|
|
|
2003-04-26 11:31:24 -03: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-12 19:02:21 -04:00
|
|
|
|
2003-02-17 10:51:41 -04:00
|
|
|
def test_main():
|
2003-04-26 11:31:24 -03:00
|
|
|
testLock()
|
2003-02-17 10:51:41 -04:00
|
|
|
|
2003-02-12 19:02:21 -04:00
|
|
|
if __name__ == "__main__":
|
2003-02-17 10:51:41 -04:00
|
|
|
test_main()
|