Initial commit
This commit is contained in:
120
#pma/test/libraries/rte/PMA_EVN_getDataFromRequest_test.php
Normal file
120
#pma/test/libraries/rte/PMA_EVN_getDataFromRequest_test.php
Normal file
@ -0,0 +1,120 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for fetching event data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_events.lib.php';
|
||||
|
||||
/**
|
||||
* Test for fetching event data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_EVN_GetDataFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for PMA_EVN_getDataFromRequest
|
||||
*
|
||||
* @param array $in Input
|
||||
* @param array $out Expected output
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetDataFromRequestEmpty($in, $out)
|
||||
{
|
||||
global $_REQUEST;
|
||||
|
||||
unset($_REQUEST);
|
||||
foreach ($in as $key => $value) {
|
||||
if ($value !== '') {
|
||||
$_REQUEST[$key] = $value;
|
||||
}
|
||||
}
|
||||
$this->assertEquals($out, PMA_EVN_getDataFromRequest());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetDataFromRequest_empty
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_type' => '',
|
||||
'item_original_name' => '',
|
||||
'item_status' => '',
|
||||
'item_execute_at' => '',
|
||||
'item_interval_value' => '',
|
||||
'item_interval_field' => '',
|
||||
'item_starts' => '',
|
||||
'item_ends' => '',
|
||||
'item_definition' => '',
|
||||
'item_preserve' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => ''
|
||||
),
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_type' => 'ONE TIME',
|
||||
'item_type_toggle' => 'RECURRING',
|
||||
'item_original_name' => '',
|
||||
'item_status' => '',
|
||||
'item_execute_at' => '',
|
||||
'item_interval_value' => '',
|
||||
'item_interval_field' => '',
|
||||
'item_starts' => '',
|
||||
'item_ends' => '',
|
||||
'item_definition' => '',
|
||||
'item_preserve' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => ''
|
||||
)
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'foo',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_original_name' => 'foo',
|
||||
'item_status' => 'foo',
|
||||
'item_execute_at' => 'foo',
|
||||
'item_interval_value' => 'foo',
|
||||
'item_interval_field' => 'foo',
|
||||
'item_starts' => 'foo',
|
||||
'item_ends' => 'foo',
|
||||
'item_definition' => 'foo',
|
||||
'item_preserve' => 'foo',
|
||||
'item_comment' => 'foo',
|
||||
'item_definer' => 'foo'
|
||||
),
|
||||
array(
|
||||
'item_name' => 'foo',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_type_toggle' => 'ONE TIME',
|
||||
'item_original_name' => 'foo',
|
||||
'item_status' => 'foo',
|
||||
'item_execute_at' => 'foo',
|
||||
'item_interval_value' => 'foo',
|
||||
'item_interval_field' => 'foo',
|
||||
'item_starts' => 'foo',
|
||||
'item_ends' => 'foo',
|
||||
'item_definition' => 'foo',
|
||||
'item_preserve' => 'foo',
|
||||
'item_comment' => 'foo',
|
||||
'item_definer' => 'foo'
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
285
#pma/test/libraries/rte/PMA_EVN_getEditorForm_test.php
Normal file
285
#pma/test/libraries/rte/PMA_EVN_getEditorForm_test.php
Normal file
@ -0,0 +1,285 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating event editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_events.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating event editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_EVN_GetEditorForm_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$GLOBALS['tear_down']['server'] = false;
|
||||
if (! isset($GLOBALS['cfg']['ServerDefault'])) {
|
||||
$GLOBALS['cfg']['ServerDefault'] = '';
|
||||
$GLOBALS['tear_down']['server'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Tear down
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function tearDown()
|
||||
{
|
||||
if ($GLOBALS['tear_down']['server']) {
|
||||
unset($GLOBALS['cfg']['ServerDefault']);
|
||||
}
|
||||
unset($GLOBALS['tear_down']);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_EVN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerAdd
|
||||
*/
|
||||
public function testgetEditorFormAdd($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_EVN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_EVN_getEditorForm('add', 'change', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorFormAdd
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerAdd()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_type' => 'ONE TIME',
|
||||
'item_type_toggle' => 'RECURRING',
|
||||
'item_original_name' => '',
|
||||
'item_status' => '',
|
||||
'item_execute_at' => '',
|
||||
'item_interval_value' => '',
|
||||
'item_interval_field' => '',
|
||||
'item_starts' => '',
|
||||
'item_ends' => '',
|
||||
'item_definition' => '',
|
||||
'item_preserve' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<input name='add_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_status'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_type'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_execute_at'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_ends'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<textarea name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_comment'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='submit' name='editor_process_add'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_EVN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerEdit
|
||||
*/
|
||||
public function testgetEditorFormEdit($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_EVN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_EVN_getEditorForm('edit', 'change', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm_edit
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEdit()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_type_toggle' => 'ONE TIME',
|
||||
'item_original_name' => 'bar',
|
||||
'item_status' => 'ENABLED',
|
||||
'item_execute_at' => '',
|
||||
'item_interval_value' => '1',
|
||||
'item_interval_field' => 'DAY',
|
||||
'item_starts' => '',
|
||||
'item_ends' => '',
|
||||
'item_definition' => 'SET @A=1;',
|
||||
'item_preserve' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<input name='edit_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_status'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_type'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_execute_at'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_ends'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<textarea name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_comment'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='submit' name='editor_process_edit'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_EVN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerAjax
|
||||
*/
|
||||
public function testgetEditorFormAjax($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
PMA_EVN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_EVN_getEditorForm('edit', 'change', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm_ajax
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerAjax()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_type_toggle' => 'ONE TIME',
|
||||
'item_original_name' => '',
|
||||
'item_status' => 'ENABLED',
|
||||
'item_execute_at' => '',
|
||||
'item_interval_value' => '',
|
||||
'item_interval_field' => 'DAY',
|
||||
'item_starts' => '',
|
||||
'item_ends' => '',
|
||||
'item_definition' => '',
|
||||
'item_preserve' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_type'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='hidden' name='editor_process_edit'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='hidden' name='ajax_request'"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
175
#pma/test/libraries/rte/PMA_EVN_getQueryFromRequest_test.php
Normal file
175
#pma/test/libraries/rte/PMA_EVN_getQueryFromRequest_test.php
Normal file
@ -0,0 +1,175 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating CREATE EVENT query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Needed for backquote()
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Needed by PMA_EVN_getQueryFromRequest()
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_events.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating CREATE EVENT query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_EVN_GetQueryFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for PMA_EVN_getQueryFromRequest
|
||||
*
|
||||
* @param array $request Request
|
||||
* @param string $query Query
|
||||
* @param array $num_err Error number
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetQueryFromRequest($request, $query, $num_err)
|
||||
{
|
||||
global $_REQUEST, $errors;
|
||||
|
||||
$errors = array();
|
||||
PMA_EVN_setGlobals();
|
||||
|
||||
unset($_REQUEST);
|
||||
$_REQUEST = $request;
|
||||
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->any())
|
||||
->method('escapeString')
|
||||
->will($this->returnArgument(0));
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
$this->assertEquals($query, PMA_EVN_getQueryFromRequest());
|
||||
$this->assertEquals($num_err, count($errors));
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetQueryFromRequest
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
// Testing success
|
||||
array(
|
||||
array( // simple once-off event
|
||||
'item_name' => 's o m e e v e n t\\',
|
||||
'item_type' => 'ONE TIME',
|
||||
'item_execute_at' => '2050-01-01 00:00:00',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE EVENT `s o m e e v e n t\` ON SCHEDULE AT \'2050-01-01 ' .
|
||||
'00:00:00\' ON COMPLETION NOT PRESERVE DO SET @A=0;',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array( // full once-off event
|
||||
'item_name' => 'evn',
|
||||
'item_definer' => 'me@home',
|
||||
'item_type' => 'ONE TIME',
|
||||
'item_execute_at' => '2050-01-01 00:00:00',
|
||||
'item_preserve' => 'ON',
|
||||
'item_status' => 'ENABLED',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE DEFINER=`me`@`home` EVENT `evn` ON SCHEDULE AT ' .
|
||||
'\'2050-01-01 00:00:00\' ON COMPLETION PRESERVE ENABLE DO SET @A=0;',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array( // simple recurring event
|
||||
'item_name' => 'rec_``evn',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_interval_value' => '365',
|
||||
'item_interval_field' => 'DAY',
|
||||
'item_status' => 'DISABLED',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE EVENT `rec_````evn` ON SCHEDULE EVERY 365 DAY ON ' .
|
||||
'COMPLETION NOT PRESERVE DISABLE DO SET @A=0;',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array( // full recurring event
|
||||
'item_name' => 'rec_evn2',
|
||||
'item_definer' => 'evil``user><\\@work\\',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_interval_value' => '365',
|
||||
'item_interval_field' => 'DAY',
|
||||
'item_starts' => '1900-01-01',
|
||||
'item_ends' => '2050-01-01',
|
||||
'item_preserve' => 'ON',
|
||||
'item_status' => 'SLAVESIDE_DISABLED',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE DEFINER=`evil````user><\`@`work\` EVENT `rec_evn2` ON ' .
|
||||
'SCHEDULE EVERY 365 DAY STARTS \'1900-01-01\' ENDS \'2050-01-01\' ' .
|
||||
'ON COMPLETION PRESERVE DISABLE ON SLAVE DO SET @A=0;',
|
||||
0
|
||||
),
|
||||
// Testing failures
|
||||
array(
|
||||
array( // empty request
|
||||
),
|
||||
'CREATE EVENT ON SCHEDULE ON COMPLETION NOT PRESERVE DO ',
|
||||
3
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 's o m e e v e n t\\',
|
||||
'item_definer' => 'someuser', // invalid definer format
|
||||
'item_type' => 'ONE TIME',
|
||||
'item_execute_at' => '', // no execution time
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE EVENT `s o m e e v e n t\` ON SCHEDULE ON COMPLETION NOT ' .
|
||||
'PRESERVE DO SET @A=0;',
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'rec_``evn',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_interval_value' => '', // no interval value
|
||||
'item_interval_field' => 'DAY',
|
||||
'item_status' => 'DISABLED',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE EVENT `rec_````evn` ON SCHEDULE ON COMPLETION NOT ' .
|
||||
'PRESERVE DISABLE DO SET @A=0;',
|
||||
1
|
||||
),
|
||||
array(
|
||||
array( // simple recurring event
|
||||
'item_name' => 'rec_``evn',
|
||||
'item_type' => 'RECURRING',
|
||||
'item_interval_value' => '365',
|
||||
'item_interval_field' => 'CENTURIES', // invalid interval field
|
||||
'item_status' => 'DISABLED',
|
||||
'item_definition' => 'SET @A=0;'
|
||||
),
|
||||
'CREATE EVENT `rec_````evn` ON SCHEDULE ON COMPLETION NOT ' .
|
||||
'PRESERVE DISABLE DO SET @A=0;',
|
||||
1
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
226
#pma/test/libraries/rte/PMA_RTN_getDataFromRequest_test.php
Normal file
226
#pma/test/libraries/rte/PMA_RTN_getDataFromRequest_test.php
Normal file
@ -0,0 +1,226 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for fetching routine data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\TypesMySQL;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_routines.lib.php';
|
||||
|
||||
/**
|
||||
* Test for fetching routine data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_RTN_GetDataFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
global $cfg;
|
||||
|
||||
$cfg['ShowFunctionFields'] = false;
|
||||
|
||||
$GLOBALS['PMA_Types'] = new TypesMySQL();
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getDataFromRequest
|
||||
*
|
||||
* @param array $in Input
|
||||
* @param array $out Expected output
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetDataFromRequest($in, $out)
|
||||
{
|
||||
global $_REQUEST;
|
||||
|
||||
unset($_REQUEST);
|
||||
foreach ($in as $key => $value) {
|
||||
if ($value !== '') {
|
||||
$_REQUEST[$key] = $value;
|
||||
}
|
||||
}
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertEquals($out, PMA_RTN_getDataFromRequest());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetDataFromRequest
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_original_name' => '',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => '',
|
||||
'item_type_toggle' => '',
|
||||
'item_original_type' => '',
|
||||
'item_param_dir' => '',
|
||||
'item_param_name' => '',
|
||||
'item_param_type' => '',
|
||||
'item_param_length' => '',
|
||||
'item_param_opts_num' => '',
|
||||
'item_param_opts_text' => '',
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
),
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_original_name' => '',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 0,
|
||||
'item_param_dir' => array(),
|
||||
'item_param_name' => array(),
|
||||
'item_param_type' => array(),
|
||||
'item_param_length' => array(),
|
||||
'item_param_opts_num' => array(),
|
||||
'item_param_opts_text' => array(),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
)
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'proc2',
|
||||
'item_original_name' => 'proc',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT NULL',
|
||||
'item_comment' => 'some text',
|
||||
'item_definer' => 'root@localhost',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_param_dir' => array(0 => 'IN', 1 => 'FAIL'),
|
||||
'item_param_name' => array(0 => 'bar', 1 => 'baz'),
|
||||
'item_param_type' => array(0 => 'INT', 1 => 'FAIL'),
|
||||
'item_param_length' => array(0 => '20', 1 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED', 1 => ''),
|
||||
'item_param_opts_text' => array(0 => '', 1 => 'latin1'),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => 'ON',
|
||||
'item_securitytype' => 'INVOKER',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
),
|
||||
array(
|
||||
'item_name' => 'proc2',
|
||||
'item_original_name' => 'proc',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT NULL',
|
||||
'item_comment' => 'some text',
|
||||
'item_definer' => 'root@localhost',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 2,
|
||||
'item_param_dir' => array(0 => 'IN', 1 => ''),
|
||||
'item_param_name' => array(0 => 'bar', 1 => 'baz'),
|
||||
'item_param_type' => array(0 => 'INT', 1 => ''),
|
||||
'item_param_length' => array(0 => '20', 1 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED', 1 => ''),
|
||||
'item_param_opts_text' => array(0 => '', 1 => 'latin1'),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => ' checked=\'checked\'',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => ' selected=\'selected\'',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
)
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'func2',
|
||||
'item_original_name' => 'func',
|
||||
'item_returnlength' => '20',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => 'CHARSET utf8',
|
||||
'item_definition' => 'SELECT NULL',
|
||||
'item_comment' => 'some text',
|
||||
'item_definer' => 'root@localhost',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_type_toggle' => 'PROCEDURE',
|
||||
'item_original_type' => 'FUNCTION',
|
||||
'item_param_dir' => array(0 => '', 1 => ''),
|
||||
'item_param_name' => array(0 => 'bar', 1 => 'baz'),
|
||||
'item_param_type' => array(
|
||||
0 => '<s>XSS</s>',
|
||||
1 => 'TEXT'
|
||||
),
|
||||
'item_param_length' => array(0 => '10,10', 1 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED', 1 => ''),
|
||||
'item_param_opts_text' => array(0 => '', 1 => 'utf8'),
|
||||
'item_returntype' => 'VARCHAR',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => ''
|
||||
),
|
||||
array(
|
||||
'item_name' => 'func2',
|
||||
'item_original_name' => 'func',
|
||||
'item_returnlength' => '20',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => 'CHARSET utf8',
|
||||
'item_definition' => 'SELECT NULL',
|
||||
'item_comment' => 'some text',
|
||||
'item_definer' => 'root@localhost',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_type_toggle' => 'PROCEDURE',
|
||||
'item_original_type' => 'FUNCTION',
|
||||
'item_num_params' => '2',
|
||||
'item_param_dir' => array(),
|
||||
'item_param_name' => array(0 => 'bar', 1 => 'baz'),
|
||||
'item_param_type' => array(0 => '', 1 => 'TEXT'),
|
||||
'item_param_length' => array(0 => '10,10', 1 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED', 1 => ''),
|
||||
'item_param_opts_text' => array(0 => '', 1 => 'utf8'),
|
||||
'item_returntype' => 'VARCHAR',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => ' selected=\'selected\'',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
)
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
653
#pma/test/libraries/rte/PMA_RTN_getEditorForm_test.php
Normal file
653
#pma/test/libraries/rte/PMA_RTN_getEditorForm_test.php
Normal file
@ -0,0 +1,653 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating routine editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\Theme;
|
||||
use PMA\libraries\TypesMySQL;
|
||||
|
||||
$GLOBALS['server'] = 0;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
require_once 'libraries/mysql_charsets.inc.php';
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_routines.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating routine editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_RTN_GetEditorForm_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
global $cfg;
|
||||
|
||||
$cfg['ShowFunctionFields'] = false;
|
||||
$GLOBALS['server'] = 0;
|
||||
$cfg['ServerDefault'] = 1;
|
||||
|
||||
$GLOBALS['PMA_Types'] = new TypesMySQL();
|
||||
$_SESSION['PMA_Theme'] = new Theme();
|
||||
$GLOBALS['pmaThemePath'] = $_SESSION['PMA_Theme']->getPath();
|
||||
$GLOBALS['pmaThemeImage'] = 'theme/';
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getParameterRow
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testgetParameterRowEmpty()
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertEquals('', PMA_RTN_getParameterRow(array(), 0));
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getParameterRow
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param mixed $index Index
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRowEmpty
|
||||
* @dataProvider providerRow
|
||||
*/
|
||||
public function testgetParameterRow($data, $index, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getParameterRow($data, $index)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetParameterRow
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerRow()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_original_name' => '',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 1,
|
||||
'item_param_dir' => array(0 => 'IN'),
|
||||
'item_param_name' => array(0 => 'foo'),
|
||||
'item_param_type' => array(0 => 'INT'),
|
||||
'item_param_length' => array(0 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED'),
|
||||
'item_param_opts_text' => array(0 => ''),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
0,
|
||||
"<select name='item_param_dir[0]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
0,
|
||||
"<input name='item_param_name[0]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
0,
|
||||
"<select name='item_param_type[0]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
0,
|
||||
"<select name='item_param_opts_num[0]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
0,
|
||||
"<a href='#' class='routine_param_remove_anchor'"
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getParameterRow
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRow
|
||||
* @dataProvider providerRowAjax
|
||||
*/
|
||||
public function testgetParameterRowAjax($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getParameterRow($data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetParameterRowAjax
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerRowAjax()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_original_name' => '',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 1,
|
||||
'item_param_dir' => array(0 => 'IN'),
|
||||
'item_param_name' => array(0 => 'foo'),
|
||||
'item_param_type' => array(0 => 'INT'),
|
||||
'item_param_length' => array(0 => ''),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED'),
|
||||
'item_param_opts_text' => array(0 => ''),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_param_dir[%s]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_param_name[%s]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_param_dir[%s]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_param_opts_num[%s]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<a href='#' class='routine_param_remove_anchor'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRowAjax
|
||||
* @dataProvider providerEditor1
|
||||
*/
|
||||
public function testgetEditorForm1($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getEditorForm('add', '', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm1
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEditor1()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_original_name' => '',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => '',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 0,
|
||||
'item_param_dir' => array(),
|
||||
'item_param_name' => array(),
|
||||
'item_param_type' => array(),
|
||||
'item_param_length' => array(),
|
||||
'item_param_opts_num' => array(),
|
||||
'item_param_opts_text' => array(),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<input name='add_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input type='text' name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_type'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_changetype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_addparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_removeparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"select name='item_returntype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_returnlength'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"select name='item_returnopts_num'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<textarea name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_isdeterministic'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"select name='item_securitytype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"select name='item_sqldataaccess'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_comment'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_add'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRowAjax
|
||||
* @dataProvider providerEditor2
|
||||
*/
|
||||
public function testgetEditorForm2($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getEditorForm('edit', 'change', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm2
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEditor2()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_original_name' => 'bar',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 1',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_type_toggle' => 'FUNCTION',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 1,
|
||||
'item_param_dir' => array(0 => 'IN'),
|
||||
'item_param_name' => array(0 => 'baz'),
|
||||
'item_param_type' => array(0 => 'INT'),
|
||||
'item_param_length' => array(0 => '20'),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED'),
|
||||
'item_param_opts_text' => array(0 => ''),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='edit_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_type' type='hidden' value='FUNCTION'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_changetype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_addparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_removeparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_returntype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_returnlength'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_returnopts_num'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<textarea name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_isdeterministic'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_securitytype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_sqldataaccess'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_comment'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_edit'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRowAjax
|
||||
* @dataProvider providerEditor3
|
||||
*/
|
||||
public function testgetEditorForm3($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getEditorForm('edit', 'remove', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm3
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEditor3()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_original_name' => 'bar',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => 'UNSIGNED',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 1',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_type_toggle' => 'PROCEDURE',
|
||||
'item_original_type' => 'FUNCTION',
|
||||
'item_num_params' => 1,
|
||||
'item_param_dir' => array(0 => ''),
|
||||
'item_param_name' => array(0 => 'baz'),
|
||||
'item_param_type' => array(0 => 'INT'),
|
||||
'item_param_length' => array(0 => '20'),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED'),
|
||||
'item_param_opts_text' => array(0 => ''),
|
||||
'item_returntype' => 'INT',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='edit_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_type'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_addparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='routine_removeparameter'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_returntype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_returnlength'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_returnopts_num'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<textarea name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_isdeterministic'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_securitytype'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<select name='item_sqldataaccess'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_comment'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='ajax_request'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_edit'"
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getEditorForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @depends testgetParameterRowAjax
|
||||
* @dataProvider providerEditor4
|
||||
*/
|
||||
public function testgetEditorForm4($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getEditorForm('edit', 'change', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetEditorForm4
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEditor4()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_original_name' => 'bar',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 1',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_type_toggle' => 'PROCEDURE',
|
||||
'item_original_type' => 'PROCEDURE',
|
||||
'item_num_params' => 1,
|
||||
'item_param_dir' => array(0 => 'IN'),
|
||||
'item_param_name' => array(0 => 'baz'),
|
||||
'item_param_type' => array(0 => 'INT'),
|
||||
'item_param_length' => array(0 => '20'),
|
||||
'item_param_opts_num' => array(0 => 'UNSIGNED'),
|
||||
'item_param_opts_text' => array(0 => ''),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"<input name='item_type' type='hidden' value='PROCEDURE'"
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
294
#pma/test/libraries/rte/PMA_RTN_getExecuteForm_test.php
Normal file
294
#pma/test/libraries/rte/PMA_RTN_getExecuteForm_test.php
Normal file
@ -0,0 +1,294 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating routine execution dialog
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
use PMA\libraries\TypesMySQL;
|
||||
|
||||
$GLOBALS['server'] = 0;
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_routines.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating routine execution dialog
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_RTN_GetExecuteForm_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
global $cfg;
|
||||
$GLOBALS['PMA_Types'] = new TypesMySQL();
|
||||
$GLOBALS['server'] = 0;
|
||||
$cfg['ServerDefault'] = 1;
|
||||
$GLOBALS['cfg']['ServerDefault'] = '';
|
||||
$cfg['ShowFunctionFields'] = true;
|
||||
$cfg['DefaultFunctions']['FUNC_NUMBER'] = '';
|
||||
$cfg['DefaultFunctions']['FUNC_DATE'] = '';
|
||||
$cfg['DefaultFunctions']['FUNC_SPATIAL'] = 'GeomFromText';
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getExecuteForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider1
|
||||
*/
|
||||
public function testgetExecuteForm1($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getExecuteForm($data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetExecuteForm1
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider1()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 1;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => 6,
|
||||
'item_param_dir' => array(
|
||||
0 => 'IN',
|
||||
1 => 'OUT',
|
||||
2 => 'IN',
|
||||
3 => 'IN',
|
||||
4 => 'IN',
|
||||
5 => 'IN'
|
||||
),
|
||||
'item_param_name' => array(
|
||||
0 => 'foo',
|
||||
1 => 'foa',
|
||||
2 => 'fob',
|
||||
3 => 'foc',
|
||||
4 => 'fod',
|
||||
5 => 'foe'
|
||||
),
|
||||
'item_param_type' => array(
|
||||
0 => 'DATE',
|
||||
1 => 'VARCHAR',
|
||||
2 => 'DATETIME',
|
||||
3 => 'GEOMETRY',
|
||||
4 => 'ENUM',
|
||||
5 => 'SET'
|
||||
),
|
||||
'item_param_length' => array(
|
||||
0 => '',
|
||||
1 => '22',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => "'a','b'",
|
||||
5 => "'a','b'"
|
||||
),
|
||||
'item_param_length_arr' => array(
|
||||
0 => array(),
|
||||
1 => array('22'),
|
||||
2 => array(),
|
||||
3 => array(),
|
||||
4 => array("'a'", "'b'"),
|
||||
5 => array("'a'", "'b'")
|
||||
),
|
||||
'item_param_opts_num' => array(
|
||||
0 => '',
|
||||
1 => '',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => '',
|
||||
5 => ''
|
||||
),
|
||||
'item_param_opts_text' => array(
|
||||
0 => '',
|
||||
1 => 'utf8',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => '',
|
||||
5 => ''
|
||||
),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='funcs[foo]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input class='datefield' type='text' name='params[foo]' />"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='funcs[fob]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"<input class='datetimefield' type='text' name='params[fob]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='params[fod][]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='params[foe][]'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='execute_routine'"
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_RTN_getExecuteForm
|
||||
*
|
||||
* @param array $data Data for routine
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider2
|
||||
*/
|
||||
public function testgetExecuteForm2($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
PMA_RTN_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_RTN_getExecuteForm($data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetExecuteForm2
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider2()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 1;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => 6,
|
||||
'item_param_dir' => array(
|
||||
0 => 'IN',
|
||||
1 => 'OUT',
|
||||
2 => 'IN',
|
||||
3 => 'IN',
|
||||
4 => 'IN',
|
||||
5 => 'IN'
|
||||
),
|
||||
'item_param_name' => array(
|
||||
0 => 'foo',
|
||||
1 => 'foa',
|
||||
2 => 'fob',
|
||||
3 => 'foc',
|
||||
4 => 'fod',
|
||||
5 => 'foe'
|
||||
),
|
||||
'item_param_type' => array(
|
||||
0 => 'DATE',
|
||||
1 => 'VARCHAR',
|
||||
2 => 'DATETIME',
|
||||
3 => 'GEOMETRY',
|
||||
4 => 'ENUM',
|
||||
5 => 'SET'
|
||||
),
|
||||
'item_param_length' => array(
|
||||
0 => '',
|
||||
1 => '22',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => "'a','b'",
|
||||
5 => "'a','b'"
|
||||
),
|
||||
'item_param_length_arr' => array(
|
||||
0 => array(),
|
||||
1 => array('22'),
|
||||
2 => array(),
|
||||
3 => array(),
|
||||
4 => array("'a'", "'b'"),
|
||||
5 => array("'a'", "'b'")
|
||||
),
|
||||
'item_param_opts_num' => array(
|
||||
0 => '',
|
||||
1 => '',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => '',
|
||||
5 => ''
|
||||
),
|
||||
'item_param_opts_text' => array(
|
||||
0 => '',
|
||||
1 => 'utf8',
|
||||
2 => '',
|
||||
3 => '',
|
||||
4 => '',
|
||||
5 => ''
|
||||
),
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype_definer' => '',
|
||||
'item_securitytype_invoker' => '',
|
||||
'item_sqldataaccess' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='execute_routine'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='ajax_request'"
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
290
#pma/test/libraries/rte/PMA_RTN_getQueryFromRequest_test.php
Normal file
290
#pma/test/libraries/rte/PMA_RTN_getQueryFromRequest_test.php
Normal file
@ -0,0 +1,290 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating CREATE [PROCEDURE|FUNCTION] query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Needed for backquote() and PMA_RTN_getQueryFromRequest()
|
||||
*/
|
||||
|
||||
use PMA\libraries\TypesMySQL;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_routines.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating CREATE [PROCEDURE|FUNCTION] query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_RTN_GetQueryFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for PMA_RTN_getQueryFromRequest
|
||||
*
|
||||
* @param array $request Request
|
||||
* @param string $query Query
|
||||
* @param int $num_err Error number
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetQueryFromRequest($request, $query, $num_err)
|
||||
{
|
||||
global $_REQUEST, $errors, $cfg;
|
||||
|
||||
$cfg['ShowFunctionFields'] = false;
|
||||
|
||||
$GLOBALS['PMA_Types'] = new TypesMySQL();
|
||||
|
||||
$errors = array();
|
||||
PMA_RTN_setGlobals();
|
||||
|
||||
$old_dbi = isset($GLOBALS['dbi']) ? $GLOBALS['dbi'] : null;
|
||||
$dbi = $this->getMockBuilder('PMA\libraries\DatabaseInterface')
|
||||
->disableOriginalConstructor()
|
||||
->getMock();
|
||||
$dbi->expects($this->any())
|
||||
->method('escapeString')
|
||||
->will(
|
||||
$this->returnValueMap(
|
||||
array(
|
||||
array('foo', null, 'foo'),
|
||||
array("foo's bar", null, "foo\'s bar"),
|
||||
array('', null, '')
|
||||
)
|
||||
)
|
||||
);
|
||||
$GLOBALS['dbi'] = $dbi;
|
||||
|
||||
unset($_REQUEST);
|
||||
$_REQUEST = $request;
|
||||
$this->assertEquals($query, PMA_RTN_getQueryFromRequest());
|
||||
$this->assertEquals($num_err, count($errors));
|
||||
|
||||
// reset
|
||||
$GLOBALS['dbi'] = $old_dbi;
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetQueryFromRequest
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
// Testing success
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'p r o c',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => 'foo',
|
||||
'item_definer' => 'me@home',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => '0',
|
||||
'item_param_dir' => '',
|
||||
'item_param_name' => '',
|
||||
'item_param_type' => '',
|
||||
'item_param_length' => '',
|
||||
'item_param_opts_num' => '',
|
||||
'item_param_opts_text' => '',
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype' => 'INVOKER',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
),
|
||||
'CREATE DEFINER=`me`@`home` PROCEDURE `p r o c`() COMMENT \'foo\' '
|
||||
. 'DETERMINISTIC NO SQL SQL SECURITY INVOKER SELECT 0;',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'pr``oc',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT \'foobar\';',
|
||||
'item_comment' => '',
|
||||
'item_definer' => 'someuser@somehost',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => '2',
|
||||
'item_param_dir' => array('IN', 'INOUT'),
|
||||
'item_param_name' => array('pa`ram', 'par 2'),
|
||||
'item_param_type' => array('INT', 'ENUM'),
|
||||
'item_param_length' => array('10', '\'a\', \'b\''),
|
||||
'item_param_opts_num' => array('ZEROFILL', ''),
|
||||
'item_param_opts_text' => array('utf8', 'latin1'),
|
||||
'item_returntype' => '',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => 'foobar'
|
||||
),
|
||||
'CREATE DEFINER=`someuser`@`somehost` PROCEDURE `pr````oc`'
|
||||
. '(IN `pa``ram` INT(10) ZEROFILL, INOUT `par 2` ENUM(\'a\', \'b\')'
|
||||
. ' CHARSET latin1) NOT DETERMINISTIC SQL SECURITY DEFINER SELECT '
|
||||
. '\'foobar\';',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'func\\',
|
||||
'item_returnlength' => '5,5',
|
||||
'item_returnopts_num' => 'UNSIGNED ZEROFILL',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT \'foobar\';',
|
||||
'item_comment' => 'foo\'s bar',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_num_params' => '1',
|
||||
'item_param_dir' => '',
|
||||
'item_param_name' => array('pa`ram'),
|
||||
'item_param_type' => array('VARCHAR'),
|
||||
'item_param_length' => array('45'),
|
||||
'item_param_opts_num' => array(''),
|
||||
'item_param_opts_text' => array('latin1'),
|
||||
'item_returntype' => 'DECIMAL',
|
||||
'item_isdeterministic' => 'ON',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => 'READ SQL DATA'
|
||||
),
|
||||
'CREATE FUNCTION `func\\`(`pa``ram` VARCHAR(45) CHARSET latin1) '
|
||||
. 'RETURNS DECIMAL(5,5) UNSIGNED ZEROFILL COMMENT \'foo\\\'s bar\' '
|
||||
. 'DETERMINISTIC SQL SECURITY DEFINER SELECT \'foobar\';',
|
||||
0
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'func',
|
||||
'item_returnlength' => '20',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => 'utf8',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_num_params' => '1',
|
||||
'item_returntype' => 'VARCHAR',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => 'READ SQL DATA'
|
||||
),
|
||||
'CREATE FUNCTION `func`() RETURNS VARCHAR(20) CHARSET utf8 NOT '
|
||||
. 'DETERMINISTIC SQL SECURITY DEFINER SELECT 0;',
|
||||
0
|
||||
),
|
||||
// Testing failures
|
||||
array(
|
||||
array(
|
||||
),
|
||||
'CREATE () NOT DETERMINISTIC ', // invalid query
|
||||
3
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'proc',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => 'foo',
|
||||
'item_definer' => 'mehome', // invalid definer format
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => '0',
|
||||
'item_param_dir' => '',
|
||||
'item_param_name' => '',
|
||||
'item_param_type' => '',
|
||||
'item_param_length' => '',
|
||||
'item_param_opts_num' => '',
|
||||
'item_param_opts_text' => '',
|
||||
'item_returntype' => '',
|
||||
'item_isdeterministic' => '',
|
||||
'item_securitytype' => 'INVOKER',
|
||||
'item_sqldataaccess' => 'NO SQL'
|
||||
),
|
||||
'CREATE PROCEDURE `proc`() COMMENT \'foo\' DETERMINISTIC '
|
||||
. 'NO SQL SQL SECURITY INVOKER SELECT 0;', // valid query
|
||||
1
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'proc',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'PROCEDURE',
|
||||
'item_num_params' => '2',
|
||||
'item_param_dir' => array('FAIL', 'INOUT'), // invalid direction
|
||||
'item_param_name' => array('pa`ram', 'goo'),
|
||||
'item_param_type' => array('INT', 'ENUM'),
|
||||
'item_param_length' => array('10', ''), // missing ENUM values
|
||||
'item_param_opts_num' => array('ZEROFILL', ''),
|
||||
'item_param_opts_text' => array('utf8', 'latin1'),
|
||||
'item_returntype' => '',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => 'foobar' // invalid, will just be ignored without throwing errors
|
||||
),
|
||||
'CREATE PROCEDURE `proc`((10) ZEROFILL, '
|
||||
. 'INOUT `goo` ENUM CHARSET latin1) NOT DETERMINISTIC '
|
||||
. 'SQL SECURITY DEFINER SELECT 0;', // invalid query
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'func',
|
||||
'item_returnlength' => '', // missing length for VARCHAR
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => 'utf8',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_num_params' => '2',
|
||||
'item_param_dir' => array('IN'),
|
||||
'item_param_name' => array(''), // missing name
|
||||
'item_param_type' => array('INT'),
|
||||
'item_param_length' => array('10'),
|
||||
'item_param_opts_num' => array('ZEROFILL'),
|
||||
'item_param_opts_text' => array('latin1'),
|
||||
'item_returntype' => 'VARCHAR',
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => ''
|
||||
),
|
||||
'CREATE FUNCTION `func`() RETURNS VARCHAR CHARSET utf8 NOT '
|
||||
. 'DETERMINISTIC SQL SECURITY DEFINER SELECT 0;', // invalid query
|
||||
2
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'func',
|
||||
'item_returnlength' => '',
|
||||
'item_returnopts_num' => '',
|
||||
'item_returnopts_text' => '',
|
||||
'item_definition' => 'SELECT 0;',
|
||||
'item_comment' => '',
|
||||
'item_definer' => '',
|
||||
'item_type' => 'FUNCTION',
|
||||
'item_num_params' => '0',
|
||||
'item_returntype' => 'FAIL', // invalid return type
|
||||
'item_securitytype' => 'DEFINER',
|
||||
'item_sqldataaccess' => ''
|
||||
),
|
||||
'CREATE FUNCTION `func`() NOT DETERMINISTIC SQL '
|
||||
. 'SECURITY DEFINER SELECT 0;', // invalid query
|
||||
1
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
94
#pma/test/libraries/rte/PMA_TRI_getDataFromRequest_test.php
Normal file
94
#pma/test/libraries/rte/PMA_TRI_getDataFromRequest_test.php
Normal file
@ -0,0 +1,94 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for fetching trigger data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_triggers.lib.php';
|
||||
|
||||
/**
|
||||
* Test for fetching trigger data from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_TRI_GetDataFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Test for PMA_TRI_getDataFromRequest
|
||||
*
|
||||
* @param array $in Input
|
||||
* @param array $out Expected output
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetDataFromRequestEmpty($in, $out)
|
||||
{
|
||||
global $_REQUEST;
|
||||
|
||||
unset($_REQUEST);
|
||||
foreach ($in as $key => $value) {
|
||||
if ($value !== '') {
|
||||
$_REQUEST[$key] = $value;
|
||||
}
|
||||
}
|
||||
$this->assertEquals($out, PMA_TRI_getDataFromRequest());
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetDataFromRequestEmpty
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
array(
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_table' => '',
|
||||
'item_original_name' => '',
|
||||
'item_action_timing' => '',
|
||||
'item_event_manipulation' => '',
|
||||
'item_definition' => '',
|
||||
'item_definer' => ''
|
||||
),
|
||||
array(
|
||||
'item_name' => '',
|
||||
'item_table' => '',
|
||||
'item_original_name' => '',
|
||||
'item_action_timing' => '',
|
||||
'item_event_manipulation' => '',
|
||||
'item_definition' => '',
|
||||
'item_definer' => ''
|
||||
)
|
||||
),
|
||||
array(
|
||||
array(
|
||||
'item_name' => 'foo',
|
||||
'item_table' => 'foo',
|
||||
'item_original_name' => 'foo',
|
||||
'item_action_timing' => 'foo',
|
||||
'item_event_manipulation' => 'foo',
|
||||
'item_definition' => 'foo',
|
||||
'item_definer' => 'foo'
|
||||
),
|
||||
array(
|
||||
'item_name' => 'foo',
|
||||
'item_table' => 'foo',
|
||||
'item_original_name' => 'foo',
|
||||
'item_action_timing' => 'foo',
|
||||
'item_event_manipulation' => 'foo',
|
||||
'item_definition' => 'foo',
|
||||
'item_definer' => 'foo'
|
||||
)
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
237
#pma/test/libraries/rte/PMA_TRI_getEditorForm_test.php
Normal file
237
#pma/test/libraries/rte/PMA_TRI_getEditorForm_test.php
Normal file
@ -0,0 +1,237 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating trigger editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
require_once 'libraries/url_generating.lib.php';
|
||||
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_triggers.lib.php';
|
||||
|
||||
/**
|
||||
* Test for generating trigger editor
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_TRI_GetEditorForm_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$GLOBALS['cfg']['ServerDefault'] = '';
|
||||
$GLOBALS['cfg']['DBG']['sql'] = false;
|
||||
$GLOBALS['db'] = 'pma_test';
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Test for PMA_TRI_getEditorForm
|
||||
*
|
||||
* @param array $data Data for trigger
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerAdd
|
||||
* @group medium
|
||||
*/
|
||||
public function testGetEditorFormAdd($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
$GLOBALS['server'] = 1;
|
||||
PMA_TRI_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_TRI_getEditorForm('add', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for testGetEditorFormAdd
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerAdd()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => '',
|
||||
'item_table' => 'table1',
|
||||
'item_original_name' => '',
|
||||
'item_action_timing' => '',
|
||||
'item_event_manipulation' => '',
|
||||
'item_definition' => '',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='add_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_table'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_timing'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_event'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_add'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_TRI_getEditorForm
|
||||
*
|
||||
* @param array $data Data for trigger
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerEdit
|
||||
* @group medium
|
||||
*/
|
||||
public function testGetEditorFormEdit($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = false;
|
||||
$GLOBALS['server'] = 1;
|
||||
PMA_TRI_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_TRI_getEditorForm('edit', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for testGetEditorFormEdit
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerEdit()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_table' => 'table1',
|
||||
'item_original_name' => 'bar',
|
||||
'item_action_timing' => 'BEFORE',
|
||||
'item_event_manipulation' => 'INSERT',
|
||||
'item_definition' => 'SET @A=1;',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='edit_item'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_name'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_table'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_timing'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_event'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definition'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='item_definer'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_edit'"
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_TRI_getEditorForm
|
||||
*
|
||||
* @param array $data Data for trigger
|
||||
* @param array $matcher Matcher
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider providerAjax
|
||||
*/
|
||||
public function testGetEditorFormAjax($data, $matcher)
|
||||
{
|
||||
$GLOBALS['is_ajax_request'] = true;
|
||||
$GLOBALS['server'] = 1;
|
||||
PMA_TRI_setGlobals();
|
||||
$this->assertContains(
|
||||
$matcher,
|
||||
PMA_TRI_getEditorForm('edit', $data)
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provider for testGetEditorFormAjax
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function providerAjax()
|
||||
{
|
||||
$data = array(
|
||||
'item_name' => 'foo',
|
||||
'item_table' => 'table1',
|
||||
'item_original_name' => 'bar',
|
||||
'item_action_timing' => 'BEFORE',
|
||||
'item_event_manipulation' => 'INSERT',
|
||||
'item_definition' => 'SET @A=1;',
|
||||
'item_definer' => ''
|
||||
);
|
||||
|
||||
return array(
|
||||
array(
|
||||
$data,
|
||||
"name='editor_process_edit'"
|
||||
),
|
||||
array(
|
||||
$data,
|
||||
"name='ajax_request'"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
128
#pma/test/libraries/rte/PMA_TRI_getQueryFromRequest_test.php
Normal file
128
#pma/test/libraries/rte/PMA_TRI_getQueryFromRequest_test.php
Normal file
@ -0,0 +1,128 @@
|
||||
<?php
|
||||
/* vim: set expandtab sw=4 ts=4 sts=4: */
|
||||
/**
|
||||
* Test for generating CREATE TRIGGER query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
|
||||
/*
|
||||
* Needed for backquote()
|
||||
*/
|
||||
|
||||
|
||||
/*
|
||||
* Needed by PMA_TRI_getQueryFromRequest()
|
||||
*/
|
||||
|
||||
/*
|
||||
* Include to test.
|
||||
*/
|
||||
require_once 'libraries/rte/rte_triggers.lib.php';
|
||||
require_once 'libraries/database_interface.inc.php';
|
||||
|
||||
|
||||
/**
|
||||
* Test for generating CREATE TRIGGER query from HTTP request
|
||||
*
|
||||
* @package PhpMyAdmin-test
|
||||
*/
|
||||
class PMA_TRI_GetQueryFromRequest_Test extends PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
* Set up
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function setUp()
|
||||
{
|
||||
$GLOBALS['db'] = 'pma_test';
|
||||
$GLOBALS['cfg']['DBG']['sql'] = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for PMA_TRI_getQueryFromRequest
|
||||
*
|
||||
* @param string $definer Definer
|
||||
* @param string $name Name
|
||||
* @param string $timing Timing
|
||||
* @param string $event Event
|
||||
* @param string $table Table
|
||||
* @param string $definition Definition
|
||||
* @param string $query Query
|
||||
* @param string $num_err Error number
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @dataProvider provider
|
||||
*/
|
||||
public function testgetQueryFromRequest(
|
||||
$definer, $name, $timing, $event, $table, $definition, $query, $num_err
|
||||
) {
|
||||
global $_REQUEST, $errors;
|
||||
|
||||
$errors = array();
|
||||
PMA_TRI_setGlobals();
|
||||
|
||||
$_REQUEST['item_definer'] = $definer;
|
||||
$_REQUEST['item_name'] = $name;
|
||||
$_REQUEST['item_timing'] = $timing;
|
||||
$_REQUEST['item_event'] = $event;
|
||||
$_REQUEST['item_table'] = $table;
|
||||
$_REQUEST['item_definition'] = $definition;
|
||||
$GLOBALS['server'] = 1;
|
||||
|
||||
$this->assertEquals($query, PMA_TRI_getQueryFromRequest());
|
||||
$this->assertEquals($num_err, count($errors));
|
||||
}
|
||||
|
||||
/**
|
||||
* Data provider for testgetQueryFromRequest
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function provider()
|
||||
{
|
||||
return array(
|
||||
array('',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
'CREATE TRIGGER ON FOR EACH ROW ',
|
||||
5
|
||||
),
|
||||
array(
|
||||
'root',
|
||||
'trigger',
|
||||
'BEFORE',
|
||||
'INSERT',
|
||||
'table`2',
|
||||
'SET @A=NULL',
|
||||
'CREATE TRIGGER `trigger` BEFORE INSERT ON FOR EACH ROW SET @A=NULL',
|
||||
2
|
||||
),
|
||||
array(
|
||||
'foo`s@host',
|
||||
'trigger`s test',
|
||||
'AFTER',
|
||||
'foo',
|
||||
'table3',
|
||||
'BEGIN SET @A=1; SET @B=2; END',
|
||||
'CREATE DEFINER=`foo``s`@`host` TRIGGER `trigger``s test` AFTER ON FOR EACH ROW BEGIN SET @A=1; SET @B=2; END',
|
||||
2
|
||||
),
|
||||
array(
|
||||
'root@localhost',
|
||||
'trigger',
|
||||
'BEFORE',
|
||||
'INSERT',
|
||||
'table1',
|
||||
'SET @A=NULL',
|
||||
'CREATE DEFINER=`root`@`localhost` TRIGGER `trigger` BEFORE INSERT ON `table1` FOR EACH ROW SET @A=NULL',
|
||||
0
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user