3 namespace Friendica\Test\src\Core\Lock;
5 use Friendica\Core\Config;
6 use Friendica\Test\DatabaseTest;
8 abstract class LockTest extends DatabaseTest
11 * @var \Friendica\Core\Lock\ILockDriver
15 abstract protected function getInstance();
17 protected function setUp()
20 $this->instance = $this->getInstance();
22 // Reusable App object
23 $this->app = \Friendica\BaseObject::getApp();
26 Config::set('config', 'hostname', 'localhost');
27 Config::set('system', 'throttle_limit_day', 100);
28 Config::set('system', 'throttle_limit_week', 100);
29 Config::set('system', 'throttle_limit_month', 100);
30 Config::set('system', 'theme', 'system_theme');
36 public function testLock() {
37 $this->instance->acquireLock('foo', 1);
38 $this->assertTrue($this->instance->isLocked('foo'));
39 $this->assertFalse($this->instance->isLocked('bar'));
45 public function testDoubleLock() {
46 $this->instance->acquireLock('foo', 1);
47 $this->assertTrue($this->instance->isLocked('foo'));
48 // We already locked it
49 $this->assertTrue($this->instance->acquireLock('foo', 1));
55 public function testReleaseLock() {
56 $this->instance->acquireLock('foo', 1);
57 $this->assertTrue($this->instance->isLocked('foo'));
58 $this->instance->releaseLock('foo');
59 $this->assertFalse($this->instance->isLocked('foo'));
65 public function testReleaseAll() {
66 $this->instance->acquireLock('foo', 1);
67 $this->instance->acquireLock('bar', 1);
68 $this->instance->acquireLock('nice', 1);
70 $this->assertTrue($this->instance->isLocked('foo'));
71 $this->assertTrue($this->instance->isLocked('bar'));
72 $this->assertTrue($this->instance->isLocked('nice'));
74 $this->instance->releaseAll();
76 $this->assertFalse($this->instance->isLocked('foo'));
77 $this->assertFalse($this->instance->isLocked('bar'));
78 $this->assertFalse($this->instance->isLocked('nice'));
84 public function testReleaseAfterUnlock() {
85 $this->instance->acquireLock('foo', 1);
86 $this->instance->acquireLock('bar', 1);
87 $this->instance->acquireLock('nice', 1);
89 $this->instance->releaseLock('foo');
91 $this->assertFalse($this->instance->isLocked('foo'));
92 $this->assertTrue($this->instance->isLocked('bar'));
93 $this->assertTrue($this->instance->isLocked('nice'));
95 $this->instance->releaseAll();
97 $this->assertFalse($this->instance->isLocked('bar'));
98 $this->assertFalse($this->instance->isLocked('nice'));
104 function testLockTTL() {
106 // 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
107 $this->instance->acquireLock('foo', 1, 1);
108 $this->instance->acquireLock('bar', 1, 3);
110 $this->assertTrue($this->instance->isLocked('foo'));
111 $this->assertTrue($this->instance->isLocked('bar'));
115 $this->assertFalse($this->instance->isLocked('foo'));
116 $this->assertTrue($this->instance->isLocked('bar'));
120 $this->assertFalse($this->instance->isLocked('foo'));
121 $this->assertFalse($this->instance->isLocked('bar'));