enableBc(); $GLOBALS['cfg']['Server']['DisableIS'] = false; $GLOBALS['cfgRelation'] = []; $GLOBALS['cfgRelation']['menuswork'] = false; $GLOBALS['table'] = 'table'; $GLOBALS['server'] = 1; $GLOBALS['db'] = 'db'; $GLOBALS['hostname'] = 'hostname'; $GLOBALS['username'] = 'username'; $relation = new Relation($GLOBALS['dbi']); $this->serverPrivileges = new Privileges( new Template(), $GLOBALS['dbi'], $relation, new RelationCleanup($GLOBALS['dbi'], $relation) ); //$_POST $_POST['pred_password'] = 'none'; //$_SESSION $_SESSION['relation'][$GLOBALS['server']] = [ 'PMA_VERSION' => PMA_VERSION, 'db' => 'pmadb', 'users' => 'users', 'usergroups' => 'usergroups', 'menuswork' => true, 'trackingwork' => true, 'tracking' => 'tracking', ]; $pmaconfig = $this->getMockBuilder(Config::class) ->disableOriginalConstructor() ->getMock(); $GLOBALS['PMA_Config'] = $pmaconfig; //Mock DBI $dbi = $this->getMockBuilder(DatabaseInterface::class) ->disableOriginalConstructor() ->getMock(); $dbi->expects($this->any()) ->method('fetchResult') ->will( $this->returnValue( [ 'grant user1 select', 'grant user2 delete', ] ) ); $fetchSingleRow = [ 'password' => 'pma_password', 'Table_priv' => 'pri1, pri2', 'Type' => 'Type', '@@old_passwords' => 0, ]; $dbi->expects($this->any())->method('fetchSingleRow') ->will($this->returnValue($fetchSingleRow)); $fetchValue = ['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)); $dbi->expects($this->any())->method('isCreateUser') ->will($this->returnValue(true)); $dbi->expects($this->any())->method('isGrantUser') ->will($this->returnValue(true)); $GLOBALS['dbi'] = $dbi; $this->serverPrivileges->dbi = $dbi; $this->serverPrivileges->relation->dbi = $dbi; $GLOBALS['is_reload_priv'] = true; } /** * Test for getDataForDBInfo */ public function testGetDataForDBInfo(): void { $_REQUEST['username'] = 'PMA_username'; $_REQUEST['hostname'] = 'PMA_hostname'; $_REQUEST['tablename'] = 'PMA_tablename'; $_REQUEST['dbname'] = 'PMA_dbname'; [ $username, $hostname, $dbname, $tablename, $routinename, $db_and_table, $dbname_is_wildcard, ] = $this->serverPrivileges->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->assertTrue( $dbname_is_wildcard ); //pre variable have been defined $_POST['pred_tablename'] = 'PMA_pred__tablename'; $_POST['pred_dbname'] = ['PMA_pred_dbname']; [,, $dbname, $tablename, $routinename, $db_and_table, $dbname_is_wildcard, ] = $this->serverPrivileges->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->assertTrue( $dbname_is_wildcard ); // Escaped database $_POST['pred_tablename'] = 'PMA_pred__tablename'; $_POST['pred_dbname'] = ['PMA\_pred\_dbname']; [,, $dbname, $tablename, $routinename, $db_and_table, $dbname_is_wildcard, ] = $this->serverPrivileges->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( false, $dbname_is_wildcard ); } /** * Test for wildcardEscapeForGrant */ public function testWildcardEscapeForGrant(): void { $dbname = ''; $tablename = ''; $db_and_table = $this->serverPrivileges->wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '*.*', $db_and_table ); $dbname = 'dbname'; $tablename = ''; $db_and_table = $this->serverPrivileges->wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '`dbname`.*', $db_and_table ); $dbname = 'dbname'; $tablename = 'tablename'; $db_and_table = $this->serverPrivileges->wildcardEscapeForGrant($dbname, $tablename); $this->assertEquals( '`dbname`.`tablename`', $db_and_table ); } /** * Test for rangeOfUsers */ public function testRangeOfUsers(): void { $ret = $this->serverPrivileges->rangeOfUsers('INIT'); $this->assertEquals( " WHERE `User` LIKE 'INIT%' OR `User` LIKE 'init%'", $ret ); $ret = $this->serverPrivileges->rangeOfUsers(); $this->assertEquals( '', $ret ); } /** * Test for getTableGrantsArray */ public function testGetTableGrantsArray(): void { $ret = $this->serverPrivileges->getTableGrantsArray(); $this->assertEquals( [ 'Delete', 'DELETE', __('Allows deleting data.'), ], $ret[0] ); $this->assertEquals( [ 'Create', 'CREATE', __('Allows creating new tables.'), ], $ret[1] ); } /** * Test for getGrantsArray */ public function testGetGrantsArray(): void { $ret = $this->serverPrivileges->getGrantsArray(); $this->assertEquals( [ 'Select_priv', 'SELECT', __('Allows reading data.'), ], $ret[0] ); $this->assertEquals( [ 'Insert_priv', 'INSERT', __('Allows inserting and replacing data.'), ], $ret[1] ); } /** * Test for getHtmlToChooseUserGroup */ public function testGetHtmlToChooseUserGroup(): void { $username = 'pma_username'; $html = $this->serverPrivileges->getHtmlToChooseUserGroup($username); $this->assertStringContainsString( '