Mercurial > hg
comparison tests/test-lock.py @ 26321:db4c192cb9b3
lock: move acquirefn call to inside the lock
We're going to need to call it again as part of reinitialization after a
subprocess inherits the lock.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Tue, 22 Sep 2015 14:09:42 -0700 |
parents | c4b667a7a51d |
children | 94dc10834b79 |
comparison
equal
deleted
inserted
replaced
26320:3ac7acb99b04 | 26321:db4c192cb9b3 |
---|---|
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._releasecalled = False | 19 self._releasecalled = False |
19 self._postreleasecalled = False | 20 self._postreleasecalled = False |
20 d = tempfile.mkdtemp(dir=os.getcwd()) | 21 d = tempfile.mkdtemp(dir=os.getcwd()) |
21 self.vfs = scmutil.vfs(d, audit=False) | 22 self.vfs = scmutil.vfs(d, audit=False) |
22 | 23 |
23 def makelock(self, *args, **kwargs): | 24 def makelock(self, *args, **kwargs): |
24 l = lock.lock(self.vfs, testlockname, releasefn=self.releasefn, *args, | 25 l = lock.lock(self.vfs, testlockname, releasefn=self.releasefn, |
25 **kwargs) | 26 acquirefn=self.acquirefn, *args, **kwargs) |
26 l.postrelease.append(self.postreleasefn) | 27 l.postrelease.append(self.postreleasefn) |
27 return l | 28 return l |
29 | |
30 def acquirefn(self): | |
31 self._acquirecalled = True | |
28 | 32 |
29 def releasefn(self): | 33 def releasefn(self): |
30 self._releasecalled = True | 34 self._releasecalled = True |
31 | 35 |
32 def postreleasefn(self): | 36 def postreleasefn(self): |
33 self._postreleasecalled = True | 37 self._postreleasecalled = True |
38 | |
39 def assertacquirecalled(self, called): | |
40 self._testcase.assertEqual( | |
41 self._acquirecalled, called, | |
42 'expected acquire to be %s but was actually %s' % ( | |
43 self._tocalled(called), | |
44 self._tocalled(self._acquirecalled), | |
45 )) | |
46 | |
47 def resetacquirefn(self): | |
48 self._acquirecalled = False | |
34 | 49 |
35 def assertreleasecalled(self, called): | 50 def assertreleasecalled(self, called): |
36 self._testcase.assertEqual( | 51 self._testcase.assertEqual( |
37 self._releasecalled, called, | 52 self._releasecalled, called, |
38 'expected release to be %s but was actually %s' % ( | 53 'expected release to be %s but was actually %s' % ( |
71 | 86 |
72 class testlock(unittest.TestCase): | 87 class testlock(unittest.TestCase): |
73 def testlock(self): | 88 def testlock(self): |
74 state = teststate(self) | 89 state = teststate(self) |
75 lock = state.makelock() | 90 lock = state.makelock() |
91 state.assertacquirecalled(True) | |
76 lock.release() | 92 lock.release() |
77 state.assertreleasecalled(True) | 93 state.assertreleasecalled(True) |
78 state.assertpostreleasecalled(True) | 94 state.assertpostreleasecalled(True) |
79 state.assertlockexists(False) | 95 state.assertlockexists(False) |
80 | 96 |
81 def testrecursivelock(self): | 97 def testrecursivelock(self): |
82 state = teststate(self) | 98 state = teststate(self) |
83 lock = state.makelock() | 99 lock = state.makelock() |
100 state.assertacquirecalled(True) | |
101 | |
102 state.resetacquirefn() | |
84 lock.lock() | 103 lock.lock() |
104 # recursive lock should not call acquirefn again | |
105 state.assertacquirecalled(False) | |
106 | |
85 lock.release() # brings lock refcount down from 2 to 1 | 107 lock.release() # brings lock refcount down from 2 to 1 |
86 state.assertreleasecalled(False) | 108 state.assertreleasecalled(False) |
87 state.assertpostreleasecalled(False) | 109 state.assertpostreleasecalled(False) |
88 state.assertlockexists(True) | 110 state.assertlockexists(True) |
89 | 111 |
93 state.assertlockexists(False) | 115 state.assertlockexists(False) |
94 | 116 |
95 def testlockfork(self): | 117 def testlockfork(self): |
96 state = teststate(self) | 118 state = teststate(self) |
97 lock = state.makelock() | 119 lock = state.makelock() |
120 state.assertacquirecalled(True) | |
98 lock.lock() | 121 lock.lock() |
99 # fake a fork | 122 # fake a fork |
100 lock.pid += 1 | 123 lock.pid += 1 |
101 lock.release() | 124 lock.release() |
102 state.assertreleasecalled(False) | 125 state.assertreleasecalled(False) |