]> git.mxchange.org Git - friendica.git/blob - tests/src/Core/Lock/LockTest.php
moved get_guid to System::createGUID
[friendica.git] / tests / src / Core / Lock / LockTest.php
1 <?php
2
3 namespace Friendica\Test\src\Core\Lock;
4
5 use Friendica\Test\DatabaseTest;
6
7 abstract class LockTest extends DatabaseTest
8 {
9         /**
10          * @var \Friendica\Core\Lock\ILockDriver
11          */
12         protected $instance;
13
14         abstract protected function getInstance();
15
16         protected function setUp()
17         {
18                 parent::setUp();
19                 $this->instance = $this->getInstance();
20         }
21
22         public function testLock() {
23                 $this->instance->acquireLock('foo', 1);
24                 $this->assertTrue($this->instance->isLocked('foo'));
25                 $this->assertFalse($this->instance->isLocked('bar'));
26         }
27
28         public function testDoubleLock() {
29                 $this->instance->acquireLock('foo', 1);
30                 $this->assertTrue($this->instance->isLocked('foo'));
31                 // We already locked it
32                 $this->assertTrue($this->instance->acquireLock('foo', 1));
33         }
34
35         public function testReleaseLock() {
36                 $this->instance->acquireLock('foo', 1);
37                 $this->assertTrue($this->instance->isLocked('foo'));
38                 $this->instance->releaseLock('foo');
39                 $this->assertFalse($this->instance->isLocked('foo'));
40         }
41
42         public function testReleaseAll() {
43                 $this->instance->acquireLock('foo', 1);
44                 $this->instance->acquireLock('bar', 1);
45                 $this->instance->acquireLock('nice', 1);
46
47                 $this->assertTrue($this->instance->isLocked('foo'));
48                 $this->assertTrue($this->instance->isLocked('bar'));
49                 $this->assertTrue($this->instance->isLocked('nice'));
50
51                 $this->instance->releaseAll();
52
53                 $this->assertFalse($this->instance->isLocked('foo'));
54                 $this->assertFalse($this->instance->isLocked('bar'));
55                 $this->assertFalse($this->instance->isLocked('nice'));
56         }
57
58         public function testReleaseAfterUnlock() {
59                 $this->instance->acquireLock('foo', 1);
60                 $this->instance->acquireLock('bar', 1);
61                 $this->instance->acquireLock('nice', 1);
62
63                 $this->instance->releaseLock('foo');
64
65                 $this->assertFalse($this->instance->isLocked('foo'));
66                 $this->assertTrue($this->instance->isLocked('bar'));
67                 $this->assertTrue($this->instance->isLocked('nice'));
68
69                 $this->instance->releaseAll();
70
71                 $this->assertFalse($this->instance->isLocked('bar'));
72                 $this->assertFalse($this->instance->isLocked('nice'));
73         }
74
75         function testLockTTL() {
76
77                 // 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
78                 $this->instance->acquireLock('foo', 1, 1);
79                 $this->instance->acquireLock('bar', 1, 3);
80
81                 $this->assertTrue($this->instance->isLocked('foo'));
82                 $this->assertTrue($this->instance->isLocked('bar'));
83
84                 sleep(2);
85
86                 $this->assertFalse($this->instance->isLocked('foo'));
87                 $this->assertTrue($this->instance->isLocked('bar'));
88
89                 sleep(2);
90
91                 $this->assertFalse($this->instance->isLocked('foo'));
92                 $this->assertFalse($this->instance->isLocked('bar'));
93         }
94 }