]> git.mxchange.org Git - friendica.git/blob - tests/src/Core/Lock/LockTest.php
Replace global $a with BaseObject::getApp()
[friendica.git] / tests / src / Core / Lock / LockTest.php
1 <?php
2
3 namespace Friendica\Test\src\Core\Lock;
4
5 use Friendica\Core\Config;
6 use Friendica\Test\DatabaseTest;
7
8 abstract class LockTest extends DatabaseTest
9 {
10         /**
11          * @var \Friendica\Core\Lock\ILockDriver
12          */
13         protected $instance;
14
15         abstract protected function getInstance();
16
17         protected function setUp()
18         {
19                 parent::setUp();
20                 $this->instance = $this->getInstance();
21
22                 // Reusable App object
23                 $this->app = \Friendica\BaseObject::getApp();
24
25                 // Default config
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');
31         }
32
33         public function testLock() {
34                 $this->instance->acquireLock('foo', 1);
35                 $this->assertTrue($this->instance->isLocked('foo'));
36                 $this->assertFalse($this->instance->isLocked('bar'));
37         }
38
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));
44         }
45
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'));
51         }
52
53         public function testReleaseAll() {
54                 $this->instance->acquireLock('foo', 1);
55                 $this->instance->acquireLock('bar', 1);
56                 $this->instance->acquireLock('nice', 1);
57
58                 $this->assertTrue($this->instance->isLocked('foo'));
59                 $this->assertTrue($this->instance->isLocked('bar'));
60                 $this->assertTrue($this->instance->isLocked('nice'));
61
62                 $this->instance->releaseAll();
63
64                 $this->assertFalse($this->instance->isLocked('foo'));
65                 $this->assertFalse($this->instance->isLocked('bar'));
66                 $this->assertFalse($this->instance->isLocked('nice'));
67         }
68
69         public function testReleaseAfterUnlock() {
70                 $this->instance->acquireLock('foo', 1);
71                 $this->instance->acquireLock('bar', 1);
72                 $this->instance->acquireLock('nice', 1);
73
74                 $this->instance->releaseLock('foo');
75
76                 $this->assertFalse($this->instance->isLocked('foo'));
77                 $this->assertTrue($this->instance->isLocked('bar'));
78                 $this->assertTrue($this->instance->isLocked('nice'));
79
80                 $this->instance->releaseAll();
81
82                 $this->assertFalse($this->instance->isLocked('bar'));
83                 $this->assertFalse($this->instance->isLocked('nice'));
84         }
85
86         function testLockTTL() {
87
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);
91
92                 $this->assertTrue($this->instance->isLocked('foo'));
93                 $this->assertTrue($this->instance->isLocked('bar'));
94
95                 sleep(2);
96
97                 $this->assertFalse($this->instance->isLocked('foo'));
98                 $this->assertTrue($this->instance->isLocked('bar'));
99
100                 sleep(2);
101
102                 $this->assertFalse($this->instance->isLocked('foo'));
103                 $this->assertFalse($this->instance->isLocked('bar'));
104         }
105 }