diff options
Diffstat (limited to 'lock_machine_test.py')
-rw-r--r-- | lock_machine_test.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/lock_machine_test.py b/lock_machine_test.py new file mode 100644 index 00000000..0ffe094d --- /dev/null +++ b/lock_machine_test.py @@ -0,0 +1,121 @@ +# Copyright 2010 Google Inc. All Rights Reserved. +"""lock_machine.py related unit-tests. + +MachineManagerTest tests MachineManager. +""" + +from __future__ import print_function + +__author__ = 'asharif@google.com (Ahmad Sharif)' + +from multiprocessing import Process +import time +import unittest + +import file_lock_machine + + +def LockAndSleep(machine): + file_lock_machine.Machine(machine, auto=True).Lock(exclusive=True) + time.sleep(1) + + +class MachineTest(unittest.TestCase): + """Class for testing machine locking.""" + + def setUp(self): + pass + + def testRepeatedUnlock(self): + mach = file_lock_machine.Machine('qqqraymes.mtv') + for _ in range(10): + self.assertFalse(mach.Unlock()) + mach = file_lock_machine.Machine('qqqraymes.mtv', auto=True) + for _ in range(10): + self.assertFalse(mach.Unlock()) + + def testLockUnlock(self): + mach = file_lock_machine.Machine('otter.mtv', '/tmp') + for _ in range(10): + self.assertTrue(mach.Lock(exclusive=True)) + self.assertTrue(mach.Unlock(exclusive=True)) + + mach = file_lock_machine.Machine('otter.mtv', '/tmp', True) + for _ in range(10): + self.assertTrue(mach.Lock(exclusive=True)) + self.assertTrue(mach.Unlock(exclusive=True)) + + def testSharedLock(self): + mach = file_lock_machine.Machine('chrotomation.mtv') + for _ in range(10): + self.assertTrue(mach.Lock(exclusive=False)) + for _ in range(10): + self.assertTrue(mach.Unlock(exclusive=False)) + self.assertTrue(mach.Lock(exclusive=True)) + self.assertTrue(mach.Unlock(exclusive=True)) + + mach = file_lock_machine.Machine('chrotomation.mtv', auto=True) + for _ in range(10): + self.assertTrue(mach.Lock(exclusive=False)) + for _ 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 = file_lock_machine.Machine('atree.mtv') + self.assertTrue(mach.Lock(exclusive=True)) + for _ in range(10): + self.assertFalse(mach.Lock(exclusive=True)) + self.assertFalse(mach.Lock(exclusive=False)) + self.assertTrue(mach.Unlock(exclusive=True)) + + mach = file_lock_machine.Machine('atree.mtv', auto=True) + self.assertTrue(mach.Lock(exclusive=True)) + for _ 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 = file_lock_machine.Machine('testExclusiveState') + self.assertTrue(mach.Lock(exclusive=True)) + for _ in range(10): + self.assertFalse(mach.Lock(exclusive=False)) + self.assertTrue(mach.Unlock(exclusive=True)) + + mach = file_lock_machine.Machine('testExclusiveState', auto=True) + self.assertTrue(mach.Lock(exclusive=True)) + for _ in range(10): + self.assertFalse(mach.Lock(exclusive=False)) + self.assertTrue(mach.Unlock(exclusive=True)) + + def testAutoLockGone(self): + mach = file_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 = file_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 = file_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() |