PMA_VERSION, 'db' => 'pmadb', 'users' => 'users', 'usergroups' => 'usergroups', 'menuswork' => true ); $pmaconfig = $this->getMockBuilder('PMA\libraries\Config') ->disableOriginalConstructor() ->getMock(); $GLOBALS['PMA_Config'] = $pmaconfig; //Mock DBI $dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface') ->disableOriginalConstructor() ->getMock(); $dbi->expects($this->any()) ->method('fetchResult') ->will( $this->returnValue( array( 'grant user1 select', 'grant user2 delete' ) ) ); $fetchSingleRow = array( 'password' => 'pma_password', 'Table_priv' => 'pri1, pri2', 'Type' => 'Type', '@@old_passwords' => 0, ); $dbi->expects($this->any())->method('fetchSingleRow') ->will($this->returnValue($fetchSingleRow)); $fetchValue = array('key1' => 'value1'); $dbi->expects($this->any())->method('fetchValue') ->will($this->returnValue($fetchValue)); $dbi->expects($this->any())->method('tryQuery') ->will($this->returnValue(true)); $dbi->expects($this->any())->method('escapeString') ->will($this->returnArgument(0)); $GLOBALS['dbi'] = $dbi; $GLOBALS['is_superuser'] = true; $GLOBALS['is_grantuser'] = true; $GLOBALS['is_createuser'] = true; $GLOBALS['is_reload_priv'] = true; } /** * Test for PMA_getDataForDBInfo * * @return void */ public function testPMAGetDataForDBInfo() { $_REQUEST['username'] = "PMA_username"; $_REQUEST['hostname'] = "PMA_hostname"; $_REQUEST['tablename'] = "PMA_tablename"; $_REQUEST['dbname'] = "PMA_dbname"; list( $username, $hostname, $dbname, $tablename, $routinename, $db_and_table, $dbname_is_wildcard ) = PMA_getDataForDBInfo(); $this->assertEquals( "PMA_username", $username ); $this->assertEquals( "PMA_hostname", $hostname ); $this->assertEquals( "PMA_dbname", $dbname ); $this->assertEquals( "PMA_tablename", $tablename ); $this->assertEquals( "`PMA_dbname`.`PMA_tablename`", $db_and_table ); $this->assertEquals( true, $dbname_is_wildcard ); //pre variable have been defined $_REQUEST['pred_tablename'] = "PMA_pred__tablename"; $_REQUEST['pred_dbname'] = array("PMA_pred_dbname"); list( ,, $dbname, $tablename, $routinename, $db_and_table, $dbname_is_wildcard ) = PMA_getDataForDBInfo(); $this->assertEquals( "PMA_pred_dbname", $dbname ); $this->assertEquals( "PMA_pred__tablename", $tablename ); $this->assertEquals( "`PMA_pred_dbname`.`PMA_pred__tablename`", $db_and_table ); $this->assertEquals( true, $dbname_is_wildcard ); } /** * Test for PMA_wildcardEscapeForGrant * * @return void */ public function testPMAWildcardEscapeForGrant() { $dbname = ''; $tablename = ''; $db_and_table = PMA_wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '*.*', $db_and_table ); $dbname = 'dbname'; $tablename = ''; $db_and_table = PMA_wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '`dbname`.*', $db_and_table ); $dbname = 'dbname'; $tablename = 'tablename'; $db_and_table = PMA_wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '`dbname`.`tablename`', $db_and_table ); } /** * Test for PMA_rangeOfUsers * * @return void */ public function testPMARangeOfUsers() { $ret = PMA_rangeOfUsers("INIT"); $this->assertEquals( " WHERE `User` LIKE 'INIT%' OR `User` LIKE 'init%'", $ret ); $ret = PMA_rangeOfUsers(); $this->assertEquals( '', $ret ); } /** * Test for PMA_getTableGrantsArray * * @return void */ public function testPMAGetTableGrantsArray() { $GLOBALS['strPrivDescDelete'] = "strPrivDescDelete"; $GLOBALS['strPrivDescCreateTbl'] = "strPrivDescCreateTbl"; $GLOBALS['strPrivDescDropTbl'] = "strPrivDescDropTbl"; $GLOBALS['strPrivDescIndex'] = "strPrivDescIndex"; $GLOBALS['strPrivDescAlter'] = "strPrivDescAlter"; $GLOBALS['strPrivDescCreateView'] = "strPrivDescCreateView"; $GLOBALS['strPrivDescShowView'] = "strPrivDescShowView"; $GLOBALS['strPrivDescTrigger'] = "strPrivDescTrigger"; $ret = PMA_getTableGrantsArray(); $this->assertEquals( array( 'Delete', 'DELETE', $GLOBALS['strPrivDescDelete'] ), $ret[0] ); $this->assertEquals( array( 'Create', 'CREATE', $GLOBALS['strPrivDescCreateTbl'] ), $ret[1] ); } /** * Test for PMA_getGrantsArray * * @return void */ public function testPMAGetGrantsArray() { $ret = PMA_getGrantsArray(); $this->assertEquals( array( 'Select_priv', 'SELECT', __('Allows reading data.') ), $ret[0] ); $this->assertEquals( array( 'Insert_priv', 'INSERT', __('Allows inserting and replacing data.') ), $ret[1] ); } /** * Test for PMA_getHtmlForColumnPrivileges * * @return void */ public function testPMAGetHtmlForColumnPrivileges() { $columns = array( 'row1' => 'name1' ); $row = array( 'name_for_select' => 'Y' ); $name_for_select = 'name_for_select'; $priv_for_header = 'priv_for_header'; $name = 'name'; $name_for_dfn = 'name_for_dfn'; $name_for_current = 'name_for_current'; $html = PMA_getHtmlForColumnPrivileges( $columns, $row, $name_for_select, $priv_for_header, $name, $name_for_dfn, $name_for_current ); //$name $this->assertContains( $name, $html ); //$name_for_dfn $this->assertContains( $name_for_dfn, $html ); //$priv_for_header $this->assertContains( $priv_for_header, $html ); //$name_for_select $this->assertContains( $name_for_select, $html ); //$columns and $row $this->assertContains( htmlspecialchars('row1'), $html ); //$columns and $row $this->assertContains( _pgettext('None privileges', 'None'), $html ); } /** * Test for PMA_getHtmlForUserGroupDialog * * @return void */ public function testPMAGetHtmlForUserGroupDialog() { $username = "pma_username"; $is_menuswork = true; $_REQUEST['edit_user_group_dialog'] = "edit_user_group_dialog"; $GLOBALS['is_ajax_request'] = false; //PMA_getHtmlForUserGroupDialog $html = PMA_getHtmlForUserGroupDialog($username, $is_menuswork); $this->assertContains( '
$username); $html_output = PMA_URL_getHiddenInputs($params); $this->assertContains( $html_output, $html ); //__('User group') $this->assertContains( __('User group'), $html ); } /** * Test for PMA_getHtmlToChooseUserGroup * * @return void */ public function testPMAGetHtmlToChooseUserGroup() { $username = "pma_username"; //PMA_getHtmlToChooseUserGroup $html = PMA_getHtmlToChooseUserGroup($username); $this->assertContains( ' $username); $html_output = PMA_URL_getHiddenInputs($params); $this->assertContains( $html_output, $html ); //__('User group') $this->assertContains( __('User group'), $html ); } /** * Test for PMA_getHtmlForResourceLimits * * @return void */ public function testPMAGetHtmlForResourceLimits() { $row = array( 'max_questions' => 'max_questions', 'max_updates' => 'max_updates', 'max_connections' => 'max_connections', 'max_user_connections' => 'max_user_connections', ); //PMA_getHtmlForResourceLimits $html = PMA_getHtmlForResourceLimits($row); $this->assertContains( '' . __('Resource limits') . '', $html ); $this->assertContains( __('Note: Setting these options to 0 (zero) removes the limit.'), $html ); $this->assertContains( 'MAX QUERIES PER HOUR', $html ); $this->assertContains( $row['max_connections'], $html ); $this->assertContains( $row['max_updates'], $html ); $this->assertContains( $row['max_connections'], $html ); $this->assertContains( $row['max_user_connections'], $html ); $this->assertContains( __('Limits the number of simultaneous connections the user may have.'), $html ); $this->assertContains( __('Limits the number of simultaneous connections the user may have.'), $html ); } /** * Test for PMA_getSqlQueryForDisplayPrivTable * * @return void */ public function testPMAGetSqlQueryForDisplayPrivTable() { $username = "pma_username"; $db = '*'; $table = "pma_table"; $hostname = "pma_hostname"; //$db == '*' $ret = PMA_getSqlQueryForDisplayPrivTable( $db, $table, $username, $hostname ); $sql = "SELECT * FROM `mysql`.`user`" . " WHERE `User` = '" . $GLOBALS['dbi']->escapeString($username) . "'" . " AND `Host` = '" . $GLOBALS['dbi']->escapeString($hostname) . "';"; $this->assertEquals( $sql, $ret ); //$table == '*' $db = "pma_db"; $table = "*"; $ret = PMA_getSqlQueryForDisplayPrivTable( $db, $table, $username, $hostname ); $sql = "SELECT * FROM `mysql`.`db`" . " WHERE `User` = '" . $GLOBALS['dbi']->escapeString($username) . "'" . " AND `Host` = '" . $GLOBALS['dbi']->escapeString($hostname) . "'" . " AND '" . PMA\libraries\Util::unescapeMysqlWildcards($db) . "'" . " LIKE `Db`;"; $this->assertEquals( $sql, $ret ); //$table == 'pma_table' $db = "pma_db"; $table = "pma_table"; $ret = PMA_getSqlQueryForDisplayPrivTable( $db, $table, $username, $hostname ); $sql = "SELECT `Table_priv`" . " FROM `mysql`.`tables_priv`" . " WHERE `User` = '" . $GLOBALS['dbi']->escapeString($username) . "'" . " AND `Host` = '" . $GLOBALS['dbi']->escapeString($hostname) . "'" . " AND `Db` = '" . PMA\libraries\Util::unescapeMysqlWildcards($db) . "'" . " AND `Table_name` = '" . $GLOBALS['dbi']->escapeString($table) . "';"; $this->assertEquals( $sql, $ret ); // SQL escaping $db = "db' AND"; $table = "pma_table"; $ret = PMA_getSqlQueryForDisplayPrivTable( $db, $table, $username, $hostname ); $this->assertEquals( "SELECT `Table_priv` FROM `mysql`.`tables_priv` " . "WHERE `User` = 'pma_username' AND " . "`Host` = 'pma_hostname' AND `Db` = 'db' AND' AND " . "`Table_name` = 'pma_table';", $ret ); } /** * Test for PMA_getDataForChangeOrCopyUser * * @return void */ public function testPMAGetDataForChangeOrCopyUser() { //$_REQUEST['change_copy'] not set list($queries, $password) = PMA_getDataForChangeOrCopyUser(); $this->assertEquals( null, $queries ); $this->assertEquals( null, $queries ); //$_REQUEST['change_copy'] is set $_REQUEST['change_copy'] = true; $_REQUEST['old_username'] = 'PMA_old_username'; $_REQUEST['old_hostname'] = 'PMA_old_hostname'; list($queries, $password) = PMA_getDataForChangeOrCopyUser(); $this->assertEquals( 'pma_password', $password ); $this->assertEquals( array(), $queries ); unset($_REQUEST['change_copy']); } /** * Test for PMA_getListForExportUserDefinition * * @return void */ public function testPMAGetHtmlForExportUserDefinition() { $username = "PMA_username"; $hostname = "PMA_hostname"; list($title, $export) = PMA_getListForExportUserDefinition($username, $hostname); //validate 1: $export $this->assertContains( 'grant user2 delete', $export ); $this->assertContains( 'grant user1 select', $export ); $this->assertContains( '