phpmyadmin/test/classes/DatabaseInterfaceTest.php
Michal Čihař 34795cd742 Do not use intdiv() it's PHP 7 only
Signed-off-by: Michal Čihař <michal@cihar.com>
2017-04-11 17:37:04 +02:00

420 lines
11 KiB
PHP

<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for faked database access
*
* @package PhpMyAdmin-test
*/
use PMA\libraries\DatabaseInterface;
use PMA\libraries\Util;
require_once 'test/PMATestCase.php';
/**
* Tests basic functionality of dummy dbi driver
*
* @package PhpMyAdmin-test
*/
class DatabaseInterfaceTest extends PMATestCase
{
private $_dbi;
/**
* Configures test parameters.
*
* @return void
*/
function setup()
{
$extension = new PMA\libraries\dbi\DBIDummy();
$this->_dbi = new PMA\libraries\DatabaseInterface($extension);
}
/**
* Tests for DBI::getCurrentUser() method.
*
* @return void
* @test
* @dataProvider currentUserData
*/
public function testGetCurrentUser($value, $string, $expected)
{
Util::cacheUnset('mysql_cur_user');
$extension = new PMA\libraries\dbi\DBIDummy();
$extension->setResult('SELECT CURRENT_USER();', $value);
$dbi = new PMA\libraries\DatabaseInterface($extension);
$this->assertEquals(
$expected,
$dbi->getCurrentUserAndHost()
);
$this->assertEquals(
$string,
$dbi->getCurrentUser()
);
}
/**
* Data provider for getCurrentUser() tests.
*
* @return array
*/
public function currentUserData()
{
return array(
array(array(array('pma@localhost')), 'pma@localhost', array('pma', 'localhost')),
array(array(array('@localhost')), '@localhost', array('', 'localhost')),
array(false, '@', array('', '')),
);
}
/**
* Tests for DBI::getColumnMapFromSql() method.
*
* @return void
* @test
*/
public function testPMAGetColumnMap()
{
$extension = $this->getMockBuilder('PMA\libraries\dbi\DBIDummy')
->disableOriginalConstructor()
->getMock();
$extension->expects($this->any())
->method('realQuery')
->will($this->returnValue(true));
$meta1 = new FieldMeta();
$meta1->table = "meta1_table";
$meta1->name = "meta1_name";
$meta2 = new FieldMeta();
$meta2->table = "meta2_table";
$meta2->name = "meta2_name";
$extension->expects($this->any())
->method('getFieldsMeta')
->will(
$this->returnValue(
array(
$meta1, $meta2
)
)
);
$dbi = new PMA\libraries\DatabaseInterface($extension);
$sql_query = "PMA_sql_query";
$view_columns = array(
"view_columns1", "view_columns2"
);
$column_map = $dbi->getColumnMapFromSql(
$sql_query, $view_columns
);
$this->assertEquals(
array(
'table_name' => 'meta1_table',
'refering_column' => 'meta1_name',
'real_column' => 'view_columns1'
),
$column_map[0]
);
$this->assertEquals(
array(
'table_name' => 'meta2_table',
'refering_column' => 'meta2_name',
'real_column' => 'view_columns2'
),
$column_map[1]
);
}
/**
* Tests for DBI::getSystemDatabase() method.
*
* @return void
* @test
*/
public function testGetSystemDatabase()
{
$sd = $this->_dbi->getSystemDatabase();
$this->assertInstanceOf('PMA\libraries\SystemDatabase', $sd);
}
/**
* Test for getDbCollation
*
* @return void
* @test
*/
public function testGetDbCollation()
{
$GLOBALS['server'] = 1;
// test case for system schema
$this->assertEquals(
'utf8_general_ci',
$this->_dbi->getDbCollation("information_schema")
);
$GLOBALS['cfg']['Server']['DisableIS'] = false;
$GLOBALS['cfg']['DBG']['sql'] = false;
$this->assertEquals(
'utf8_general_ci',
$this->_dbi->getDbCollation('pma_test')
);
}
/**
* Test for getServerCollation
*
* @return void
* @test
*/
public function testGetServerCollation()
{
$GLOBALS['server'] = 1;
$GLOBALS['cfg']['DBG']['sql'] = true;
$this->assertEquals('utf8_general_ci', $this->_dbi->getServerCollation());
}
/**
* Test for getConnectionParams
*
* @param array $server_cfg Server configuration
* @param integer $mode Mode to test
* @param array|null $server Server array to test
* @param array $expected Expected result
*
* @return void
*
* @dataProvider connectionParams
*/
public function testGetConnectionParams($server_cfg, $mode, $server, $expected)
{
$GLOBALS['cfg']['Server'] = $server_cfg;
$result = $this->_dbi->getConnectionParams($mode, $server);
$this->assertEquals($expected, $result);
}
/**
* Data provider for getConnectionParams test
*
* @return array
*/
public function connectionParams()
{
$cfg_basic = array(
'user' => 'u',
'password' => 'pass',
'host' => '',
'controluser' => 'u2',
'controlpass' => 'p2',
);
$cfg_ssl = array(
'user' => 'u',
'password' => 'pass',
'host' => '',
'ssl' => true,
'controluser' => 'u2',
'controlpass' => 'p2',
);
$cfg_control_ssl = array(
'user' => 'u',
'password' => 'pass',
'host' => '',
'control_ssl' => true,
'controluser' => 'u2',
'controlpass' => 'p2',
);
return array(
array(
$cfg_basic,
DatabaseInterface::CONNECT_USER,
null,
array(
'u',
'pass',
array(
'user' => 'u',
'password' => 'pass',
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => false,
'compress' => false,
'controluser' => 'u2',
'controlpass' => 'p2',
)
),
),
array(
$cfg_basic,
DatabaseInterface::CONNECT_CONTROL,
null,
array(
'u2',
'p2',
array(
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => false,
'compress' => false,
)
),
),
array(
$cfg_ssl,
DatabaseInterface::CONNECT_USER,
null,
array(
'u',
'pass',
array(
'user' => 'u',
'password' => 'pass',
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => true,
'compress' => false,
'controluser' => 'u2',
'controlpass' => 'p2',
)
),
),
array(
$cfg_ssl,
DatabaseInterface::CONNECT_CONTROL,
null,
array(
'u2',
'p2',
array(
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => true,
'compress' => false,
)
),
),
array(
$cfg_control_ssl,
DatabaseInterface::CONNECT_USER,
null,
array(
'u',
'pass',
array(
'user' => 'u',
'password' => 'pass',
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => false,
'compress' => false,
'controluser' => 'u2',
'controlpass' => 'p2',
'control_ssl' => true,
)
),
),
array(
$cfg_control_ssl,
DatabaseInterface::CONNECT_CONTROL,
null,
array(
'u2',
'p2',
array(
'host' => 'localhost',
'socket' => null,
'port' => 0,
'ssl' => true,
'compress' => false,
)
),
),
);
}
/**
* Test error formatting
*
* @param int $error_number Error code
* @param string $error_message Error message as returned by server
* @param string $match Expected text
*
* @dataProvider errorData
*/
public function testFormatError($error_number, $error_message, $match)
{
$this->assertContains(
$match,
DatabaseInterface::formatError($error_number, $error_message)
);
}
public function errorData()
{
return array(
array(2002, 'msg', 'The server is not responding'),
array(2003, 'msg', 'The server is not responding'),
array(1698, 'msg', 'logout.php'),
array(1005, 'msg', 'server_engines.php'),
array(1005, 'errno: 13', 'Please check privileges'),
array(-1, 'error message', 'error message'),
);
}
/**
* Test for version parsing
*
* @param string $version version to parse
* @param int $expected expected numeric version
* @param int $major expected major version
* @param bool $upgrade whether upgrade should ne needed
*
* @return void
*
* @dataProvider versionData
*/
public function testVersion($version, $expected, $major, $upgrade)
{
$ver_int = DatabaseInterface::versionToInt($version);
$this->assertEquals($expected, $ver_int);
$this->assertEquals($major, (int)($ver_int / 10000));
$this->assertEquals($upgrade, $ver_int < $GLOBALS['cfg']['MysqlMinVersion']['internal']);
}
public function versionData()
{
return array(
array('5.0.5', 50005, 5, true),
array('5.05.01', 50501, 5, false),
array('5.6.35', 50635, 5, false),
array('10.1.22-MariaDB-', 100122, 10, false),
);
}
}
/**
* class for Table Field Meta
*
* @package PhpMyAdmin-test
*/
class FieldMeta
{
public $table;
public $name;
}