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.
129 lines
4.3 KiB
129 lines
4.3 KiB
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Copyright 2019 The ChromiumOS Authors
|
|
# 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.
|
|
"""
|
|
|
|
|
|
__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()
|