lock_machine_test.py revision f81680c018729fd4499e1e200d04b48c4b90127c
1#!/usr/bin/python
2#
3# Copyright 2010 Google Inc. All Rights Reserved.
4
5"""lock_machine.py related unit-tests.
6
7MachineManagerTest tests MachineManager.
8"""
9
10__author__ = "asharif@google.com (Ahmad Sharif)"
11
12from multiprocessing import Process
13import time
14import unittest
15
16import lock_machine
17
18
19def LockAndSleep(machine):
20  lock_machine.Machine(machine, auto=True).Lock(exclusive=True)
21  time.sleep(1)
22
23
24class MachineTest(unittest.TestCase):
25  def setUp(self):
26    pass
27
28  def testRepeatedUnlock(self):
29    mach = lock_machine.Machine("qqqraymes.mtv")
30    for i in range(10):
31      self.assertFalse(mach.Unlock())
32    mach = lock_machine.Machine("qqqraymes.mtv", auto=True)
33    for i in range(10):
34      self.assertFalse(mach.Unlock())
35
36  def testLockUnlock(self):
37    mach = lock_machine.Machine("otter.mtv", "/tmp")
38    for i in range(10):
39      self.assertTrue(mach.Lock(exclusive=True))
40      self.assertTrue(mach.Unlock(exclusive=True))
41
42    mach = lock_machine.Machine("otter.mtv", "/tmp", True)
43    for i in range(10):
44      self.assertTrue(mach.Lock(exclusive=True))
45      self.assertTrue(mach.Unlock(exclusive=True))
46
47  def testSharedLock(self):
48    mach = lock_machine.Machine("chrotomation.mtv")
49    for i in range(10):
50      self.assertTrue(mach.Lock(exclusive=False))
51    for i in range(10):
52      self.assertTrue(mach.Unlock(exclusive=False))
53    self.assertTrue(mach.Lock(exclusive=True))
54    self.assertTrue(mach.Unlock(exclusive=True))
55
56    mach = lock_machine.Machine("chrotomation.mtv", auto=True)
57    for i in range(10):
58      self.assertTrue(mach.Lock(exclusive=False))
59    for i in range(10):
60      self.assertTrue(mach.Unlock(exclusive=False))
61    self.assertTrue(mach.Lock(exclusive=True))
62    self.assertTrue(mach.Unlock(exclusive=True))
63
64  def testExclusiveLock(self):
65    mach = lock_machine.Machine("atree.mtv")
66    self.assertTrue(mach.Lock(exclusive=True))
67    for i in range(10):
68      self.assertFalse(mach.Lock(exclusive=True))
69      self.assertFalse(mach.Lock(exclusive=False))
70    self.assertTrue(mach.Unlock(exclusive=True))
71
72    mach = lock_machine.Machine("atree.mtv", auto=True)
73    self.assertTrue(mach.Lock(exclusive=True))
74    for i in range(10):
75      self.assertFalse(mach.Lock(exclusive=True))
76      self.assertFalse(mach.Lock(exclusive=False))
77    self.assertTrue(mach.Unlock(exclusive=True))
78
79  def testExclusiveState(self):
80    mach = lock_machine.Machine("testExclusiveState")
81    self.assertTrue(mach.Lock(exclusive=True))
82    for i in range(10):
83      self.assertFalse(mach.Lock(exclusive=False))
84    self.assertTrue(mach.Unlock(exclusive=True))
85
86    mach = lock_machine.Machine("testExclusiveState", auto=True)
87    self.assertTrue(mach.Lock(exclusive=True))
88    for i in range(10):
89      self.assertFalse(mach.Lock(exclusive=False))
90    self.assertTrue(mach.Unlock(exclusive=True))
91
92  def testAutoLockGone(self):
93    mach = lock_machine.Machine("lockgone", auto=True)
94    p = Process(target=LockAndSleep, args=("lockgone",))
95    p.start()
96    time.sleep(1.1)
97    p.join()
98    self.assertTrue(mach.Lock(exclusive=True))
99
100  def testAutoLockFromOther(self):
101    mach = lock_machine.Machine("other_lock", auto=True)
102    p = Process(target=LockAndSleep, args=("other_lock",))
103    p.start()
104    time.sleep(0.5)
105    self.assertFalse(mach.Lock(exclusive=True))
106    p.join()
107    time.sleep(0.6)
108    self.assertTrue(mach.Lock(exclusive=True))
109
110  def testUnlockByOthers(self):
111    mach = lock_machine.Machine("other_unlock", auto=True)
112    p = Process(target=LockAndSleep, args=("other_unlock",))
113    p.start()
114    time.sleep(0.5)
115    self.assertTrue(mach.Unlock(exclusive=True))
116    self.assertTrue(mach.Lock(exclusive=True))
117
118
119if __name__ == "__main__":
120  unittest.main()
121