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.
286 lines
9.0 KiB
286 lines
9.0 KiB
<?php |
|
/** |
|
* @link http://www.yiiframework.com/ |
|
* @copyright Copyright (c) 2008 Yii Software LLC |
|
* @license http://www.yiiframework.com/license/ |
|
*/ |
|
|
|
namespace yii\log { |
|
function microtime($get_as_float) |
|
{ |
|
if (\yiiunit\framework\log\DispatcherTest::$microtimeIsMocked) { |
|
return \yiiunit\framework\log\DispatcherTest::microtime(func_get_args()); |
|
} |
|
|
|
return \microtime($get_as_float); |
|
} |
|
} |
|
|
|
namespace yiiunit\framework\log { |
|
|
|
use Yii; |
|
use yii\base\UserException; |
|
use yii\log\Dispatcher; |
|
use yii\log\Logger; |
|
use yiiunit\TestCase; |
|
|
|
/** |
|
* @group log |
|
*/ |
|
class DispatcherTest extends TestCase |
|
{ |
|
/** |
|
* @var Logger |
|
*/ |
|
protected $logger; |
|
|
|
/** |
|
* @var Dispatcher |
|
*/ |
|
protected $dispatcher; |
|
|
|
/** |
|
* @var bool |
|
*/ |
|
public static $microtimeIsMocked = false; |
|
|
|
/** |
|
* Array of static functions. |
|
* |
|
* @var array |
|
*/ |
|
public static $functions = []; |
|
|
|
protected function setUp() |
|
{ |
|
static::$microtimeIsMocked = false; |
|
$this->dispatcher = new Dispatcher(); |
|
$this->logger = new Logger(); |
|
} |
|
|
|
public function testConfigureLogger() |
|
{ |
|
$dispatcher = new Dispatcher(); |
|
$this->assertSame(Yii::getLogger(), $dispatcher->getLogger()); |
|
|
|
|
|
$logger = new Logger(); |
|
$dispatcher = new Dispatcher([ |
|
'logger' => $logger, |
|
]); |
|
$this->assertSame($logger, $dispatcher->getLogger()); |
|
|
|
|
|
$dispatcher = new Dispatcher([ |
|
'logger' => 'yii\log\Logger', |
|
]); |
|
$this->assertInstanceOf('yii\log\Logger', $dispatcher->getLogger()); |
|
$this->assertEquals(0, $dispatcher->getLogger()->traceLevel); |
|
|
|
|
|
$dispatcher = new Dispatcher([ |
|
'logger' => [ |
|
'class' => 'yii\log\Logger', |
|
'traceLevel' => 42, |
|
], |
|
]); |
|
$this->assertInstanceOf('yii\log\Logger', $dispatcher->getLogger()); |
|
$this->assertEquals(42, $dispatcher->getLogger()->traceLevel); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::setLogger() |
|
*/ |
|
public function testSetLogger() |
|
{ |
|
$this->dispatcher->setLogger($this->logger); |
|
$this->assertSame($this->logger, $this->dispatcher->getLogger()); |
|
|
|
$this->dispatcher->setLogger('yii\log\Logger'); |
|
$this->assertInstanceOf('yii\log\Logger', $this->dispatcher->getLogger()); |
|
$this->assertEquals(0, $this->dispatcher->getLogger()->traceLevel); |
|
|
|
$this->dispatcher->setLogger([ |
|
'class' => 'yii\log\Logger', |
|
'traceLevel' => 42, |
|
]); |
|
$this->assertInstanceOf('yii\log\Logger', $this->dispatcher->getLogger()); |
|
$this->assertEquals(42, $this->dispatcher->getLogger()->traceLevel); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::getTraceLevel() |
|
*/ |
|
public function testGetTraceLevel() |
|
{ |
|
$this->logger->traceLevel = 123; |
|
$this->dispatcher->setLogger($this->logger); |
|
$this->assertEquals(123, $this->dispatcher->getTraceLevel()); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::setTraceLevel() |
|
*/ |
|
public function testSetTraceLevel() |
|
{ |
|
$this->dispatcher->setLogger($this->logger); |
|
$this->dispatcher->setTraceLevel(123); |
|
$this->assertEquals(123, $this->logger->traceLevel); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::getFlushInterval() |
|
*/ |
|
public function testGetFlushInterval() |
|
{ |
|
$this->logger->flushInterval = 99; |
|
$this->dispatcher->setLogger($this->logger); |
|
$this->assertEquals(99, $this->dispatcher->getFlushInterval()); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::setFlushInterval() |
|
*/ |
|
public function testSetFlushInterval() |
|
{ |
|
$this->dispatcher->setLogger($this->logger); |
|
$this->dispatcher->setFlushInterval(99); |
|
$this->assertEquals(99, $this->logger->flushInterval); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::dispatch() |
|
*/ |
|
public function testDispatchWithDisabledTarget() |
|
{ |
|
$target = $this->getMockBuilder('yii\\log\\Target') |
|
->setMethods(['collect']) |
|
->getMockForAbstractClass(); |
|
|
|
$target->expects($this->never())->method($this->anything()); |
|
$target->enabled = false; |
|
|
|
$dispatcher = new Dispatcher(['targets' => ['fakeTarget' => $target]]); |
|
$dispatcher->dispatch('messages', true); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::dispatch() |
|
*/ |
|
public function testDispatchWithSuccessTargetCollect() |
|
{ |
|
$target = $this->getMockBuilder('yii\\log\\Target') |
|
->setMethods(['collect']) |
|
->getMockForAbstractClass(); |
|
|
|
$target->expects($this->once()) |
|
->method('collect') |
|
->with( |
|
$this->equalTo('messages'), |
|
$this->equalTo(true) |
|
); |
|
|
|
$dispatcher = new Dispatcher(['targets' => ['fakeTarget' => $target]]); |
|
$dispatcher->dispatch('messages', true); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::dispatch() |
|
*/ |
|
public function testDispatchWithFakeTarget2ThrowExceptionWhenCollect() |
|
{ |
|
static::$microtimeIsMocked = true; |
|
$target1 = $this->getMockBuilder('yii\\log\\Target') |
|
->setMethods(['collect']) |
|
->getMockForAbstractClass(); |
|
|
|
$target2 = $this->getMockBuilder('yii\\log\\Target') |
|
->setMethods(['collect']) |
|
->getMockForAbstractClass(); |
|
|
|
$target1->expects($this->exactly(2)) |
|
->method('collect') |
|
->withConsecutive( |
|
[$this->equalTo('messages'), $this->equalTo(true)], |
|
[ |
|
$this->callback(function($arg) use ($target1) { |
|
if (!isset($arg[0][0], $arg[0][1], $arg[0][2], $arg[0][3])) { |
|
return false; |
|
} |
|
|
|
if (strpos($arg[0][0], 'Unable to send log via ' . get_class($target1) . ': Exception (Exception) \'yii\base\UserException\' with message \'some error\'') !== 0) { |
|
return false; |
|
} |
|
|
|
if ($arg[0][1] !== Logger::LEVEL_WARNING) { |
|
return false; |
|
} |
|
|
|
if ($arg[0][2] !== 'yii\log\Dispatcher::dispatch') { |
|
return false; |
|
} |
|
|
|
if ($arg[0][3] !== 'time data') { |
|
return false; |
|
} |
|
|
|
if ($arg[0][4] !== []) { |
|
return false; |
|
} |
|
|
|
return true; |
|
}), |
|
true, |
|
] |
|
); |
|
|
|
$target2->expects($this->once()) |
|
->method('collect') |
|
->with( |
|
$this->equalTo('messages'), |
|
$this->equalTo(true) |
|
)->will($this->throwException(new UserException('some error'))); |
|
|
|
$dispatcher = new Dispatcher(['targets' => ['fakeTarget1' => $target1, 'fakeTarget2' => $target2]]); |
|
|
|
static::$functions['microtime'] = function ($arguments) { |
|
$this->assertEquals([true], $arguments); |
|
return 'time data'; |
|
}; |
|
|
|
$dispatcher->dispatch('messages', true); |
|
} |
|
|
|
/** |
|
* @covers \yii\log\Dispatcher::init() |
|
*/ |
|
public function testInitWithCreateTargetObject() |
|
{ |
|
$dispatcher = new Dispatcher( |
|
[ |
|
'targets' => [ |
|
'syslog' => [ |
|
'class' => 'yii\log\SyslogTarget', |
|
], |
|
], |
|
] |
|
); |
|
|
|
$this->assertEquals($dispatcher->targets['syslog'], Yii::createObject('yii\log\SyslogTarget')); |
|
} |
|
|
|
/** |
|
* @param $name |
|
* @param $arguments |
|
* @return mixed |
|
*/ |
|
public static function __callStatic($name, $arguments) |
|
{ |
|
if (isset(static::$functions[$name]) && is_callable(static::$functions[$name])) { |
|
$arguments = isset($arguments[0]) ? $arguments[0] : $arguments; |
|
return forward_static_call(static::$functions[$name], $arguments); |
|
} |
|
static::fail("Function '$name' has not implemented yet!"); |
|
} |
|
} |
|
}
|
|
|