Author: ihabunek Date: Thu Dec 22 13:28:44 2011 New Revision: 1222222 URL: http://svn.apache.org/viewvc?rev=1222222&view=rev Log: LOG4PHP-166: Added connection timeout parameter to MongoDB appender. Also removed redundant tests from the test class. Modified: logging/log4php/trunk/src/changes/changes.xml logging/log4php/trunk/src/main/php/appenders/LoggerAppenderMongoDB.php logging/log4php/trunk/src/site/xdoc/docs/appenders/mongodb.xml logging/log4php/trunk/src/test/php/appenders/LoggerAppenderMongoDBTest.php Modified: logging/log4php/trunk/src/changes/changes.xml URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/changes/changes.xml?rev=1222222&r1=1222221&r2=1222222&view=diff ============================================================================== --- logging/log4php/trunk/src/changes/changes.xml (original) +++ logging/log4php/trunk/src/changes/changes.xml Thu Dec 22 13:28:44 2011 @@ -20,6 +20,9 @@ Apache log4php changelog + + Added connection timeout parameter to MongoDB appender. + LoggerAppenderFile throws wrong warning messages. All configurable components should report errors when given invalid values Modified: logging/log4php/trunk/src/main/php/appenders/LoggerAppenderMongoDB.php URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/main/php/appenders/LoggerAppenderMongoDB.php?rev=1222222&r1=1222221&r2=1222222&view=diff ============================================================================== --- logging/log4php/trunk/src/main/php/appenders/LoggerAppenderMongoDB.php (original) +++ logging/log4php/trunk/src/main/php/appenders/LoggerAppenderMongoDB.php Thu Dec 22 13:28:44 2011 @@ -52,6 +52,9 @@ class LoggerAppenderMongoDB extends Logg /** Default value for {@link $collectionName} */ const DEFAULT_COLLECTION_NAME = 'logs'; + /** Default value for {@link $timeout} */ + const DEFAULT_TIMEOUT_VALUE = 3000; + // ****************************************** // ** Configurable parameters ** // ****************************************** @@ -74,6 +77,9 @@ class LoggerAppenderMongoDB extends Logg /** Password used to connect to the database. */ protected $password; + /** Timeout value used when connecting to the database (in milliseconds). */ + protected $timeout; + // ****************************************** // ** Member variables ** // ****************************************** @@ -116,7 +122,7 @@ class LoggerAppenderMongoDB extends Logg */ public function activateOptions() { try { - $this->connection = new Mongo(sprintf('%s:%d', $this->host, $this->port)); + $this->connection = new Mongo(sprintf('%s:%d', $this->host, $this->port), array("timeout" => $this->timeout)); $db = $this->connection->selectDB($this->databaseName); if ($this->userName !== null && $this->password !== null) { $authResult = $db->authenticate($this->userName, $this->password); @@ -279,6 +285,15 @@ class LoggerAppenderMongoDB extends Logg return $this->password; } + /** Sets the value of {@link $timeout} parameter. */ + public function setTimeout($timeout) { + $this->setPositiveInteger('timeout', $timeout); + } + + /** Returns the value of {@link $timeout} parameter. */ + public function getTimeout() { + return $this->timeout; + } /** * Returns the mongodb connection. * @return Mongo Modified: logging/log4php/trunk/src/site/xdoc/docs/appenders/mongodb.xml URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/site/xdoc/docs/appenders/mongodb.xml?rev=1222222&r1=1222221&r2=1222222&view=diff ============================================================================== --- logging/log4php/trunk/src/site/xdoc/docs/appenders/mongodb.xml (original) +++ logging/log4php/trunk/src/site/xdoc/docs/appenders/mongodb.xml Thu Dec 22 13:28:44 2011 @@ -87,7 +87,13 @@ - Password used to connect to the database. - + + timeout + integer + No + 3000 + For how long the driver should try to connect to the database (in milliseconds). + Modified: logging/log4php/trunk/src/test/php/appenders/LoggerAppenderMongoDBTest.php URL: http://svn.apache.org/viewvc/logging/log4php/trunk/src/test/php/appenders/LoggerAppenderMongoDBTest.php?rev=1222222&r1=1222221&r2=1222222&view=diff ============================================================================== --- logging/log4php/trunk/src/test/php/appenders/LoggerAppenderMongoDBTest.php (original) +++ logging/log4php/trunk/src/test/php/appenders/LoggerAppenderMongoDBTest.php Thu Dec 22 13:28:44 2011 @@ -48,126 +48,77 @@ class LoggerAppenderMongoDBTest extends } protected function setUp() { - if (extension_loaded('mongo') == false) { + if (!extension_loaded('mongo')) { $this->markTestSkipped( 'The Mongo extension is not available.' ); } } - public function test__construct() { - $appender = new LoggerAppenderMongoDB('mongo_appender'); - $this->assertTrue($appender instanceof LoggerAppenderMongoDB); - } - - public function testSetGetHost() { + public function testHost() { $expected = 'mongodb://localhost'; self::$appender->setHost($expected); $result = self::$appender->getHost(); - $this->assertEquals($expected, $result, 'Host doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testSetGetHostMongoPrefix() { - $expected = 'mongodb://localhost'; - self::$appender->setHost('localhost'); - $result = self::$appender->getHost(); - $this->assertEquals($expected, $result, 'Host doesn\'t match expted value'); - } - - public function testSetPort() { + public function testPort() { $expected = 27017; self::$appender->setPort($expected); $result = self::$appender->getPort(); - $this->assertEquals($expected, $result, 'Port doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testGetPort() { - $expected = 27017; - self::$appender->setPort($expected); - $result = self::$appender->getPort(); - $this->assertEquals($expected, $result, 'Port doesn\'t match expted value'); - } - - public function testSetDatabaseName() { + public function testDatabaseName() { $expected = 'log4php_mongodb'; self::$appender->setDatabaseName($expected); $result = self::$appender->getDatabaseName(); - $this->assertEquals($expected, $result, 'Database name doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testGetDatabaseName() { - $expected = 'log4php_mongodb'; - self::$appender->setDatabaseName($expected); - $result = self::$appender->getDatabaseName(); - $this->assertEquals($expected, $result, 'Database name doesn\'t match expted value'); - } - - public function testSetCollectionName() { + public function testCollectionName() { $expected = 'logs'; self::$appender->setCollectionName($expected); $result = self::$appender->getCollectionName(); - $this->assertEquals($expected, $result, 'Collection name doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testGetCollectionName() { - $expected = 'logs'; - self::$appender->setCollectionName($expected); - $result = self::$appender->getCollectionName(); - $this->assertEquals($expected, $result, 'Collection name doesn\'t match expted value'); - } - - public function testSetUserName() { + public function testUserName() { $expected = 'char0n'; self::$appender->setUserName($expected); $result = self::$appender->getUserName(); - $this->assertEquals($expected, $result, 'UserName doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testGetUserName() { - $expected = 'char0n'; - self::$appender->setUserName($expected); - $result = self::$appender->getUserName(); - $this->assertEquals($expected, $result, 'UserName doesn\'t match expted value'); - } - - public function testSetPassword() { + public function testPassword() { $expected = 'secret pass'; self::$appender->setPassword($expected); $result = self::$appender->getPassword(); - $this->assertEquals($expected, $result, 'Password doesn\'t match expted value'); + self::assertEquals($expected, $result); } - public function testGetPassword() { - $expected = 'secret pass'; - self::$appender->setPassword($expected); - $result = self::$appender->getPassword(); - $this->assertEquals($expected, $result, 'Password doesn\'t match expted value'); - } - public function testActivateOptionsNoCredentials() { self::$appender->setUserName(null); self::$appender->setPassword(null); self::$appender->activateOptions(); } - public function testAppend() { - self::$appender->append(self::$event); - } - public function testFormat() { - $record = $this->logOne(self::$event); - - $this->assertEquals('ERROR', $record['level']); - $this->assertEquals('testmessage', $record['message']); - $this->assertEquals('test.Logger', $record['loggerName']); - - $this->assertEquals('NA', $record['fileName']); - $this->assertEquals('getLocationInformation', $record['method']); - $this->assertEquals('NA', $record['lineNumber']); - $this->assertEquals('LoggerLoggingEvent', $record['className']); + $event = LoggerTestHelper::getErrorEvent("testmessage"); + $record = $this->logOne($event); - $this->assertTrue(is_int($record['thread'])); - $this->assertTrue(is_int($record['lineNumber']) || $record['lineNumber'] == 'NA'); + self::assertEquals('ERROR', $record['level']); + self::assertEquals('testmessage', $record['message']); + self::assertEquals('test', $record['loggerName']); + + self::assertEquals('NA', $record['fileName']); + self::assertEquals('getLocationInformation', $record['method']); + self::assertEquals('NA', $record['lineNumber']); + self::assertEquals('LoggerLoggingEvent', $record['className']); + + self::assertTrue(is_int($record['thread'])); + self::assertSame(getmypid(), $record['thread']); + self::assertTrue(is_int($record['lineNumber']) || $record['lineNumber'] == 'NA'); } public function testFormatThrowableInfo() { @@ -182,10 +133,10 @@ class LoggerAppenderMongoDBTest extends $record = $this->logOne($event); - $this->assertArrayHasKey('exception', $record); - $this->assertEquals(1, $record['exception']['code']); - $this->assertEquals('test exception', $record['exception']['message']); - $this->assertContains('[internal function]: LoggerAppenderMongoDBTest', $record['exception']['stackTrace']); + self::assertArrayHasKey('exception', $record); + self::assertEquals(1, $record['exception']['code']); + self::assertEquals('test exception', $record['exception']['message']); + self::assertContains('[internal function]: LoggerAppenderMongoDBTest', $record['exception']['stackTrace']); } public function testFormatThrowableInfoWithInnerException() { @@ -206,14 +157,14 @@ class LoggerAppenderMongoDBTest extends $record = $this->logOne($event); - $this->assertArrayHasKey('exception', $record); - $this->assertEquals(1, $record['exception']['code']); - $this->assertEquals('test exception', $record['exception']['message']); - $this->assertContains('[internal function]: LoggerAppenderMongoDBTest', $record['exception']['stackTrace']); - - $this->assertTrue(array_key_exists('innerException', $record['exception'])); - $this->assertEquals(2, $record['exception']['innerException']['code']); - $this->assertEquals('test exception inner', $record['exception']['innerException']['message']); + self::assertArrayHasKey('exception', $record); + self::assertEquals(1, $record['exception']['code']); + self::assertEquals('test exception', $record['exception']['message']); + self::assertContains('[internal function]: LoggerAppenderMongoDBTest', $record['exception']['stackTrace']); + + self::assertTrue(array_key_exists('innerException', $record['exception'])); + self::assertEquals(2, $record['exception']['innerException']['code']); + self::assertEquals('test exception inner', $record['exception']['innerException']['message']); } public function testClose() { @@ -223,20 +174,23 @@ class LoggerAppenderMongoDBTest extends /** Logs the event and returns the record from the database. */ private function logOne($event) { - self::$appender = new LoggerAppenderMongoDB(); - self::$appender->setHost('localhost'); - self::$appender->activateOptions(); - $mongo = self::$appender->getConnection(); + $appender = new LoggerAppenderMongoDB(); + $appender->setHost('localhost'); + $appender->activateOptions(); + + $mongo = $appender->getConnection(); $collection = $mongo->log4php_mongodb->logs; $result = $collection->drop(); self::assertSame((float) 1, $result['ok'], "Could not clear the collection before logging."); - self::$appender->append($event); + $appender->append($event); $record = $collection->findOne(); self::assertNotNull($record, "Could not read the record from the database."); + $appender->close(); + return $record; }