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');
33 public function testLock() {
34 $this->instance->acquireLock('foo', 1);
35 $this->assertTrue($this->instance->isLocked('foo'));
36 $this->assertFalse($this->instance->isLocked('bar'));
39 public function testDoubleLock() {
40 $this->instance->acquireLock('foo', 1);
41 $this->assertTrue($this->instance->isLocked('foo'));
42 // We already locked it
43 $this->assertTrue($this->instance->acquireLock('foo', 1));
46 public function testReleaseLock() {
47 $this->instance->acquireLock('foo', 1);
48 $this->assertTrue($this->instance->isLocked('foo'));
49 $this->instance->releaseLock('foo');
50 $this->assertFalse($this->instance->isLocked('foo'));
53 public function testReleaseAll() {
54 $this->instance->acquireLock('foo', 1);
55 $this->instance->acquireLock('bar', 1);
56 $this->instance->acquireLock('nice', 1);
58 $this->assertTrue($this->instance->isLocked('foo'));
59 $this->assertTrue($this->instance->isLocked('bar'));
60 $this->assertTrue($this->instance->isLocked('nice'));
62 $this->instance->releaseAll();
64 $this->assertFalse($this->instance->isLocked('foo'));
65 $this->assertFalse($this->instance->isLocked('bar'));
66 $this->assertFalse($this->instance->isLocked('nice'));
69 public function testReleaseAfterUnlock() {
70 $this->instance->acquireLock('foo', 1);
71 $this->instance->acquireLock('bar', 1);
72 $this->instance->acquireLock('nice', 1);
74 $this->instance->releaseLock('foo');
76 $this->assertFalse($this->instance->isLocked('foo'));
77 $this->assertTrue($this->instance->isLocked('bar'));
78 $this->assertTrue($this->instance->isLocked('nice'));
80 $this->instance->releaseAll();
82 $this->assertFalse($this->instance->isLocked('bar'));
83 $this->assertFalse($this->instance->isLocked('nice'));
86 function testLockTTL() {
88 // 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
89 $this->instance->acquireLock('foo', 1, 1);
90 $this->instance->acquireLock('bar', 1, 3);
92 $this->assertTrue($this->instance->isLocked('foo'));
93 $this->assertTrue($this->instance->isLocked('bar'));
97 $this->assertFalse($this->instance->isLocked('foo'));
98 $this->assertTrue($this->instance->isLocked('bar'));
102 $this->assertFalse($this->instance->isLocked('foo'));
103 $this->assertFalse($this->instance->isLocked('bar'));