blob: 41e2c68481ededabb4bbf92ef074583bcee7ecdf [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 appenders
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @link http://logging.apache.org/log4php
*/
/**
* Tests the syslog appender.
*
* Many of these tests rely on reflection features introduced in 5.3 and
* will be skipped if run on a lower version.
*
* This test will only write a single entry to the syslog.
*
* @group appenders
*/
class LoggerAppenderSyslogTest extends PHPUnit_Framework_TestCase {
public function testSettersGetters() {
// Setters should accept any value, without validation
$expected = "Random string value";
$appender = new LoggerAppenderSyslog();
$appender->setIdent($expected);
$appender->setFacility($expected);
$appender->setOverridePriority($expected);
$appender->setPriority($expected);
$appender->setOption($expected);
$actuals = array(
$appender->getIdent(),
$appender->getFacility(),
$appender->getOverridePriority(),
$appender->getPriority(),
$appender->getOption()
);
foreach($actuals as $actual) {
$this->assertSame($expected, $actual);
}
}
public function testRequiresLayout() {
$appender = new LoggerAppenderSyslog();
$this->assertTrue($appender->requiresLayout());
}
public function testLogging() {
$appender = new LoggerAppenderSyslog("myname");
$appender->setLayout(new LoggerLayoutSimple());
$appender->activateOptions();
$event = new LoggerLoggingEvent(__CLASS__, new Logger("TestLogger"), LoggerLevel::getLevelError(), "testmessage");
$appender->append($event);
}
/** Tests parsing of "option" parameter. */
public function testOption() {
if(!method_exists('ReflectionProperty', 'setAccessible')) {
$this->markTestSkipped("ReflectionProperty::setAccessible() required to perform this test (available in PHP 5.3.2+).");
}
$options = array(
'CONS' => LOG_CONS,
'NDELAY' => LOG_NDELAY,
'ODELAY' => LOG_ODELAY,
'PERROR' => LOG_PERROR,
'PID' => LOG_PID,
// test some combinations
'CONS|NDELAY' => LOG_CONS | LOG_NDELAY,
'PID|PERROR' => LOG_PID | LOG_PERROR,
'CONS|PID|NDELAY' => LOG_CONS | LOG_PID | LOG_NDELAY
);
// Defaults
$defaultStr = "PID|CONS";
$default = LOG_PID | LOG_CONS;
// This makes reading of a private property possible
$property = new ReflectionProperty('LoggerAppenderSyslog', 'intOption');
$property->setAccessible(true);
// Check default value first
$appender = new LoggerAppenderSyslog();
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($default, $actual, "Failed setting default option [$defaultStr]");
foreach($options as $option => $expected) {
$appender = new LoggerAppenderSyslog();
$appender->setOption($option);
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($expected, $actual, "Failed setting option [$option].");
}
}
/** Tests parsing of "priority" parameter. */
public function testPriority() {
if(!method_exists('ReflectionProperty', 'setAccessible')) {
$this->markTestSkipped("ReflectionProperty::setAccessible() required to perform this test (available in PHP 5.3.2+).");
}
$default = null;
$defaultStr = 'null';
$priorities = array(
'EMERG' => LOG_EMERG,
'ALERT' => LOG_ALERT,
'CRIT' => LOG_CRIT,
'ERR' => LOG_ERR,
'WARNING' => LOG_WARNING,
'NOTICE' => LOG_NOTICE,
'INFO' => LOG_INFO,
'DEBUG' => LOG_DEBUG
);
// This makes reading of a private property possible
$property = new ReflectionProperty('LoggerAppenderSyslog', 'intPriority');
$property->setAccessible(true);
// Check default value first
$appender = new LoggerAppenderSyslog();
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($default, $actual, "Failed setting default priority [$defaultStr].");
foreach($priorities as $priority => $expected) {
$appender = new LoggerAppenderSyslog();
$appender->setPriority($priority);
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($expected, $actual, "Failed setting priority [$priority].");
}
}
/** Tests parsing of "facility" parameter. */
public function testFacility() {
if(!method_exists('ReflectionProperty', 'setAccessible')) {
$this->markTestSkipped("ReflectionProperty::setAccessible() required to perform this test (available in PHP 5.3.2+).");
}
// Default value is the same on all OSs
$default = LOG_USER;
$defaultStr = 'USER';
// All possible facility strings (some of which might not exist depending on the OS)
$strings = array(
'KERN', 'USER', 'MAIL', 'DAEMON', 'AUTH',
'SYSLOG', 'LPR', 'NEWS', 'UUCP', 'CRON', 'AUTHPRIV',
'LOCAL0', 'LOCAL1', 'LOCAL2', 'LOCAL3', 'LOCAL4',
'LOCAL5', 'LOCAL6', 'LOCAL7',
);
// Only test facilities which exist on this OS
$facilities = array();
foreach($strings as $string) {
$const = "LOG_$string";
if (defined($const)) {
$facilities[$string] = constant($const);
}
}
// This makes reading of a private property possible
$property = new ReflectionProperty('LoggerAppenderSyslog', 'intFacility');
$property->setAccessible(true);
// Check default value first
$appender = new LoggerAppenderSyslog();
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($default, $default, "Failed setting default facility [$defaultStr].");
foreach($facilities as $facility => $expected) {
$appender = new LoggerAppenderSyslog();
$appender->setFacility($facility);
$appender->activateOptions();
$actual = $property->getValue($appender);
$this->assertSame($expected, $actual, "Failed setting priority [$facility].");
}
}
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testInvalidOption() {
$appender = new LoggerAppenderSyslog();
$appender->setOption('CONS|XYZ');
$appender->activateOptions();
}
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testInvalidPriority() {
$appender = new LoggerAppenderSyslog();
$appender->setPriority('XYZ');
$appender->activateOptions();
}
/**
* @expectedException PHPUnit_Framework_Error
*/
public function testInvalidFacility() {
$appender = new LoggerAppenderSyslog();
$appender->setFacility('XYZ');
$appender->activateOptions();
}
public function testPriorityOverride() {
if(!method_exists('ReflectionProperty', 'setAccessible')) {
$this->markTestSkipped("ReflectionProperty::setAccessible() required to perform this test (available in PHP 5.3.2+).");
}
$appender = new LoggerAppenderSyslog();
$appender->setPriority('EMERG');
$appender->setOverridePriority(true);
$appender->activateOptions();
$levels = array(
LoggerLevel::getLevelTrace(),
LoggerLevel::getLevelDebug(),
LoggerLevel::getLevelInfo(),
LoggerLevel::getLevelWarn(),
LoggerLevel::getLevelError(),
LoggerLevel::getLevelFatal(),
);
$expected = LOG_EMERG;
$method = new ReflectionMethod('LoggerAppenderSyslog', 'getSyslogPriority');
$method->setAccessible(true);
foreach($levels as $level) {
$actual = $method->invoke($appender, $level);
$this->assertSame($expected, $actual);
}
}
}