##// END OF EJS Templates
test-lock.py: copy-edit assertions about file existing...
Siddharth Agarwal -
r26381:94dc1083 default
parent child Browse files
Show More
@@ -1,137 +1,137 b''
1 1 from __future__ import absolute_import
2 2
3 3 import os
4 4 import silenttestrunner
5 5 import tempfile
6 6 import unittest
7 7
8 8 from mercurial import (
9 9 lock,
10 10 scmutil,
11 11 )
12 12
13 13 testlockname = 'testlock'
14 14
15 15 class teststate(object):
16 16 def __init__(self, testcase):
17 17 self._testcase = testcase
18 18 self._acquirecalled = False
19 19 self._releasecalled = False
20 20 self._postreleasecalled = False
21 21 d = tempfile.mkdtemp(dir=os.getcwd())
22 22 self.vfs = scmutil.vfs(d, audit=False)
23 23
24 24 def makelock(self, *args, **kwargs):
25 25 l = lock.lock(self.vfs, testlockname, releasefn=self.releasefn,
26 26 acquirefn=self.acquirefn, *args, **kwargs)
27 27 l.postrelease.append(self.postreleasefn)
28 28 return l
29 29
30 30 def acquirefn(self):
31 31 self._acquirecalled = True
32 32
33 33 def releasefn(self):
34 34 self._releasecalled = True
35 35
36 36 def postreleasefn(self):
37 37 self._postreleasecalled = True
38 38
39 39 def assertacquirecalled(self, called):
40 40 self._testcase.assertEqual(
41 41 self._acquirecalled, called,
42 42 'expected acquire to be %s but was actually %s' % (
43 43 self._tocalled(called),
44 44 self._tocalled(self._acquirecalled),
45 45 ))
46 46
47 47 def resetacquirefn(self):
48 48 self._acquirecalled = False
49 49
50 50 def assertreleasecalled(self, called):
51 51 self._testcase.assertEqual(
52 52 self._releasecalled, called,
53 53 'expected release to be %s but was actually %s' % (
54 54 self._tocalled(called),
55 55 self._tocalled(self._releasecalled),
56 56 ))
57 57
58 58 def assertpostreleasecalled(self, called):
59 59 self._testcase.assertEqual(
60 60 self._postreleasecalled, called,
61 61 'expected postrelease to be %s but was actually %s' % (
62 62 self._tocalled(called),
63 63 self._tocalled(self._postreleasecalled),
64 64 ))
65 65
66 66 def assertlockexists(self, exists):
67 67 actual = self.vfs.lexists(testlockname)
68 68 self._testcase.assertEqual(
69 69 actual, exists,
70 70 'expected lock to %s but actually did %s' % (
71 71 self._toexists(exists),
72 72 self._toexists(actual),
73 73 ))
74 74
75 75 def _tocalled(self, called):
76 76 if called:
77 77 return 'called'
78 78 else:
79 79 return 'not called'
80 80
81 81 def _toexists(self, exists):
82 82 if exists:
83 return 'exists'
83 return 'exist'
84 84 else:
85 return 'not exists'
85 return 'not exist'
86 86
87 87 class testlock(unittest.TestCase):
88 88 def testlock(self):
89 89 state = teststate(self)
90 90 lock = state.makelock()
91 91 state.assertacquirecalled(True)
92 92 lock.release()
93 93 state.assertreleasecalled(True)
94 94 state.assertpostreleasecalled(True)
95 95 state.assertlockexists(False)
96 96
97 97 def testrecursivelock(self):
98 98 state = teststate(self)
99 99 lock = state.makelock()
100 100 state.assertacquirecalled(True)
101 101
102 102 state.resetacquirefn()
103 103 lock.lock()
104 104 # recursive lock should not call acquirefn again
105 105 state.assertacquirecalled(False)
106 106
107 107 lock.release() # brings lock refcount down from 2 to 1
108 108 state.assertreleasecalled(False)
109 109 state.assertpostreleasecalled(False)
110 110 state.assertlockexists(True)
111 111
112 112 lock.release() # releases the lock
113 113 state.assertreleasecalled(True)
114 114 state.assertpostreleasecalled(True)
115 115 state.assertlockexists(False)
116 116
117 117 def testlockfork(self):
118 118 state = teststate(self)
119 119 lock = state.makelock()
120 120 state.assertacquirecalled(True)
121 121 lock.lock()
122 122 # fake a fork
123 123 lock.pid += 1
124 124 lock.release()
125 125 state.assertreleasecalled(False)
126 126 state.assertpostreleasecalled(False)
127 127 state.assertlockexists(True)
128 128
129 129 # release the actual lock
130 130 lock.pid -= 1
131 131 lock.release()
132 132 state.assertreleasecalled(True)
133 133 state.assertpostreleasecalled(True)
134 134 state.assertlockexists(False)
135 135
136 136 if __name__ == '__main__':
137 137 silenttestrunner.main(__name__)
General Comments 0
You need to be logged in to leave comments. Login now