3 namespace Friendica\Test\Core\Lock;
6 use Friendica\Core\Config;
7 use PHPUnit\Framework\TestCase;
9 abstract class LockTest extends TestCase
12 * @var \Friendica\Core\Lock\ILockDriver
16 abstract protected function getInstance();
18 protected function setUp()
22 $this->instance = $this->getInstance();
24 // Reusable App object
25 $this->app = new App(__DIR__.'/../');
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');
36 public function testLock() {
37 $this->instance->acquire('foo', 1);
38 $this->assertTrue($this->instance->isLocked('foo'));
39 $this->assertFalse($this->instance->isLocked('bar'));
42 public function testDoubleLock() {
43 $this->instance->acquire('foo', 1);
44 $this->assertTrue($this->instance->isLocked('foo'));
45 // We already locked it
46 $this->assertTrue($this->instance->acquire('foo', 1));
49 public function testReleaseLock() {
50 $this->instance->acquire('foo', 1);
51 $this->assertTrue($this->instance->isLocked('foo'));
52 $this->instance->release('foo');
53 $this->assertFalse($this->instance->isLocked('foo'));
56 public function testReleaseAll() {
57 $this->instance->acquire('foo', 1);
58 $this->instance->acquire('bar', 1);
59 $this->instance->acquire('#/$%§', 1);
61 $this->instance->releaseAll();
63 $this->assertFalse($this->instance->isLocked('foo'));
64 $this->assertFalse($this->instance->isLocked('bar'));
65 $this->assertFalse($this->instance->isLocked('#/$%§'));
68 public function testReleaseAfterUnlock() {
69 $this->instance->acquire('foo', 1);
70 $this->instance->acquire('bar', 1);
71 $this->instance->acquire('#/$%§', 1);
73 $this->instance->release('foo');
75 $this->instance->releaseAll();
77 $this->assertFalse($this->instance->isLocked('bar'));
78 $this->assertFalse($this->instance->isLocked('#/$%§'));