Home | History | Annotate | Download | only in system
      1 #!/usr/bin/env python
      2 # Copyright (C) 2010 Gabor Rapcsanyi (rgabor (at] inf.u-szeged.hu), University of Szeged
      3 #
      4 # All rights reserved.
      5 #
      6 # Redistribution and use in source and binary forms, with or without
      7 # modification, are permitted provided that the following conditions
      8 # are met:
      9 # 1. Redistributions of source code must retain the above copyright
     10 #    notice, this list of conditions and the following disclaimer.
     11 # 2. Redistributions in binary form must reproduce the above copyright
     12 #    notice, this list of conditions and the following disclaimer in the
     13 #    documentation and/or other materials provided with the distribution.
     14 #
     15 # THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
     16 # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     17 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     18 # PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
     19 # CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     20 # EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     21 # PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     22 # PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     23 # OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     24 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     25 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     26 
     27 import os
     28 import tempfile
     29 import unittest
     30 
     31 from webkitpy.common.system.file_lock import FileLock
     32 
     33 
     34 class FileLockTest(unittest.TestCase):
     35 
     36     def setUp(self):
     37         self._lock_name = "TestWebKit" + str(os.getpid()) + ".lock"
     38         self._lock_path = os.path.join(tempfile.gettempdir(), self._lock_name)
     39         self._file_lock1 = FileLock(self._lock_path, 1)
     40         self._file_lock2 = FileLock(self._lock_path, 1)
     41 
     42     def tearDown(self):
     43         self._file_lock1.release_lock()
     44         self._file_lock2.release_lock()
     45 
     46     def test_lock_lifecycle(self):
     47         # Create the lock.
     48         self._file_lock1.acquire_lock()
     49         self.assertTrue(os.path.exists(self._lock_path))
     50 
     51         # Try to lock again.
     52         self.assertFalse(self._file_lock2.acquire_lock())
     53 
     54         # Release the lock.
     55         self._file_lock1.release_lock()
     56         self.assertFalse(os.path.exists(self._lock_path))
     57 
     58     def test_stuck_lock(self):
     59         open(self._lock_path, 'w').close()
     60         self._file_lock1.acquire_lock()
     61         self._file_lock1.release_lock()
     62