3 namespace Friendica\Test\src\Core\Lock;
6 use Friendica\Core\Config;
7 use Friendica\Test\DatabaseTest;
8 use PHPUnit\Framework\TestCase;
10 abstract class LockTest extends DatabaseTest
13 * @var \Friendica\Core\Lock\ILockDriver
17 abstract protected function getInstance();
19 protected function setUp()
23 $this->instance = $this->getInstance();
25 // Reusable App object
26 $this->app = new App(__DIR__.'/../');
30 Config::set('config', 'hostname', 'localhost');
31 Config::set('system', 'throttle_limit_day', 100);
32 Config::set('system', 'throttle_limit_week', 100);
33 Config::set('system', 'throttle_limit_month', 100);
34 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'));
43 public function testDoubleLock() {
44 $this->instance->acquireLock('foo', 1);
45 $this->assertTrue($this->instance->isLocked('foo'));
46 // We already locked it
47 $this->assertTrue($this->instance->acquireLock('foo', 1));
50 public function testReleaseLock() {
51 $this->instance->acquireLock('foo', 1);
52 $this->assertTrue($this->instance->isLocked('foo'));
53 $this->instance->releaseLock('foo');
54 $this->assertFalse($this->instance->isLocked('foo'));
57 public function testReleaseAll() {
58 $this->instance->acquireLock('foo', 1);
59 $this->instance->acquireLock('bar', 1);
60 $this->instance->acquireLock('nice', 1);
62 $this->assertTrue($this->instance->isLocked('foo'));
63 $this->assertTrue($this->instance->isLocked('bar'));
64 $this->assertTrue($this->instance->isLocked('nice'));
66 $this->instance->releaseAll();
68 $this->assertFalse($this->instance->isLocked('foo'));
69 $this->assertFalse($this->instance->isLocked('bar'));
70 $this->assertFalse($this->instance->isLocked('nice'));
73 public function testReleaseAfterUnlock() {
74 $this->instance->acquireLock('foo', 1);
75 $this->instance->acquireLock('bar', 1);
76 $this->instance->acquireLock('nice', 1);
78 $this->instance->releaseLock('foo');
80 $this->assertFalse($this->instance->isLocked('foo'));
81 $this->assertTrue($this->instance->isLocked('bar'));
82 $this->assertTrue($this->instance->isLocked('nice'));
84 $this->instance->releaseAll();
86 $this->assertFalse($this->instance->isLocked('bar'));
87 $this->assertFalse($this->instance->isLocked('nice'));
90 function testLockTTL() {
92 // 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
93 $this->instance->acquireLock('foo', 1, 1);
94 $this->instance->acquireLock('bar', 1, 3);
96 $this->assertTrue($this->instance->isLocked('foo'));
97 $this->assertTrue($this->instance->isLocked('bar'));
101 $this->assertFalse($this->instance->isLocked('foo'));
102 $this->assertTrue($this->instance->isLocked('bar'));
106 $this->assertFalse($this->instance->isLocked('foo'));
107 $this->assertFalse($this->instance->isLocked('bar'));