blob: d61878b8b4da086e12ef1e5272eedb02ff5f0df0 [file] [log] [blame]
#!/usr/bin/python
#
# Copyright 2010 Google Inc. All Rights Reserved.
"""lock_machine.py related unit-tests.
MachineManagerTest tests MachineManager.
"""
__author__ = "asharif@google.com (Ahmad Sharif)"
from multiprocessing import Process
import time
import unittest
import lock_machine
def LockAndSleep(machine):
lock_machine.Machine(machine, auto=True).Lock(exclusive=True)
time.sleep(1)
class MachineTest(unittest.TestCase):
def setUp(self):
pass
def testRepeatedUnlock(self):
mach = lock_machine.Machine("qqqraymes.mtv")
for i in range(10):
self.assertFalse(mach.Unlock())
mach = lock_machine.Machine("qqqraymes.mtv", auto=True)
for i in range(10):
self.assertFalse(mach.Unlock())
def testLockUnlock(self):
mach = lock_machine.Machine("otter.mtv", "/tmp")
for i in range(10):
self.assertTrue(mach.Lock(exclusive=True))
self.assertTrue(mach.Unlock(exclusive=True))
mach = lock_machine.Machine("otter.mtv", "/tmp", True)
for i in range(10):
self.assertTrue(mach.Lock(exclusive=True))
self.assertTrue(mach.Unlock(exclusive=True))
def testSharedLock(self):
mach = lock_machine.Machine("chrotomation.mtv")
for i in range(10):
self.assertTrue(mach.Lock(exclusive=False))
for i in range(10):
self.assertTrue(mach.Unlock(exclusive=False))
self.assertTrue(mach.Lock(exclusive=True))
self.assertTrue(mach.Unlock(exclusive=True))
mach = lock_machine.Machine("chrotomation.mtv", auto=True)
for i in range(10):
self.assertTrue(mach.Lock(exclusive=False))
for i in range(10):
self.assertTrue(mach.Unlock(exclusive=False))
self.assertTrue(mach.Lock(exclusive=True))
self.assertTrue(mach.Unlock(exclusive=True))
def testExclusiveLock(self):
mach = lock_machine.Machine("atree.mtv")
self.assertTrue(mach.Lock(exclusive=True))
for i in range(10):
self.assertFalse(mach.Lock(exclusive=True))
self.assertFalse(mach.Lock(exclusive=False))
self.assertTrue(mach.Unlock(exclusive=True))
mach = lock_machine.Machine("atree.mtv", auto=True)
self.assertTrue(mach.Lock(exclusive=True))
for i in range(10):
self.assertFalse(mach.Lock(exclusive=True))
self.assertFalse(mach.Lock(exclusive=False))
self.assertTrue(mach.Unlock(exclusive=True))
def testExclusiveState(self):
mach = lock_machine.Machine("testExclusiveState")
self.assertTrue(mach.Lock(exclusive=True))
for i in range(10):
self.assertFalse(mach.Lock(exclusive=False))
self.assertTrue(mach.Unlock(exclusive=True))
mach = lock_machine.Machine("testExclusiveState", auto=True)
self.assertTrue(mach.Lock(exclusive=True))
for i in range(10):
self.assertFalse(mach.Lock(exclusive=False))
self.assertTrue(mach.Unlock(exclusive=True))
def testAutoLockGone(self):
mach = lock_machine.Machine("lockgone", auto=True)
p = Process(target=LockAndSleep, args=("lockgone",))
p.start()
time.sleep(1.1)
p.join()
self.assertTrue(mach.Lock(exclusive=True))
def testAutoLockFromOther(self):
mach = lock_machine.Machine("other_lock", auto=True)
p = Process(target=LockAndSleep, args=("other_lock",))
p.start()
time.sleep(0.5)
self.assertFalse(mach.Lock(exclusive=True))
p.join()
time.sleep(0.6)
self.assertTrue(mach.Lock(exclusive=True))
def testUnlockByOthers(self):
mach = lock_machine.Machine("other_unlock", auto=True)
p = Process(target=LockAndSleep, args=("other_unlock",))
p.start()
time.sleep(0.5)
self.assertTrue(mach.Unlock(exclusive=True))
self.assertTrue(mach.Lock(exclusive=True))
if __name__ == "__main__":
unittest.main()