3 namespace Friendica\Test\src\Core\Lock;
5 use Friendica\Test\DatabaseTest;
7 abstract class LockTest extends DatabaseTest
10 * @var \Friendica\Core\Lock\ILockDriver
14 abstract protected function getInstance();
16 protected function setUp()
19 $this->instance = $this->getInstance();
22 public function testLock() {
23 $this->instance->acquireLock('foo', 1);
24 $this->assertTrue($this->instance->isLocked('foo'));
25 $this->assertFalse($this->instance->isLocked('bar'));
28 public function testDoubleLock() {
29 $this->instance->acquireLock('foo', 1);
30 $this->assertTrue($this->instance->isLocked('foo'));
31 // We already locked it
32 $this->assertTrue($this->instance->acquireLock('foo', 1));
35 public function testReleaseLock() {
36 $this->instance->acquireLock('foo', 1);
37 $this->assertTrue($this->instance->isLocked('foo'));
38 $this->instance->releaseLock('foo');
39 $this->assertFalse($this->instance->isLocked('foo'));
42 public function testReleaseAll() {
43 $this->instance->acquireLock('foo', 1);
44 $this->instance->acquireLock('bar', 1);
45 $this->instance->acquireLock('nice', 1);
47 $this->assertTrue($this->instance->isLocked('foo'));
48 $this->assertTrue($this->instance->isLocked('bar'));
49 $this->assertTrue($this->instance->isLocked('nice'));
51 $this->instance->releaseAll();
53 $this->assertFalse($this->instance->isLocked('foo'));
54 $this->assertFalse($this->instance->isLocked('bar'));
55 $this->assertFalse($this->instance->isLocked('nice'));
58 public function testReleaseAfterUnlock() {
59 $this->instance->acquireLock('foo', 1);
60 $this->instance->acquireLock('bar', 1);
61 $this->instance->acquireLock('nice', 1);
63 $this->instance->releaseLock('foo');
65 $this->assertFalse($this->instance->isLocked('foo'));
66 $this->assertTrue($this->instance->isLocked('bar'));
67 $this->assertTrue($this->instance->isLocked('nice'));
69 $this->instance->releaseAll();
71 $this->assertFalse($this->instance->isLocked('bar'));
72 $this->assertFalse($this->instance->isLocked('nice'));
75 function testLockTTL() {
77 // TODO [nupplaphil] - Because of the Datetime-Utils for the database, we have to wait a FULL second between the checks to invalidate the db-locks/cache
78 $this->instance->acquireLock('foo', 1, 1);
79 $this->instance->acquireLock('bar', 1, 3);
81 $this->assertTrue($this->instance->isLocked('foo'));
82 $this->assertTrue($this->instance->isLocked('bar'));
86 $this->assertFalse($this->instance->isLocked('foo'));
87 $this->assertTrue($this->instance->isLocked('bar'));
91 $this->assertFalse($this->instance->isLocked('foo'));
92 $this->assertFalse($this->instance->isLocked('bar'));