| #!/usr/bin/env python3 |
| # -*- coding: utf-8 -*- |
| |
| # Copyright 2019 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """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, '/tmp', 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', '/tmp') |
| for _ in range(10): |
| self.assertTrue(mach.Unlock()) |
| mach = file_lock_machine.Machine('qqqraymes.mtv', '/tmp', auto=True) |
| for _ in range(10): |
| self.assertTrue(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', '/tmp') |
| 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', '/tmp', 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', '/tmp') |
| 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', '/tmp', 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', '/tmp') |
| 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', '/tmp', 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', '/tmp', 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', '/tmp', 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', '/tmp', 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() |