blob: ec09edd292984f6d95d3180e35df17a91f506842 [file] [log] [blame]
<?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);
}
}