]> granicus.if.org Git - python/commitdiff
Add a test for a conflicting lock.
authorAndrew M. Kuchling <amk@amk.ca>
Mon, 26 Jun 2006 13:23:10 +0000 (13:23 +0000)
committerAndrew M. Kuchling <amk@amk.ca>
Mon, 26 Jun 2006 13:23:10 +0000 (13:23 +0000)
On slow machines, maybe the time intervals (2 sec, 0.5 sec) will be too tight.
I'll see how the buildbots like it.

Lib/test/test_mailbox.py

index 914a20c2ba2219eee233d04e2b90abe870d1ab56..ad25404424ef96a4a27a875831fc4d7e08d8d480 100644 (file)
@@ -720,6 +720,28 @@ class _TestMboxMMDF(TestMailbox):
         self.assert_(contents == open(self._path, 'rb').read())
         self._box = self._factory(self._path)
 
+    def test_lock_conflict(self):
+        # Fork off a subprocess that will lock the file for 2 seconds,
+        # unlock it, and then exit.
+        pid = os.fork()
+        if pid == 0:
+            # In the child, lock the mailbox.
+            self._box.lock()
+            time.sleep(2)
+            self._box.unlock()
+            os._exit(0)
+
+        # In the parent, sleep a bit to give the child time to acquire
+        # the lock.
+        time.sleep(0.5)
+        self.assertRaises(mailbox.ExternalClashError,
+                          self._box.lock)
+        
+        # Wait for child to exit.  Locking should now succeed.
+        pid, status = os.wait()
+        self._box.lock()
+        self._box.unlock()
+        
 
 class TestMbox(_TestMboxMMDF):