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