You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
3.8 KiB
121 lines
3.8 KiB
# 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()
|
|
|