setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec($drop); $pdo->exec($create); } } /** To start with an empty database for each single test. */ public function setUp() { if(!extension_loaded('pdo_sqlite')) { self::markTestSkipped("Please install 'pdo_sqlite' in order to run this test"); } } /** Clean up after the last test was run. */ public static function tearDownAfterClass() { @unlink(self::$file); } public function testRequiresLayout() { $appender = new LoggerAppenderPDO(); self::assertFalse($appender->requiresLayout()); } /** Tests new-style logging using prepared statements and the default SQL definition. */ public function testSimpleWithDefaults() { // Log event $event = new LoggerLoggingEvent("LoggerAppenderPDOTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); $appender = new LoggerAppenderPDO("myname"); $appender->setDSN(self::$dsn); $appender->activateOptions(); $appender->append($event); $appender->close(); // Test the default pattern $db = new PDO(self::$dsn); $query = "SELECT * FROM log4php_log"; $sth = $db->query($query); $row = $sth->fetch(PDO::FETCH_NUM); self::assertTrue(is_array($row), "No rows found."); self::assertEquals(7, count($row)); self::assertEquals(1, preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $row[0])); // datetime self::assertEquals('TEST', $row[1]); // logger name self::assertEquals('ERROR', $row[2]); // level self::assertEquals('testmessage', $row[3]); // message if (function_exists('posix_getpid')) { self::assertEquals(posix_getpid(), $row[4]); // process id } self::assertEquals('NA', $row[5]); // file, NA due to phpunit magic self::assertEquals('NA', $row[6]); // line, NA due to phpunit magic } /** Tests new style prepared statment logging with customized SQL. */ public function testCustomizedSql() { $dateFormat = "Y-m-d H:i:s"; // Prepare appender $appender = new LoggerAppenderPDO("myname"); $appender->setDSN(self::$dsn); $appender->setInsertSql("INSERT INTO log4php_log (file, line, thread, timestamp, logger, level, message) VALUES (?,?,?,?,?,?,?)"); $appender->setInsertPattern("%F,%L,%t,%d\{$dateFormat\},%c,%p,%m"); $appender->activateOptions(); // Action! $event = new LoggerLoggingEvent("LoggerAppenderPDOTest2", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); $appender->append($event); // Check $db = new PDO(self::$dsn); $result = $db->query("SELECT * FROM log4php_log"); $row = $result->fetch(PDO::FETCH_OBJ); self::assertTrue(is_object($row)); self::assertEquals("NA", $row->file); // "NA" due to phpunit magic self::assertEquals("NA", $row->line); // "NA" due to phpunit magic if (function_exists('posix_getpid')) { self::assertEquals(posix_getpid(), $row->thread); } self::assertEquals(1, preg_match('/^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}$/', $row->timestamp)); self::assertEquals('TEST', $row->logger); self::assertEquals('ERROR', $row->level); self::assertEquals('testmessage', $row->message); } /** * Tests a warning is shown when connecting to invalid dns. * @expectedException PHPUnit_Framework_Error * @expectedExceptionMessage invalid data source name */ public function testException() { $dsn = 'doenotexist'; $appender = new LoggerAppenderPDO("myname"); $appender->setDSN($dsn); $appender->activateOptions(); } /** * Check whether close() actually closes the database connection. */ public function testClose() { $event = new LoggerLoggingEvent("LoggerAppenderPDOTest", new Logger("TEST"), LoggerLevel::getLevelError(), "testmessage"); $appender = new LoggerAppenderPDO("myname"); $appender->setDSN(self::$dsn); $appender->activateOptions(); $appender->append($event); $appender->close(); self::assertNull($appender->getDatabaseHandle()); } }