3 namespace Friendica\Test\src\Core\Lock;
5 use Friendica\BaseObject;
6 use Friendica\Core\Config;
7 use Friendica\Test\DatabaseTest;
9 abstract class LockTest extends DatabaseTest
12 * @var \Friendica\Core\Lock\ILockDriver
16 abstract protected function getInstance();
18 protected function setUp()
21 $this->instance = $this->getInstance();
23 // Reusable App object
24 $this->app = BaseObject::getApp();
27 Config::set('config', 'hostname', 'localhost');
28 Config::set('system', 'throttle_limit_day', 100);
29 Config::set('system', 'throttle_limit_week', 100);
30 Config::set('system', 'throttle_limit_month', 100);
31 Config::set('system', 'theme', 'system_theme');
37 public function testLock() {
38 $this->instance->acquireLock('foo', 1);
39 $this->assertTrue($this->instance->isLocked('foo'));
40 $this->assertFalse($this->instance->isLocked('bar'));
46 public function testDoubleLock() {
47 $this->instance->acquireLock('foo', 1);
48 $this->assertTrue($this->instance->isLocked('foo'));
49 // We already locked it
50 $this->assertTrue($this->instance->acquireLock('foo', 1));
56 public function testReleaseLock() {
57 $this->instance->acquireLock('foo', 1);
58 $this->assertTrue($this->instance->isLocked('foo'));
59 $this->instance->releaseLock('foo');
60 $this->assertFalse($this->instance->isLocked('foo'));
66 public function testReleaseAll() {
67 $this->instance->acquireLock('foo', 1);
68 $this->instance->acquireLock('bar', 1);
69 $this->instance->acquireLock('nice', 1);
71 $this->assertTrue($this->instance->isLocked('foo'));
72 $this->assertTrue($this->instance->isLocked('bar'));
73 $this->assertTrue($this->instance->isLocked('nice'));
75 $this->instance->releaseAll();
77 $this->assertFalse($this->instance->isLocked('foo'));
78 $this->assertFalse($this->instance->isLocked('bar'));
79 $this->assertFalse($this->instance->isLocked('nice'));
85 public function testReleaseAfterUnlock() {
86 $this->instance->acquireLock('foo', 1);
87 $this->instance->acquireLock('bar', 1);
88 $this->instance->acquireLock('nice', 1);
90 $this->instance->releaseLock('foo');
92 $this->assertFalse($this->instance->isLocked('foo'));
93 $this->assertTrue($this->instance->isLocked('bar'));
94 $this->assertTrue($this->instance->isLocked('nice'));
96 $this->instance->releaseAll();
98 $this->assertFalse($this->instance->isLocked('bar'));
99 $this->assertFalse($this->instance->isLocked('nice'));
105 function testLockTTL() {
107 // 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
108 $this->instance->acquireLock('foo', 1, 1);
109 $this->instance->acquireLock('bar', 1, 3);
111 $this->assertTrue($this->instance->isLocked('foo'));
112 $this->assertTrue($this->instance->isLocked('bar'));
116 $this->assertFalse($this->instance->isLocked('foo'));
117 $this->assertTrue($this->instance->isLocked('bar'));
121 $this->assertFalse($this->instance->isLocked('foo'));
122 $this->assertFalse($this->instance->isLocked('bar'));