X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=tests%2Fsrc%2FCore%2FLock%2FLockTest.php;h=70d7819d7318a739e5f0ebf5b42da73c34d7f254;hb=36190d1e79ff43b5ec81dbe953535c81d41bcce9;hp=d6a450c86bc3c5676541d30521d800d036e4bf10;hpb=906bb25972bf3f23e6cc3b98a50c0f3fa0990964;p=friendica.git diff --git a/tests/src/Core/Lock/LockTest.php b/tests/src/Core/Lock/LockTest.php index d6a450c86b..70d7819d73 100644 --- a/tests/src/Core/Lock/LockTest.php +++ b/tests/src/Core/Lock/LockTest.php @@ -1,15 +1,18 @@ instance = $this->getInstance(); - // Reusable App object - $this->app = new App(__DIR__.'/../'); - $a = $this->app; + $this->instance = $this->getInstance(); + $this->instance->releaseAll(true); + } - // Default config - Config::set('config', 'hostname', 'localhost'); - Config::set('system', 'throttle_limit_day', 100); - Config::set('system', 'throttle_limit_week', 100); - Config::set('system', 'throttle_limit_month', 100); - Config::set('system', 'theme', 'system_theme'); + protected function tearDown() + { + $this->instance->releaseAll(true); + parent::tearDown(); } - public function testLock() { - $this->instance->acquire('foo', 1); + /** + * @small + */ + public function testLock() + { + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->acquire('foo', 1)); $this->assertTrue($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('bar')); } - public function testDoubleLock() { - $this->instance->acquire('foo', 1); + /** + * @small + */ + public function testDoubleLock() + { + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->acquire('foo', 1)); $this->assertTrue($this->instance->isLocked('foo')); // We already locked it $this->assertTrue($this->instance->acquire('foo', 1)); } - public function testReleaseLock() { - $this->instance->acquire('foo', 1); + /** + * @small + */ + public function testReleaseLock() + { + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->acquire('foo', 1)); $this->assertTrue($this->instance->isLocked('foo')); $this->instance->release('foo'); $this->assertFalse($this->instance->isLocked('foo')); } - public function testReleaseAll() { - $this->instance->acquire('foo', 1); - $this->instance->acquire('bar', 1); - $this->instance->acquire('#/$%§', 1); + /** + * @small + */ + public function testReleaseAll() + { + $this->assertTrue($this->instance->acquire('foo', 1)); + $this->assertTrue($this->instance->acquire('bar', 1)); + $this->assertTrue($this->instance->acquire('nice', 1)); + + $this->assertTrue($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('bar')); + $this->assertTrue($this->instance->isLocked('nice')); - $this->instance->releaseAll(); + $this->assertTrue($this->instance->releaseAll()); $this->assertFalse($this->instance->isLocked('foo')); $this->assertFalse($this->instance->isLocked('bar')); - $this->assertFalse($this->instance->isLocked('#/$%§')); + $this->assertFalse($this->instance->isLocked('nice')); } - public function testReleaseAfterUnlock() { - $this->instance->acquire('foo', 1); - $this->instance->acquire('bar', 1); - $this->instance->acquire('#/$%§', 1); + /** + * @small + */ + public function testReleaseAfterUnlock() + { + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertFalse($this->instance->isLocked('bar')); + $this->assertFalse($this->instance->isLocked('nice')); + $this->assertTrue($this->instance->acquire('foo', 1)); + $this->assertTrue($this->instance->acquire('bar', 1)); + $this->assertTrue($this->instance->acquire('nice', 1)); - $this->instance->release('foo'); + $this->assertTrue($this->instance->release('foo')); - $this->instance->releaseAll(); + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('bar')); + $this->assertTrue($this->instance->isLocked('nice')); + + $this->assertTrue($this->instance->releaseAll()); $this->assertFalse($this->instance->isLocked('bar')); - $this->assertFalse($this->instance->isLocked('#/$%§')); + $this->assertFalse($this->instance->isLocked('nice')); + } + + /** + * @small + */ + public function testReleaseWitTTL() + { + $this->assertFalse($this->instance->isLocked('test')); + $this->assertTrue($this->instance->acquire('test', 1, 10)); + $this->assertTrue($this->instance->isLocked('test')); + $this->assertTrue($this->instance->release('test')); + $this->assertFalse($this->instance->isLocked('test')); + } + + /** + * @small + */ + public function testGetLocks() + { + $this->assertTrue($this->instance->acquire('foo', 1)); + $this->assertTrue($this->instance->acquire('bar', 1)); + $this->assertTrue($this->instance->acquire('nice', 1)); + + $this->assertTrue($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('bar')); + $this->assertTrue($this->instance->isLocked('nice')); + + $locks = $this->instance->getLocks(); + + $this->assertContains('foo', $locks); + $this->assertContains('bar', $locks); + $this->assertContains('nice', $locks); + } + + /** + * @small + */ + public function testGetLocksWithPrefix() + { + $this->assertTrue($this->instance->acquire('foo', 1)); + $this->assertTrue($this->instance->acquire('test1', 1)); + $this->assertTrue($this->instance->acquire('test2', 1)); + + $this->assertTrue($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('test1')); + $this->assertTrue($this->instance->isLocked('test2')); + + $locks = $this->instance->getLocks('test'); + + $this->assertContains('test1', $locks); + $this->assertContains('test2', $locks); + $this->assertNotContains('foo', $locks); + } + + /** + * @medium + */ + function testLockTTL() + { + $this->markTestSkipped('taking too much time without mocking'); + + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertFalse($this->instance->isLocked('bar')); + + // 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 + $this->assertTrue($this->instance->acquire('foo', 2, 1)); + $this->assertTrue($this->instance->acquire('bar', 2, 3)); + + $this->assertTrue($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('bar')); + + sleep(2); + + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertTrue($this->instance->isLocked('bar')); + + sleep(2); + + $this->assertFalse($this->instance->isLocked('foo')); + $this->assertFalse($this->instance->isLocked('bar')); + } + + /** + * Test if releasing a non-existing lock doesn't throw errors + */ + public function testReleaseLockWithoutLock() + { + $this->assertFalse($this->instance->isLocked('wrongLock')); + $this->assertFalse($this->instance->release('wrongLock')); } -} \ No newline at end of file +}