| // +----------------------------------------------------------------------+ // // $Id: MDB2_api_testcase.php,v 1.22 2007/04/25 09:11:35 quipo Exp $ require_once 'MDB2_testcase.php'; class MDB2_Api_TestCase extends MDB2_TestCase { var $clear_tables = false; function testParseDSN() { $expected = array ( 'phptype' => 'phptype', 'dbsyntax' => 'phptype', 'username' => 'username', 'password' => 'password', 'protocol' => 'protocol', 'hostspec' => false, 'port' => '110', 'socket' => false, 'database' => '/usr/db_file.db', 'mode' => false, ); $original = 'phptype://username:password@protocol+hostspec:110//usr/db_file.db?mode=0644'; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype(dbsyntax)://username:password@hostspec/database_name'; $expected = array ( 'phptype' => 'phptype', 'dbsyntax' => 'dbsyntax', 'username' => 'username', 'password' => 'password', 'protocol' => 'tcp', 'hostspec' => 'hostspec', 'port' => false, 'socket' => false, 'database' => 'database_name', 'mode' => false, ); $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype://username:password@hostspec/database_name'; $expected['dbsyntax'] = 'phptype'; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype://username:password@hostspec'; $expected['database'] = false; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype://username@hostspec'; $expected['password'] = false; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype://hostspec/database'; $expected['username'] = false; $expected['database'] = 'database'; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- $original = 'phptype(dbsyntax)'; $expected['database'] = false; $expected['hostspec'] = false; $expected['protocol'] = false; $expected['dbsyntax'] = 'dbsyntax'; $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- //oracle's "Easy Connect" syntax (Oracle 10g, @see Bug #4854) $original = 'oci8://scott:tiger@//localhost/XE'; $expected = array ( 'phptype' => 'oci8', 'dbsyntax' => 'oci8', 'username' => 'scott', 'password' => 'tiger', 'protocol' => 'tcp', 'hostspec' => '//localhost/XE', 'port' => false, 'socket' => false, 'database' => false, 'mode' => false, ); $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- //ibase dbname+path on windows $original = 'ibase://user:pwd@localhost/C:\\PATH_TO_DB\\TEST.FDB'; $expected = array ( 'phptype' => 'ibase', 'dbsyntax' => 'ibase', 'username' => 'user', 'password' => 'pwd', 'protocol' => 'tcp', 'hostspec' => 'localhost', 'port' => false, 'socket' => false, 'database' => 'C:\\PATH_TO_DB\\TEST.FDB', 'mode' => false, ); $this->assertEquals($expected, MDB2::parseDSN($original)); // --------------------------------------------------------------------- //sqlite dbname+path on unix $original = 'sqlite:////full/unix/path/to/file.db?mode=0666'; $expected = array ( 'phptype' => 'sqlite', 'dbsyntax' => 'sqlite', 'username' => false, 'password' => false, 'protocol' => 'tcp', 'hostspec' => '', 'port' => false, 'socket' => false, 'database' => '/full/unix/path/to/file.db', 'mode' => false, ); $this->assertEquals($expected, MDB2::parseDSN($original)); } //test stuff in common.php function testConnect() { $db =& MDB2::factory($this->dsn, $this->options); if (PEAR::isError($db)) { $this->assertTrue(false, 'Connect failed bailing out - ' .$db->getMessage() . ' - ' .$db->getUserInfo()); } if (PEAR::isError($this->db)) { exit; } } function testGetOption() { if (!$this->methodExists($this->db, 'getOption')) { return; } $option = $this->db->getOption('persistent'); $this->assertEquals($option, $this->db->options['persistent']); } function testSetOption() { if (!$this->methodExists($this->db, 'setOption')) { return; } $option = $this->db->getOption('persistent'); $this->db->setOption('persistent', !$option); $this->assertEquals(!$option, $this->db->getOption('persistent')); $this->db->setOption('persistent', $option); } function testLoadModule() { if (!$this->methodExists($this->db, 'loadModule')) { return; } $this->assertTrue(!PEAR::isError($this->db->loadModule('Manager', null, true))); } // test of the driver // helper function so that we don't have to write out a query a million times function standardQuery() { $query = 'SELECT * FROM users'; // run the query and get a result handler if (!PEAR::isError($this->db)) { return $this->db->query($query); } return false; } function testQuery() { if (!$this->methodExists($this->db, 'query')) { return; } $result = $this->standardQuery(); $this->assertTrue(MDB2::isResult($result), 'query: $result returned is not a resource'); } function testExec() { if (!$this->methodExists($this->db, 'exec')) { return; } $result = $this->db->exec('UPDATE users SET user_name = user_name WHERE user_id = user_id'); $this->assertFalse(PEAR::isError($result), 'exec: $result returned is an error'); $this->assertEquals(0, $result, 'exec: incorrect number of affected rows returned'); } function testFetchRow() { $result = $this->standardQuery(); if (!$this->methodExists($result, 'fetchRow')) { return; } $err = $result->fetchRow(); $result->free(); if (PEAR::isError($err)) { $this->assertTrue(false, 'Error testFetch: '.$err->getMessage().' - '.$err->getUserInfo()); } } function testNumRows() { $result = $this->standardQuery(); if (!$this->methodExists($result, 'numRows')) { return; } $numrows = $result->numRows(); $this->assertTrue(!PEAR::isError($numrows) && is_int($numrows)); $result->free(); } function testNumCols() { $result = $this->standardQuery(); if (!$this->methodExists($result, 'numCols')) { return; } $numcols = $result->numCols(); $this->assertTrue(!PEAR::isError($numcols) && $numcols > 0); $result->free(); } function testSingleton() { $db =& MDB2::singleton(); $this->assertTrue(MDB2::isConnection($db)); // should have a different database name set $db =& MDB2::singleton($this->dsn, $this->options); $this->assertTrue($db->db_index != $this->db->db_index); } function testGetServerVersion() { $server_info = $this->db->getServerVersion(true); if (PEAR::isError($server_info)) { $this->assertTrue(false, 'Error: '.$server_info->getMessage().' - '.$server_info->getUserInfo()); } else { $this->assertTrue(is_string($server_info), 'Error: Server info is not returned as a string: '. serialize($server_info)); } $server_info = $this->db->getServerVersion(); if (PEAR::isError($server_info)) { $this->assertTrue(false, 'Error: '.$server_info->getMessage().' - '.$server_info->getUserInfo()); } else { $this->assertTrue(is_array($server_info), 'Error: Server info is not returned as an array: '. serialize($server_info)); } } } ?>