Fixings
[friendica.git/.git] / tests / src / Core / Lock / LockTest.php
1 <?php
2
3 namespace Friendica\Test\src\Core\Lock;
4
5 use Friendica\App;
6 use Friendica\Core\Config;
7 use PHPUnit\Framework\TestCase;
8
9 abstract class LockTest extends TestCase
10 {
11         /**
12          * @var \Friendica\Core\Lock\ILockDriver
13          */
14         protected $instance;
15
16         abstract protected function getInstance();
17
18         protected function setUp()
19         {
20                 global $a;
21                 parent::setUp();
22                 $this->instance = $this->getInstance();
23
24                 // Reusable App object
25                 $this->app = new App(__DIR__.'/../');
26                 $a = $this->app;
27
28                 // Default config
29                 Config::set('config', 'hostname', 'localhost');
30                 Config::set('system', 'throttle_limit_day', 100);
31                 Config::set('system', 'throttle_limit_week', 100);
32                 Config::set('system', 'throttle_limit_month', 100);
33                 Config::set('system', 'theme', 'system_theme');
34         }
35
36         public function testLock() {
37                 $this->instance->acquireLock('foo', 1);
38                 $this->assertTrue($this->instance->isLocked('foo'));
39                 $this->assertFalse($this->instance->isLocked('bar'));
40         }
41
42         public function testDoubleLock() {
43                 $this->instance->acquireLock('foo', 1);
44                 $this->assertTrue($this->instance->isLocked('foo'));
45                 // We already locked it
46                 $this->assertTrue($this->instance->acquireLock('foo', 1));
47         }
48
49         public function testReleaseLock() {
50                 $this->instance->acquireLock('foo', 1);
51                 $this->assertTrue($this->instance->isLocked('foo'));
52                 $this->instance->releaseLock('foo');
53                 $this->assertFalse($this->instance->isLocked('foo'));
54         }
55
56         public function testReleaseAll() {
57                 $this->instance->acquireLock('foo', 1);
58                 $this->instance->acquireLock('bar', 1);
59                 $this->instance->acquireLock('nice', 1);
60
61                 $this->instance->releaseAll();
62
63                 $this->assertFalse($this->instance->isLocked('foo'));
64                 $this->assertFalse($this->instance->isLocked('bar'));
65                 $this->assertFalse($this->instance->isLocked('nice'));
66         }
67
68         public function testReleaseAfterUnlock() {
69                 $this->instance->acquireLock('foo', 1);
70                 $this->instance->acquireLock('bar', 1);
71                 $this->instance->acquireLock('nice', 1);
72
73                 $this->instance->releaseLock('foo');
74
75                 $this->instance->releaseAll();
76
77                 $this->assertFalse($this->instance->isLocked('bar'));
78                 $this->assertFalse($this->instance->isLocked('#/$%ยง'));
79         }
80 }