]> git.mxchange.org Git - friendica.git/blobdiff - tests/src/Core/Lock/DatabaseLockDriverTest.php
Bugfix ConfigCacheLoaderTest
[friendica.git] / tests / src / Core / Lock / DatabaseLockDriverTest.php
index e5ca825c990a58eec374615d76729bd1509031c8..297e76d50b0fd25c70613fbe10aaefac1fef5a90 100644 (file)
@@ -2,8 +2,9 @@
 
 namespace Friendica\Test\src\Core\Lock;
 
+use Friendica\Core\Cache;
 use Friendica\Core\Lock\DatabaseLockDriver;
-use Friendica\Database\DBA;
+use Friendica\Test\Util\DbaLockMockTrait;
 
 /**
  * @runTestsInSeparateProcesses
@@ -11,14 +12,107 @@ use Friendica\Database\DBA;
  */
 class DatabaseLockDriverTest extends LockTest
 {
+       use DbaLockMockTrait;
+
+       protected $pid = 123;
+
+       protected function setUp()
+       {
+               $this->mockConnected();
+               $this->mockConnect();
+
+               $this->mockReleaseAll($this->pid, 2);
+
+               parent::setUp();
+       }
+
        protected function getInstance()
        {
-               return new DatabaseLockDriver();
+               return new DatabaseLockDriver($this->pid);
+       }
+
+       public function testLock()
+       {
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockIsLocked('foo', true, $this->startTime, 1);
+               $this->mockIsLocked('bar', false, $this->startTime, 1);
+
+               parent::testLock();
+       }
+
+       public function testDoubleLock()
+       {
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockIsLocked('foo', true, $this->startTime, 1);
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, true, $this->pid, true, $this->startTime, 1);
+
+               parent::testDoubleLock();
+       }
+
+       public function testReleaseLock()
+       {
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockIsLocked('foo', true, $this->startTime, 1);
+               $this->mockReleaseLock('foo', $this->pid, 1);
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+
+               parent::testReleaseLock();
+       }
+
+       public function testReleaseAll()
+       {
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockAcquireLock('bar', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockAcquireLock('nice', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+
+               $this->mockIsLocked('foo', true, $this->startTime, 1);
+               $this->mockIsLocked('bar', true, $this->startTime, 1);
+               $this->mockIsLocked('nice', true, $this->startTime, 1);
+
+               $this->mockReleaseAll($this->pid, 1);
+
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockIsLocked('bar', false, $this->startTime, 1);
+               $this->mockIsLocked('nice', false, $this->startTime, 1);
+
+               parent::testReleaseAll();
+       }
+
+       public function testReleaseAfterUnlock()
+       {
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockIsLocked('bar', false, $this->startTime, 1);
+               $this->mockIsLocked('nice', false, $this->startTime, 1);
+
+               $this->mockAcquireLock('foo', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockAcquireLock('bar', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+               $this->mockAcquireLock('nice', Cache::FIVE_MINUTES, false, $this->pid, false, $this->startTime, 1);
+
+               $this->mockReleaseLock('foo', $this->pid, 1);
+
+               $this->mockIsLocked('foo', false, $this->startTime, 1);
+               $this->mockIsLocked('bar', true, $this->startTime, 1);
+               $this->mockIsLocked('nice', true, $this->startTime, 1);
+
+               $this->mockReleaseAll($this->pid, 1);
+
+               $this->mockIsLocked('bar', false, $this->startTime, 1);
+               $this->mockIsLocked('nice', false, $this->startTime, 1);
+
+               parent::testReleaseAfterUnlock();
        }
 
-       public function tearDown()
+       public function testReleaseWitTTL()
        {
-               DBA::delete('locks', [ 'id > 0']);
-               parent::tearDown();
+               $this->mockIsLocked('test', false, $this->startTime, 1);
+               $this->mockAcquireLock('test', 10, false, $this->pid, false, $this->startTime, 1);
+               $this->mockIsLocked('test', true, $this->startTime, 1);
+               $this->mockReleaseLock('test', $this->pid, 1);
+               $this->mockIsLocked('test', false, $this->startTime, 1);
+
+               parent::testReleaseWitTTL();
        }
 }