<?php | |
/** | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
* | |
* @category tests | |
* @package log4php | |
* @subpackage pattern | |
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0 | |
* @link http://logging.apache.org/log4php | |
*/ | |
/** | |
* @group pattern | |
*/ | |
class LoggerPatternConverterTest extends PHPUnit_Framework_TestCase { | |
/** | |
* A logging event for testing. | |
* @var LoggerLoggingEvent | |
*/ | |
private $event; | |
/** | |
* Fromatting info used with the logging event. | |
* @var LoggerFormattingInfos | |
*/ | |
private $info; | |
public function __construct() { | |
$this->event = LoggerTestHelper::getInfoEvent('foobar'); | |
$this->info = new LoggerFormattingInfo(); | |
} | |
public function testCookie() { | |
// Fake a couple of cookies | |
$_COOKIE['test1'] = 'value1'; | |
$_COOKIE['test2'] = 'value2'; | |
$converter = new LoggerPatternConverterCookie($this->info, 'test1'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value1'; | |
self::assertSame($expected, $actual); | |
$converter = new LoggerPatternConverterCookie($this->info, 'test2'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value2'; | |
self::assertSame($expected, $actual); | |
$converter = new LoggerPatternConverterCookie($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = "test1=value1, test2=value2"; | |
self::assertSame($expected, $actual); | |
} | |
public function testDate() { | |
$converter = new LoggerPatternConverterDate($this->info, 'c'); | |
$actual = $converter->convert($this->event); | |
$expected = date('c', $this->event->getTimeStamp()); | |
self::assertSame($expected, $actual); | |
// Format defaults to 'c' | |
$converter = new LoggerPatternConverterDate($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = date('c', $this->event->getTimeStamp()); | |
self::assertSame($expected, $actual); | |
$converter = new LoggerPatternConverterDate($this->info, ''); | |
$actual = $converter->convert($this->event); | |
$expected = date('c', $this->event->getTimeStamp()); | |
self::assertSame($expected, $actual); | |
// Test ABSOLUTE | |
$converter = new LoggerPatternConverterDate($this->info, 'ABSOLUTE'); | |
$actual = $converter->convert($this->event); | |
$expected = date('H:i:s', $this->event->getTimeStamp()); | |
self::assertSame($expected, $actual); | |
// Test DATE | |
$converter = new LoggerPatternConverterDate($this->info, 'DATE'); | |
$actual = $converter->convert($this->event); | |
$expected = date('d M Y H:i:s.', $this->event->getTimeStamp()); | |
$timestamp = $this->event->getTimeStamp(); | |
$ms = floor(($timestamp - floor($timestamp)) * 1000); | |
$ms = str_pad($ms, 3, '0', STR_PAD_LEFT); | |
$expected .= $ms; | |
self::assertSame($expected, $actual); | |
} | |
public function testEnvironment() { | |
// Fake a couple of environment values | |
$_ENV['test1'] = 'value1'; | |
$_ENV['test2'] = 'value2'; | |
$converter = new LoggerPatternConverterEnvironment($this->info, 'test1'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value1'; | |
self::assertSame($expected, $actual); | |
$converter = new LoggerPatternConverterEnvironment($this->info, 'test2'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value2'; | |
self::assertSame($expected, $actual); | |
} | |
public function testLevel() { | |
$converter = new LoggerPatternConverterLevel($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = $this->event->getLevel()->toString(); | |
self::assertEquals($expected, $actual); | |
} | |
public function testLiteral() { | |
$converter = new LoggerPatternConverterLiteral('foo bar baz'); | |
$actual = $converter->convert($this->event); | |
$expected = 'foo bar baz'; | |
self::assertEquals($expected, $actual); | |
} | |
public function testLoggerWithoutOption() { | |
$event = LoggerTestHelper::getInfoEvent('foo', 'TestLoggerName'); | |
$converter = new LoggerPatternConverterLogger($this->info); | |
$actual = $converter->convert($event); | |
$expected = 'TestLoggerName'; | |
self::assertEquals($expected, $actual); | |
} | |
public function testLoggerWithOption0() { | |
$event = LoggerTestHelper::getInfoEvent('foo', 'TestLoggerName'); | |
$converter = new LoggerPatternConverterLogger($this->info, '0'); | |
$actual = $converter->convert($event); | |
$expected = 'TestLoggerName'; | |
self::assertEquals($expected, $actual); | |
} | |
public function testLocation() { | |
$config = LoggerTestHelper::getEchoPatternConfig("%file:%line:%class:%method"); | |
Logger::configure($config); | |
// Test by capturing output. Logging methods of a Logger object must | |
// be used for the location info to be formed correctly. | |
ob_start(); | |
$log = Logger::getLogger('foo'); | |
$log->info('foo'); $line = __LINE__; // Do NOT move this to next line. | |
$actual = ob_get_contents(); | |
ob_end_clean(); | |
$expected = implode(':', array(__FILE__, $line, __CLASS__, __FUNCTION__)); | |
self::assertSame($expected, $actual); | |
Logger::resetConfiguration(); | |
} | |
public function testLocation2() { | |
$config = LoggerTestHelper::getEchoPatternConfig("%location"); | |
Logger::configure($config); | |
// Test by capturing output. Logging methods of a Logger object must | |
// be used for the location info to be formed correctly. | |
ob_start(); | |
$log = Logger::getLogger('foo'); | |
$log->info('foo'); $line = __LINE__; // Do NOT move this to next line. | |
$actual = ob_get_contents(); | |
ob_end_clean(); | |
$class = __CLASS__; | |
$func = __FUNCTION__; | |
$file = __FILE__; | |
$expected = "$class.$func($file:$line)"; | |
self::assertSame($expected, $actual); | |
Logger::resetConfiguration(); | |
} | |
public function testMessage() { | |
$expected = "This is a message."; | |
$event = LoggerTestHelper::getInfoEvent($expected); | |
$converter = new LoggerPatternConverterMessage($this->info); | |
$actual = $converter->convert($event); | |
self::assertSame($expected, $actual); | |
} | |
public function testMDC() { | |
LoggerMDC::put('foo', 'bar'); | |
LoggerMDC::put('bla', 'tra'); | |
// Entire context | |
$converter = new LoggerPatternConverterMDC($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = 'foo=bar, bla=tra'; | |
self::assertSame($expected, $actual); | |
// Just foo | |
$converter = new LoggerPatternConverterMDC($this->info, 'foo'); | |
$actual = $converter->convert($this->event); | |
$expected = 'bar'; | |
self::assertSame($expected, $actual); | |
// Non existant key | |
$converter = new LoggerPatternConverterMDC($this->info, 'doesnotexist'); | |
$actual = $converter->convert($this->event); | |
$expected = ''; | |
self::assertSame($expected, $actual); | |
LoggerMDC::clear(); | |
} | |
public function testNDC() { | |
LoggerNDC::push('foo'); | |
LoggerNDC::push('bar'); | |
LoggerNDC::push('baz'); | |
$converter = new LoggerPatternConverterNDC($this->info); | |
$expected = 'foo bar baz'; | |
$actual = $converter->convert($this->event); | |
self::assertEquals($expected, $actual); | |
} | |
public function testNewline() { | |
$converter = new LoggerPatternConverterNewLine($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = PHP_EOL; | |
self::assertSame($expected, $actual); | |
} | |
public function testProcess() { | |
$converter = new LoggerPatternConverterProcess($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = getmypid(); | |
self::assertSame($expected, $actual); | |
} | |
public function testRelative() { | |
$converter = new LoggerPatternConverterRelative($this->info); | |
$expected = number_format($this->event->getTimeStamp() - $this->event->getStartTime(), 4); | |
$actual = $converter->convert($this->event); | |
self::assertSame($expected, $actual); | |
} | |
public function testRequest() { | |
// Fake a couple of request values | |
$_REQUEST['test1'] = 'value1'; | |
$_REQUEST['test2'] = 'value2'; | |
// Entire request | |
$converter = new LoggerPatternConverterRequest($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = 'test1=value1, test2=value2'; | |
self::assertSame($expected, $actual); | |
// Just test2 | |
$converter = new LoggerPatternConverterRequest($this->info, 'test2'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value2'; | |
self::assertSame($expected, $actual); | |
} | |
public function testServer() { | |
// Fake a server value | |
$_SERVER['test1'] = 'value1'; | |
$converter = new LoggerPatternConverterServer($this->info, 'test1'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value1'; | |
self::assertSame($expected, $actual); | |
} | |
public function testSession() { | |
// Fake a session value | |
$_SESSION['test1'] = 'value1'; | |
$converter = new LoggerPatternConverterSession($this->info, 'test1'); | |
$actual = $converter->convert($this->event); | |
$expected = 'value1'; | |
self::assertSame($expected, $actual); | |
} | |
public function testSessionID() { | |
$converter = new LoggerPatternConverterSessionID($this->info); | |
$actual = $converter->convert($this->event); | |
$expected = session_id(); | |
self::assertSame($expected, $actual); | |
} | |
public function testFormattingTrimRight() { | |
$event = LoggerTestHelper::getInfoEvent('0123456789'); | |
$info = new LoggerFormattingInfo(); | |
$info->max = 5; | |
$converter = new LoggerPatternConverterMessage($info); | |
$actual = ""; | |
$converter->format($actual, $event); | |
$expected = "01234"; | |
self::assertSame($expected, $actual); | |
} | |
public function testFormattingTrimLeft() { | |
$event = LoggerTestHelper::getInfoEvent('0123456789'); | |
$info = new LoggerFormattingInfo(); | |
$info->max = 5; | |
$info->trimLeft = true; | |
$converter = new LoggerPatternConverterMessage($info); | |
$actual = ""; | |
$converter->format($actual, $event); | |
$expected = "56789"; | |
self::assertSame($expected, $actual); | |
} | |
public function testFormattingPadEmpty() { | |
$event = LoggerTestHelper::getInfoEvent(''); | |
$info = new LoggerFormattingInfo(); | |
$info->min = 5; | |
$converter = new LoggerPatternConverterMessage($info); | |
$actual = ""; | |
$converter->format($actual, $event); | |
$expected = " "; | |
self::assertSame($expected, $actual); | |
} | |
public function testFormattingPadLeft() { | |
$event = LoggerTestHelper::getInfoEvent('0'); | |
$info = new LoggerFormattingInfo(); | |
$info->min = 5; | |
$converter = new LoggerPatternConverterMessage($info); | |
$actual = ""; | |
$converter->format($actual, $event); | |
$expected = " 0"; | |
self::assertSame($expected, $actual); | |
} | |
public function testFormattingPadRight() { | |
$event = LoggerTestHelper::getInfoEvent('0'); | |
$info = new LoggerFormattingInfo(); | |
$info->min = 5; | |
$info->padLeft = false; | |
$converter = new LoggerPatternConverterMessage($info); | |
$actual = ""; | |
$converter->format($actual, $event); | |
$expected = "0 "; | |
self::assertSame($expected, $actual); | |
} | |
} |