You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
103 lines
2.9 KiB
103 lines
2.9 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yiiunit\framework\mutex; |
|
|
|
use yii\base\InvalidConfigException; |
|
use yii\mutex\Mutex; |
|
|
|
/** |
|
* Class MutexTestTrait. |
|
*/ |
|
trait MutexTestTrait |
|
{ |
|
/** |
|
* @return Mutex |
|
* @throws InvalidConfigException |
|
*/ |
|
abstract protected function createMutex(); |
|
|
|
/** |
|
* @dataProvider mutexDataProvider() |
|
* |
|
* @param string $mutexName |
|
*/ |
|
public function testMutexAcquire($mutexName) |
|
{ |
|
$mutex = $this->createMutex(); |
|
|
|
$this->assertTrue($mutex->acquire($mutexName)); |
|
$this->assertTrue($mutex->release($mutexName)); |
|
} |
|
|
|
/** |
|
* @dataProvider mutexDataProvider() |
|
* |
|
* @param string $mutexName |
|
*/ |
|
public function testThatMutexLockIsWorking($mutexName) |
|
{ |
|
$mutexOne = $this->createMutex(); |
|
$mutexTwo = $this->createMutex(); |
|
|
|
$this->assertTrue($mutexOne->acquire($mutexName)); |
|
$this->assertFalse($mutexTwo->acquire($mutexName)); |
|
$this->assertTrue($mutexOne->release($mutexName)); |
|
$this->assertFalse($mutexTwo->release($mutexName)); |
|
|
|
$this->assertTrue($mutexTwo->acquire($mutexName)); |
|
$this->assertTrue($mutexTwo->release($mutexName)); |
|
} |
|
|
|
/** |
|
* @dataProvider mutexDataProvider() |
|
* |
|
* @param string $mutexName |
|
*/ |
|
public function testThatMutexLockIsWorkingOnTheSameComponent($mutexName) |
|
{ |
|
$mutex = $this->createMutex(); |
|
|
|
$this->assertTrue($mutex->acquire($mutexName)); |
|
$this->assertFalse($mutex->acquire($mutexName)); |
|
|
|
$this->assertTrue($mutex->release($mutexName)); |
|
$this->assertFalse($mutex->release($mutexName)); |
|
} |
|
|
|
public function testTimeout() |
|
{ |
|
$mutexName = __FUNCTION__; |
|
$mutexOne = $this->createMutex(); |
|
$mutexTwo = $this->createMutex(); |
|
|
|
$this->assertTrue($mutexOne->acquire($mutexName)); |
|
$microtime = microtime(true); |
|
$this->assertFalse($mutexTwo->acquire($mutexName, 1)); |
|
$diff = microtime(true) - $microtime; |
|
$this->assertTrue($diff >= 1 && $diff < 2); |
|
$this->assertTrue($mutexOne->release($mutexName)); |
|
$this->assertFalse($mutexTwo->release($mutexName)); |
|
} |
|
|
|
public static function mutexDataProvider() |
|
{ |
|
$utf = <<<'UTF' |
|
𝐘˛𝜄 ӏ𝕤 𝗮 𝔣𝖺𐑈𝝉, 𐑈ℯ𝔠u𝒓𝗲, 𝝰𝞹𝒹 𝖊𝘧𝒇𝗶𝕔𝖎ⅇπτ P𝘏𝙿 𝖿г𝖺m𝖾wσr𝐤. |
|
𝓕lе𝘅ӏᏏlе 𝞬𝖾𝘁 ϱ𝘳ɑ𝖌m𝛼𝓉ͺ𝖼. |
|
𝑊ﮭ𝚛𝛞𝓼 𝔯𝕚𝕘һ𝞃 σ𝚞𝞽 ०𝒇 𝐭𝙝ҽ 𝗯𝘰𝘹. |
|
𝓗𝚊𝘀 𝓇𝖾𝙖𝐬ﻬ𝓃𝕒ᖯl𝔢 ꓒ𝘦քα𝗎l𝐭ꜱ. |
|
😱 |
|
UTF; |
|
|
|
return [ |
|
'simple name' => ['testname'], |
|
'long name' => ['Y' . str_repeat('iiiiiiiiii', 1000)], |
|
'UTF-8 garbage' => [$utf], |
|
]; |
|
} |
|
}
|
|
|