Initial commit

This commit is contained in:
2022-11-21 09:47:28 +01:00
commit 76cec83d26
11652 changed files with 1980467 additions and 0 deletions

View File

@ -0,0 +1,223 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove()
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
* Test for PMA_arrayRead(), PMA_arrayWrite(), PMA_arrayRemove()
*
* @package PhpMyAdmin-test
*/
class PMA_Array_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_arrayRead
*
* @return void
*/
function testRead()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
$this->assertEquals(
PMA_arrayRead('int', $arr),
$arr['int']
);
$this->assertEquals(
PMA_arrayRead('str', $arr),
$arr['str']
);
$this->assertEquals(
PMA_arrayRead('arr/0', $arr),
$arr['arr'][0]
);
$this->assertEquals(
PMA_arrayRead('arr/1', $arr),
$arr['arr'][1]
);
$this->assertEquals(
PMA_arrayRead('arr/2', $arr),
$arr['arr'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/0', $arr),
$arr['sarr']['arr1'][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/1', $arr),
$arr['sarr']['arr1'][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/arr1/2', $arr),
$arr['sarr']['arr1'][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/0', $arr),
$arr['sarr'][0][0]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1', $arr),
$arr['sarr'][0][1]
);
$this->assertEquals(
PMA_arrayRead('sarr/0/1/2', $arr),
$arr['sarr'][0][1][2]
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr),
null
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 0),
0
);
$this->assertEquals(
PMA_arrayRead('sarr/not_exiting/1', $arr, 'default_val'),
'default_val'
);
}
/**
* Test for PMA_arrayWrite
*
* @return void
*/
function testWrite()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayWrite('int', $arr, 5);
$this->assertEquals($arr['int'], 5);
PMA_arrayWrite('str', $arr, '_str');
$this->assertEquals($arr['str'], '_str');
PMA_arrayWrite('arr/0', $arr, 'val_arr_0');
$this->assertEquals($arr['arr'][0], 'val_arr_0');
PMA_arrayWrite('arr/1', $arr, 'val_arr_1');
$this->assertEquals($arr['arr'][1], 'val_arr_1');
PMA_arrayWrite('arr/2', $arr, 'val_arr_2');
$this->assertEquals($arr['arr'][2], 'val_arr_2');
PMA_arrayWrite('sarr/arr1/0', $arr, 'val_sarr_arr_0');
$this->assertEquals($arr['sarr']['arr1'][0], 'val_sarr_arr_0');
PMA_arrayWrite('sarr/arr1/1', $arr, 'val_sarr_arr_1');
$this->assertEquals($arr['sarr']['arr1'][1], 'val_sarr_arr_1');
PMA_arrayWrite('sarr/arr1/2', $arr, 'val_sarr_arr_2');
$this->assertEquals($arr['sarr']['arr1'][2], 'val_sarr_arr_2');
PMA_arrayWrite('sarr/0/0', $arr, 5);
$this->assertEquals($arr['sarr'][0][0], 5);
PMA_arrayWrite('sarr/0/1/0', $arr, 'e');
$this->assertEquals($arr['sarr'][0][1][0], 'e');
PMA_arrayWrite('sarr/not_existing/1', $arr, 'some_val');
$this->assertEquals($arr['sarr']['not_existing'][1], 'some_val');
PMA_arrayWrite('sarr/0/2', $arr, null);
$this->assertNull($arr['sarr'][0][2]);
}
/**
* Test for PMA_arrayRemove
*
* @return void
*/
function testRemove()
{
$arr = array(
"int" => 1,
"str" => "str_val",
"arr" => array('val1', 'val2', 'val3'),
"sarr" => array(
'arr1' => array(1, 2, 3),
array(3, array('a', 'b', 'c'), 4)
)
);
PMA_arrayRemove('int', $arr);
$this->assertArrayNotHasKey('int', $arr);
PMA_arrayRemove('str', $arr);
$this->assertArrayNotHasKey('str', $arr);
PMA_arrayRemove('arr/0', $arr);
$this->assertArrayNotHasKey(0, $arr['arr']);
PMA_arrayRemove('arr/1', $arr);
$this->assertArrayNotHasKey(1, $arr['arr']);
PMA_arrayRemove('arr/2', $arr);
$this->assertArrayNotHasKey('arr', $arr);
$tmp_arr = $arr;
PMA_arrayRemove('sarr/not_existing/1', $arr);
$this->assertEquals($tmp_arr, $arr);
PMA_arrayRemove('sarr/arr1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr']['arr1']);
PMA_arrayRemove('sarr/arr1/2', $arr);
$this->assertArrayNotHasKey('arr1', $arr['sarr']);
PMA_arrayRemove('sarr/0/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/1/0', $arr);
$this->assertArrayNotHasKey(0, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/1', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0][1]);
PMA_arrayRemove('sarr/0/1/2', $arr);
$this->assertArrayNotHasKey(1, $arr['sarr'][0]);
PMA_arrayRemove('sarr/0/2', $arr);
$this->assertEmpty($arr);
}
}

View File

@ -0,0 +1,68 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_CheckPageValidity_Test extends PHPUnit_Framework_TestCase
{
protected $goto_whitelist = array(
'db_datadict.php',
'db_sql.php',
'db_export.php',
'db_search.php',
'export.php',
'import.php',
'index.php',
'pdf_pages.php',
'pdf_schema.php',
'server_binlog.php',
'server_variables.php',
'sql.php',
'tbl_select.php',
'transformation_overview.php',
'transformation_wrapper.php',
'user_password.php',
);
/**
* Test for PMA_checkPageValidity
*
* @param string $page Page
* @param array|null $whiteList White list
* @param int $expected Expected value
*
* @return void
*
* @dataProvider provider
*/
function testGotoNowhere($page, $whiteList, $expected)
{
$this->assertTrue($expected === PMA_checkPageValidity($page, $whiteList));
}
/**
* Data provider for testGotoNowhere
*
* @return array
*/
public function provider()
{
return array(
array(null, null, false),
array('export.php', $this->goto_whitelist, true),
array('shell.php', $this->goto_whitelist, false),
array('index.php?sql.php&test=true', $this->goto_whitelist, true),
array('index.php%3Fsql.php%26test%3Dtrue', $this->goto_whitelist, true),
);
}
}

View File

@ -0,0 +1,84 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
class PMA_CleanupPathInfo_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_cleanupPathInfo
*
* @param string $php_self The PHP_SELF value
* @param string $request The REQUEST_URI value
* @param string $path_info The PATH_INFO value
* @param string $expected Expected result
*
* @return void
*
* @dataProvider pathsProvider
*/
public function testPahtInfo($php_self, $request, $path_info, $expected)
{
$_SERVER['PHP_SELF'] = $php_self;
$_SERVER['REQUEST_URI'] = $request;
$_SERVER['PATH_INFO'] = $path_info;
PMA_cleanupPathInfo();
$this->assertEquals(
$expected,
$GLOBALS['PMA_PHP_SELF']
);
}
/**
* Data provider for PMA_cleanupPathInfo tests
*
* @return array
*/
public function pathsProvider()
{
return array(
array(
'/phpmyadmin/index.php/; cookieinj=value/',
'/phpmyadmin/index.php/;%20cookieinj=value///',
'/; cookieinj=value/',
'/phpmyadmin/index.php'
),
array(
'',
'/phpmyadmin/index.php/;%20cookieinj=value///',
'/; cookieinj=value/',
'/phpmyadmin/index.php'
),
array(
'/phpmyadmin/index.php',
'/phpmyadmin/index.php',
'',
'/phpmyadmin/index.php'
),
array(
'',
'/phpmyadmin/index.php',
'',
'/phpmyadmin/index.php'
),
);
}
}

View File

@ -0,0 +1,88 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
*
* PMA_fatalError() displays the given error message on phpMyAdmin error page in
* foreign language
* and ends script execution and closes session
*
* @package PhpMyAdmin-test
*/
class PMA_FatalError_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setup()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['Server'] = array(
'host' => 'host',
'verbose' => 'verbose',
);
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
}
/**
* Test for PMA_fatalError
*
* @return void
*/
public function testFatalErrorMessage()
{
$this->expectOutputRegex("/FatalError!/");
PMA_fatalError("FatalError!");
}
/**
* Test for PMA_fatalError
*
* @return void
*/
public function testFatalErrorMessageWithArgs()
{
$message = "Fatal error #%d in file %s.";
$params = array(1, 'error_file.php');
$this->expectOutputRegex("/Fatal error #1 in file error_file.php./");
PMA_fatalError($message, $params);
$message = "Fatal error in file %s.";
$params = 'error_file.php';
$this->expectOutputRegex("/Fatal error in file error_file.php./");
PMA_fatalError($message, $params);
}
}

View File

@ -0,0 +1,76 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/url_generating.lib.php';
/**
*
* @package PhpMyAdmin-test
*/
class PMA_GetLinks_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
function setUp()
{
$GLOBALS['server'] = 99;
$GLOBALS['cfg']['ServerDefault'] = 0;
}
/**
* Test for PMA_getPHPDocLink
*
* @return void
*/
public function testGetPHPDocLink()
{
$lang = _pgettext('PHP documentation language', 'en');
$this->assertEquals(
PMA_getPHPDocLink('function'),
'./url.php?url=https%3A%2F%2Fphp.net%2Fmanual%2F'
. $lang . '%2Ffunction'
);
}
/**
* Data provider for testLinkURL
*
* @return array
*/
public function providerLinkURL()
{
return array(
array('https://wiki.phpmyadmin.net',
'./url.php?url=https%3A%2F%2Fwiki.phpmyadmin.net'),
array('https://wiki.phpmyadmin.net',
'./url.php?url=https%3A%2F%2Fwiki.phpmyadmin.net'),
array('wiki.phpmyadmin.net', 'wiki.phpmyadmin.net'),
array('index.php?db=phpmyadmin', 'index.php?db=phpmyadmin')
);
}
/**
* Test for PMA_linkURL
*
* @param string $link URL where to go
* @param string $url Expected value
*
* @return void
*
* @dataProvider providerLinkURL
*/
public function testLinkURL($link, $url)
{
$this->assertEquals(PMA_linkURL($link), $url);
}
}

View File

@ -0,0 +1,65 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_getTableCount_test returns count of tables in given db
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/select_lang.inc.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/config.default.php';
require_once 'libraries/url_generating.lib.php';
require_once 'libraries/database_interface.inc.php';
require_once 'config.sample.inc.php';
/**
* PMA_getTableCount_test returns count of tables in given db
*
* @package PhpMyAdmin-test
*/
class PMA_GetTableCount_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setUp()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
}
/**
* Test for PMA_getTableCount
*
* @return void
*/
function testTableCount()
{
$GLOBALS['cfg']['Server']['host'] = 'localhost';
$GLOBALS['cfg']['Server']['user'] = 'root';
$this->assertEquals(5, PMA_getTableCount('meddb'));
}
}

View File

@ -0,0 +1,50 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_GetRealSize_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for
*
* @param string $size Size
* @param int $expected Expected value
*
* @return void
*
* @dataProvider provider
*/
public function testNull($size, $expected)
{
$this->assertEquals($expected, PMA_getRealSize($size));
}
/**
* Data provider for testExtractValueFromFormattedSize
*
* @return array
*/
public function provider()
{
return array(
array('0', 0),
array('1kb', 1024),
array('1024k', 1024 * 1024),
array('8m', 8 * 1024 * 1024),
array('12gb', 12 * 1024 * 1024 * 1024),
array('1024', 1024),
);
}
}

View File

@ -0,0 +1,224 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_sendHeaderLocation
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
require_once 'libraries/url_generating.lib.php';
/**
* Test function sending headers.
* Warning - these tests set constants, so it can interfere with other tests
* If you have runkit extension, then it is possible to back changes made on
* constants rest of options can be tested only with apd, when functions header
* and headers_sent are redefined rename_function() of header and headers_sent
* may cause CLI error report in Windows XP (but tests are done correctly)
* additional functions which were created during tests must be stored to
* coverage test e.g.
*
* <code>
* rename_function(
* 'headers_sent',
* 'headers_sent'.str_replace(array('.', ' '),array('', ''),microtime())
* );
* </code>
*
* @package PhpMyAdmin-test
*/
class PMA_HeaderLocation_Test extends PHPUnit_Framework_TestCase
{
protected $oldIISvalue;
protected $runkitExt;
protected $apdExt;
/**
* Set up
*
* @return void
*/
public function setUp()
{
//session_start();
// cleaning constants
if (PMA_HAS_RUNKIT) {
$this->oldIISvalue = 'non-defined';
$defined_constants = get_defined_constants(true);
$user_defined_constants = $defined_constants['user'];
if (array_key_exists('PMA_IS_IIS', $user_defined_constants)) {
$this->oldIISvalue = PMA_IS_IIS;
runkit_constant_redefine('PMA_IS_IIS', null);
} else {
runkit_constant_add('PMA_IS_IIS', null);
}
}
$_SESSION['PMA_Theme'] = Theme::load('./themes/pmahomme');
$GLOBALS['server'] = 0;
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
}
/**
* Tear down
*
* @return void
*/
public function tearDown()
{
//session_destroy();
// cleaning constants
if (PMA_HAS_RUNKIT) {
if ($this->oldIISvalue != 'non-defined') {
runkit_constant_redefine('PMA_IS_IIS', $this->oldIISvalue);
} elseif (defined('PMA_IS_IIS')) {
runkit_constant_remove('PMA_IS_IIS');
}
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationWithoutSidWithIis()
{
if (defined('PMA_TEST_HEADERS')) {
runkit_constant_redefine('PMA_IS_IIS', true);
$testUri = 'https://example.com/test.php';
$header = array('Location: ' . $testUri);
PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
//reset $GLOBALS['header'] for the next assertion
unset($GLOBALS['header']);
$header = array('Refresh: 0; ' . $testUri);
PMA_sendHeaderLocation($testUri, true); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
} else {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationWithoutSidWithoutIis()
{
if (defined('PMA_TEST_HEADERS')) {
$testUri = 'https://example.com/test.php';
$header = array('Location: ' . $testUri);
PMA_sendHeaderLocation($testUri); // sets $GLOBALS['header']
$this->assertEquals($header, $GLOBALS['header']);
} else {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
}
/**
* Test for PMA_sendHeaderLocation
*
* @return void
*/
public function testSendHeaderLocationIisLongUri()
{
if (defined('PMA_IS_IIS') && PMA_HAS_RUNKIT) {
runkit_constant_redefine('PMA_IS_IIS', true);
} elseif (!defined('PMA_IS_IIS')) {
define('PMA_IS_IIS', true);
} elseif (! PMA_IS_IIS) {
$this->markTestSkipped(
'Cannot redefine constant/function - missing runkit extension'
);
}
// over 600 chars
$testUri = 'https://example.com/test.php?testlonguri=over600chars&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test&test=test&test=test&test=test&test=test'
. '&test=test&test=test';
$testUri_html = htmlspecialchars($testUri);
$testUri_js = PMA_escapeJsString($testUri);
$header = "<html>\n<head>\n <title>- - -</title>
<meta http-equiv=\"expires\" content=\"0\">"
. "\n <meta http-equiv=\"Pragma\" content=\"no-cache\">"
. "\n <meta http-equiv=\"Cache-Control\" content=\"no-cache\">"
. "\n <meta http-equiv=\"Refresh\" content=\"0;url=" . $testUri_html . "\">"
. "\n <script type=\"text/javascript\">\n //<![CDATA[
setTimeout(\"window.location = decodeURI('" . $testUri_js . "')\", 2000);
//]]>\n </script>\n</head>
<body>\n<script type=\"text/javascript\">\n //<![CDATA[
document.write('<p><a href=\"" . $testUri_html . "\">" . __('Go') . "</a></p>');
//]]>\n</script>\n</body>\n</html>
";
$this->expectOutputString($header);
$restoreInstance = PMA\libraries\Response::getInstance();
$mockResponse = $this->getMockBuilder('PMA\libraries\Response')
->disableOriginalConstructor()
->setMethods(array('disable', 'header', 'headersSent'))
->getMock();
$mockResponse->expects($this->once())
->method('disable');
$mockResponse->expects($this->any())
->method('headersSent')
->with()
->will($this->returnValue(false));
$attrInstance = new ReflectionProperty('PMA\libraries\Response', '_instance');
$attrInstance->setAccessible(true);
$attrInstance->setValue($mockResponse);
PMA_sendHeaderLocation($testUri);
$attrInstance->setValue($restoreInstance);
}
}

View File

@ -0,0 +1,69 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_IfSetOr_Test extends PHPUnit_Framework_TestCase
{
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarSet()
{
$default = 'foo';
$in = 'bar';
$out = PMA_ifSetOr($in, $default);
$this->assertEquals($in, $out);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarSetWrongType()
{
$default = 'foo';
$in = 'bar';
$out = PMA_ifSetOr($in, $default, 'boolean');
$this->assertEquals($out, $default);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarNotSet()
{
$default = 'foo';
// $in is not set!
$out = PMA_ifSetOr($in, $default);
$this->assertEquals($out, $default);
}
/**
* Test for PMA_ifSetOr
*
* @return void
*/
public function testVarNotSetNoDefault()
{
// $in is not set!
$out = PMA_ifSetOr($in);
$this->assertEquals($out, null);
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_isAllowedDomain
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_isAllowedDomain_test extends PHPUnit_Framework_TestCase
{
/**
* Test for unserializing
*
* @param string $url URL to test
* @param mixed $expected Expected result
*
* @return void
*
* @dataProvider provideURLs
*/
function testIsAllowedDomain($url, $expected)
{
$_SERVER['SERVER_NAME'] = 'server.local';
$this->assertEquals(
$expected,
PMA_isAllowedDomain($url)
);
}
/**
* Test data provider
*
* @return array
*/
function provideURLs()
{
return array(
array('https://www.phpmyadmin.net/', true),
array('http://duckduckgo.com\\@github.com', false),
array('https://github.com/', true),
array('https://github.com:123/', false),
array('https://user:pass@github.com:123/', false),
array('https://user:pass@github.com/', false),
array('https://server.local/', true),
array('./relative/', false),
);
}
}

View File

@ -0,0 +1,343 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
/**
*
* @package PhpMyAdmin-test
*/
class PMA_IsValid_Test extends PHPUnit_Framework_TestCase
{
/**
* Data provider for testNoVarType
*
* @return array
*/
public static function providerNoVarTypeProvider()
{
return array(
array(0, false, 0),
array(0, false, 1),
array(1, false, null),
array(1.1, false, null),
array('', false, null),
array(' ', false, null),
array('0', false, null),
array('string', false, null),
array(array(), false, null),
array(array(1, 2, 3), false, null),
array(true, false, null),
array(false, false, null));
}
/**
* Test for PMA_isValid
*
* @param mixed $var Variable to check
* @param mixed $type Type
* @param mixed $compare Compared value
*
* @return void
*
* @dataProvider providerNoVarTypeProvider
*/
public function testNoVarType($var, $type, $compare)
{
$this->assertTrue(PMA_isValid($var, $type, $compare));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testVarNotSetAfterTest()
{
PMA_isValid($var);
$this->assertFalse(isset($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotSet()
{
$this->assertFalse(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testEmptyString()
{
$var = '';
$this->assertFalse(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotEmptyString()
{
$var = '0';
$this->assertTrue(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testZero()
{
$var = 0;
$this->assertTrue(PMA_isValid($var));
$this->assertTrue(PMA_isValid($var, 'int'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNullFail()
{
$var = null;
$this->assertFalse(PMA_isValid($var));
$var = 'null_text';
$this->assertFalse(PMA_isValid($var, 'null'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotSetArray()
{
/** @var $array undefined array */
$this->assertFalse(PMA_isValid($array['x']));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarString()
{
$var = 'string';
$this->assertTrue(PMA_isValid($var, 'len'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
$this->assertTrue(PMA_isValid($var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarInt()
{
$var = 1;
$this->assertTrue(PMA_isValid($var, 'int'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarFloat()
{
$var = 1.1;
$this->assertTrue(PMA_isValid($var, 'float'));
$this->assertTrue(PMA_isValid($var, 'double'));
$this->assertTrue(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testScalarBool()
{
$var = true;
$this->assertTrue(PMA_isValid($var, 'scalar'));
$this->assertTrue(PMA_isValid($var, 'bool'));
$this->assertTrue(PMA_isValid($var, 'boolean'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotScalarArray()
{
$var = array('test');
$this->assertFalse(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNotScalarNull()
{
$var = null;
$this->assertFalse(PMA_isValid($var, 'scalar'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericInt()
{
$var = 1;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericFloat()
{
$var = 1.1;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericZero()
{
$var = 0;
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericString()
{
$var = '+0.1';
$this->assertTrue(PMA_isValid($var, 'numeric'));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testValueInArray()
{
$var = 'a';
$this->assertTrue(PMA_isValid($var, array('a', 'b',)));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testValueNotInArray()
{
$var = 'c';
$this->assertFalse(PMA_isValid($var, array('a', 'b',)));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testNumericIdentical()
{
$var = 1;
$compare = 1;
$this->assertTrue(PMA_isValid($var, 'identic', $compare));
$var = 1;
$compare += 2;
$this->assertFalse(PMA_isValid($var, 'identic', $compare));
$var = 1;
$compare = '1';
$this->assertFalse(PMA_isValid($var, 'identic', $compare));
}
/**
* Data provider for testSimilarType
*
* @return array
*/
public function providerSimilarType()
{
return array(
array(1, 1),
array(1.5, 1.5),
array(true, true),
array('string', "string"),
array(array(1, 2, 3.4), array(1, 2, 3.4)),
array(array(1, '2', '3.4', 5, 'text'), array('1', '2', 3.4,'5'))
);
}
/**
* Test for PMA_isValid
*
* @param mixed $var Variable
* @param mixed $compare Compare
*
* @return void
*
* @dataProvider providerSimilarType
*/
public function testSimilarType($var, $compare)
{
$this->assertTrue(PMA_isValid($var, 'similar', $compare));
$this->assertTrue(PMA_isValid($var, 'equal', $compare));
$this->assertTrue(PMA_isValid($compare, 'similar', $var));
$this->assertTrue(PMA_isValid($compare, 'equal', $var));
}
/**
* Test for PMA_isValid
*
* @return void
*/
public function testOtherTypes()
{
$var = new PMA_isValid_test();
$this->assertFalse(PMA_isValid($var, 'class'));
}
}

View File

@ -0,0 +1,56 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_safeUnserialize
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_safeUnserialize_test extends PHPUnit_Framework_TestCase
{
/**
* Test for unserializing
*
* @param string $data Serialized data
* @param mixed $expected Expected result
*
* @return void
*
* @dataProvider provideMySQLHosts
*/
function testSanitizeMySQLHost($data, $expected)
{
$this->assertEquals(
$expected,
PMA_safeUnserialize($data)
);
}
/**
* Test data provider
*
* @return array
*/
function provideMySQLHosts()
{
return array(
array('s:6:"foobar";', 'foobar'),
array('foobar', null),
array('b:0;', false),
array('O:1:"a":1:{s:5:"value";s:3:"100";}', null),
array('O:8:"stdClass":1:{s:5:"field";O:8:"stdClass":0:{}}', null),
array('a:2:{i:0;s:90:"1234567890;a345678901234567890123456789012345678901234567890123456789012345678901234567890";i:1;O:8:"stdClass":0:{}}', null),
array(serialize(array(1, 2, 3)), array(1, 2, 3)),
array(serialize('string""'), 'string""'),
array(serialize(array('foo' => 'bar')), array('foo' => 'bar')),
array(serialize(array('1', new stdClass(), '2')), null),
);
}
}

View File

@ -0,0 +1,49 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* Test for PMA_sanitizeMySQLHost
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
require_once 'libraries/core.lib.php';
class PMA_sanitizeMySQLHost_test extends PHPUnit_Framework_TestCase
{
/**
* Test for MySQL host sanitizing
*
* @param string $host Test host name
* @param string $expected Expected result
*
* @return void
*
* @dataProvider provideMySQLHosts
*/
function testSanitizeMySQLHost($host, $expected)
{
$this->assertEquals(
$expected,
PMA_sanitizeMySQLHost($host)
);
}
/**
* Test data provider
*
* @return array
*/
function provideMySQLHosts()
{
return array(
array('p:foo.bar', 'foo.bar'),
array('p:p:foo.bar', 'foo.bar'),
array('bar.baz', 'bar.baz'),
array('P:example.com', 'example.com'),
);
}
}

View File

@ -0,0 +1,38 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_securePath changes .. to .
*
* @package PhpMyAdmin-test
*/
/**
* Test for securing path.
*
* @package PhpMyAdmin-test
*/
class PMA_SecurePath extends PHPUnit_Framework_TestCase
{
/**
* Test for replacing dots.
*
* @return void
*/
public function testReplaceDots()
{
$this->assertEquals(
PMA_securePath('../../../etc/passwd'),
'./././etc/passwd'
);
$this->assertEquals(
PMA_securePath('/var/www/../phpmyadmin'),
'/var/www/./phpmyadmin'
);
$this->assertEquals(
PMA_securePath('./path/with..dots/../../file..php'),
'./path/with.dots/././file.php'
);
}
}

View File

@ -0,0 +1,89 @@
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
* PMA_warnMissingExtension warns or fails on missing extension.
*
* @package PhpMyAdmin-test
*/
/*
* Include to test.
*/
use PMA\libraries\Theme;
require_once 'libraries/js_escape.lib.php';
require_once 'libraries/sanitizing.lib.php';
/**
* PMA_warnMissingExtension warns or fails on missing extension.
*
* @package PhpMyAdmin-test
*/
class PMA_WarnMissingExtension_Test extends PHPUnit_Framework_TestCase
{
/**
* Set up
*
* @return void
*/
public function setUp()
{
$GLOBALS['PMA_Config'] = new PMA\libraries\Config();
$GLOBALS['PMA_Config']->enableBc();
$GLOBALS['cfg']['Server'] = array(
'host' => 'host',
'verbose' => 'verbose',
);
$GLOBALS['cfg']['OBGzip'] = false;
$_SESSION['PMA_Theme'] = new Theme();
$GLOBALS['pmaThemeImage'] = 'theme/';
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
$GLOBALS['server'] = 1;
$GLOBALS['db'] = '';
$GLOBALS['table'] = '';
include_once './libraries/ErrorHandler.php';
$GLOBALS['error_handler'] = new PMA\libraries\ErrorHandler();
}
/**
* Test for PMA_warnMissingExtension
*
* @return void
*/
function testMissingExtensionFatal()
{
$ext = 'php_ext';
$warn = 'The <a href="' . PMA_getPHPDocLink('book.' . $ext . '.php')
. '" target="Documentation"><em>' . $ext
. '</em></a> extension is missing. Please check your PHP configuration.';
$this->expectOutputRegex('@' . preg_quote($warn, '@') . '@');
PMA_warnMissingExtension($ext, true);
}
/**
* Test for PMA_warnMissingExtension
*
* @return void
*/
function testMissingExtensionFatalWithExtra()
{
$ext = 'php_ext';
$extra = 'Appended Extra String';
$warn = 'The <a href="' . PMA_getPHPDocLink('book.' . $ext . '.php')
. '" target="Documentation"><em>' . $ext
. '</em></a> extension is missing. Please check your PHP configuration.'
. ' ' . $extra;
ob_start();
PMA_warnMissingExtension($ext, true, $extra);
$printed = ob_get_contents();
ob_end_clean();
$this->assertGreaterThan(0, mb_strpos($printed, $warn));
}
}