From 48372c19fe36244809d12c0246d4da1a18ae0784 Mon Sep 17 00:00:00 2001 From: adamgsoc2013 Date: Thu, 4 Jul 2013 22:01:53 +0800 Subject: [PATCH 1/4] add test case for SQL_Validator and SQL_parser --- test/libraries/PMA_SQL_parser_test.php | 13 ++++- test/libraries/PMA_SQL_validator_test.php | 58 +++++++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 test/libraries/PMA_SQL_validator_test.php diff --git a/test/libraries/PMA_SQL_parser_test.php b/test/libraries/PMA_SQL_parser_test.php index f8a78ceb4a..9b74e74762 100644 --- a/test/libraries/PMA_SQL_parser_test.php +++ b/test/libraries/PMA_SQL_parser_test.php @@ -10,6 +10,7 @@ * Include to test. */ require_once 'libraries/sqlparser.lib.php'; +require_once 'libraries/sqlparser.data.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Message.class.php'; require_once 'libraries/Util.class.php'; @@ -52,7 +53,17 @@ class PMA_SQLParser_Test extends PHPUnit_Framework_TestCase $this->assertEquals('', PMA_SQP_getErrorString()); $this->assertEquals($expected, $parsed_sql); } - + + public function testPMA_SQP_isKeyWord() + { + PMA_SQP_resetError(); + $this->assertEquals(true, PMA_SQP_isKeyWord("ACCESSIBLE")); + $this->assertEquals(true, PMA_SQP_isKeyWord("accessible")); + $this->assertEquals(true, PMA_SQP_isKeyWord("ASC")); + $this->assertEquals(false, PMA_SQP_isKeyWord("hello")); + } + + /** * Data provider for parser testing * diff --git a/test/libraries/PMA_SQL_validator_test.php b/test/libraries/PMA_SQL_validator_test.php new file mode 100644 index 0000000000..11f5701998 --- /dev/null +++ b/test/libraries/PMA_SQL_validator_test.php @@ -0,0 +1,58 @@ +assertEquals( + '', + PMA_validateSQL($sql) + ); + + $GLOBALS['cfg']['SQLValidator']['use'] = true; + $GLOBALS['sqlvalidator_error'] = true; + $this->assertContains( + 'The SQL validator could not be initialized.', + PMA_validateSQL($sql) + ); + } +} +?> From c5e64ef0e525926c7009e565624dbefcf750c962 Mon Sep 17 00:00:00 2001 From: adamgsoc2013 Date: Fri, 5 Jul 2013 00:35:40 +0800 Subject: [PATCH 2/4] $cfg will be used before setup on sqlvalidator.lib.php --- test/libraries/PMA_SQL_validator_test.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/libraries/PMA_SQL_validator_test.php b/test/libraries/PMA_SQL_validator_test.php index 11f5701998..c5b09c5cd5 100644 --- a/test/libraries/PMA_SQL_validator_test.php +++ b/test/libraries/PMA_SQL_validator_test.php @@ -10,7 +10,10 @@ * Include to test. */ define('PMA_MYSQL_STR_VERSION', "PMA_MYSQL_STR_VERSION"); +//it will be used before setup on libraries/sqlvalidator.lib.php global $cfg; +$cfg['SQLValidator']['use'] = false; + require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Message.class.php'; @@ -41,7 +44,6 @@ class PMA_SQLValidator_Test extends PHPUnit_Framework_TestCase public function testPMA_validateSQL() { $sql = "select * from PMA_test"; - $GLOBALS['cfg']['SQLValidator']['use'] = false; $this->assertEquals( '', PMA_validateSQL($sql) From 2f4e27be6f4a3ea8a98bfcb5c9476f38baf2a595 Mon Sep 17 00:00:00 2001 From: adamgsoc2013 Date: Mon, 8 Jul 2013 21:09:35 +0800 Subject: [PATCH 3/4] fix the case of PMA_SQL_validator --- test/libraries/PMA_SQL_parser_test.php | 8 +++--- test/libraries/PMA_SQL_validator_test.php | 33 ++++++++++++++++------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/test/libraries/PMA_SQL_parser_test.php b/test/libraries/PMA_SQL_parser_test.php index 9b74e74762..65e834156c 100644 --- a/test/libraries/PMA_SQL_parser_test.php +++ b/test/libraries/PMA_SQL_parser_test.php @@ -57,10 +57,10 @@ class PMA_SQLParser_Test extends PHPUnit_Framework_TestCase public function testPMA_SQP_isKeyWord() { PMA_SQP_resetError(); - $this->assertEquals(true, PMA_SQP_isKeyWord("ACCESSIBLE")); - $this->assertEquals(true, PMA_SQP_isKeyWord("accessible")); - $this->assertEquals(true, PMA_SQP_isKeyWord("ASC")); - $this->assertEquals(false, PMA_SQP_isKeyWord("hello")); + $this->assertTrue(PMA_SQP_isKeyWord("ACCESSIBLE")); + $this->assertTrue(PMA_SQP_isKeyWord("accessible")); + $this->assertTrue(PMA_SQP_isKeyWord("ASC")); + $this->assertFalse(PMA_SQP_isKeyWord("hello")); } diff --git a/test/libraries/PMA_SQL_validator_test.php b/test/libraries/PMA_SQL_validator_test.php index c5b09c5cd5..f279bb1c11 100644 --- a/test/libraries/PMA_SQL_validator_test.php +++ b/test/libraries/PMA_SQL_validator_test.php @@ -9,12 +9,11 @@ /* * Include to test. */ -define('PMA_MYSQL_STR_VERSION', "PMA_MYSQL_STR_VERSION"); +define('PMA_MYSQL_STR_VERSION', "5.00.15"); //it will be used before setup on libraries/sqlvalidator.lib.php global $cfg; $cfg['SQLValidator']['use'] = false; - require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Message.class.php'; require_once 'libraries/Util.class.php'; @@ -40,21 +39,35 @@ class PMA_SQLValidator_Test extends PHPUnit_Framework_TestCase $GLOBALS['cfg']['SQLValidator']['username'] = "PMA_username"; $GLOBALS['cfg']['SQLValidator']['password'] = "PMA_password"; } - + + /** + * Tests for PMA_validateSQL + * + * @return void + */ public function testPMA_validateSQL() { - $sql = "select * from PMA_test"; - $this->assertEquals( - '', - PMA_validateSQL($sql) - ); + $sql = "select * from PMA_test"; + //$cfg['SQLValidator']['use'] = false + $this->assertEquals( + '', + PMA_validateSQL($sql) + ); + + //$cfg['SQLValidator']['use'] = true $GLOBALS['cfg']['SQLValidator']['use'] = true; + + //the sql validatior is not loaded $GLOBALS['sqlvalidator_error'] = true; $this->assertContains( - 'The SQL validator could not be initialized.', - PMA_validateSQL($sql) + 'The SQL validator could not be initialized.', + PMA_validateSQL($sql) ); + + //the sql validatior is loaded correctly + //TODO: follow need SOAP + $GLOBALS['sqlvalidator_soap'] = 'PHP'; } } ?> From e0434189959519c85903e45a577ba8e2b958697c Mon Sep 17 00:00:00 2001 From: adamgsoc2013 Date: Tue, 9 Jul 2013 21:02:48 +0800 Subject: [PATCH 4/4] add Mock SOAP_Client --- test/libraries/PMA_SQL_validator_test.php | 76 +++++++++++++++++++++-- 1 file changed, 72 insertions(+), 4 deletions(-) diff --git a/test/libraries/PMA_SQL_validator_test.php b/test/libraries/PMA_SQL_validator_test.php index f279bb1c11..b41f012274 100644 --- a/test/libraries/PMA_SQL_validator_test.php +++ b/test/libraries/PMA_SQL_validator_test.php @@ -41,11 +41,11 @@ class PMA_SQLValidator_Test extends PHPUnit_Framework_TestCase } /** - * Tests for PMA_validateSQL + * Tests for PMA_validateSQL failed due to No Configure * * @return void */ - public function testPMA_validateSQL() + public function testPMA_validateSQL_NoConfigure() { $sql = "select * from PMA_test"; @@ -64,10 +64,78 @@ class PMA_SQLValidator_Test extends PHPUnit_Framework_TestCase 'The SQL validator could not be initialized.', PMA_validateSQL($sql) ); + } + + /** + * Tests for PMA_validateSQL SOAP + * + * @return void + */ + public function testPMA_validateSQL_SOAP() + { + $sql_pass = "select * from PMA_test"; + $sql_fail = "select * PMA_test"; //the sql validatior is loaded correctly - //TODO: follow need SOAP - $GLOBALS['sqlvalidator_soap'] = 'PHP'; + //follow need SOAP + $GLOBALS['cfg']['SQLValidator']['use'] = true; + $GLOBALS['sqlvalidator_soap'] = 'PEAR'; + $GLOBALS['sqlvalidator_error'] = false; + + //validate that the result is the same as SOAP_Client return + //SOAP_Client is mocked with simple logic + $this->assertTrue( + PMA_validateSQL($sql_pass) + ); + $this->assertFalse( + PMA_validateSQL($sql_fail) + ); } } + +//Mock the SOAP_Client +class SOAP_Client +{ + public function call($name, $arguments) + { + return $this->{$name}($arguments); + } + public function openSession($args) + { + $session = new Session; + $session->target = "http://sqlvalidator.mimer.com/v1/services"; + $session->username = $args["a_userName"]; + $session->password = $args["a_password"]; + $session->calling_program = $args["a_callingProgram"]; + $session->sessionId = "sessionId"; + $session->sessionKey = "sessionKey"; + return $session; + } + public function validateSQL($args) + { + $session = new Session; + $sql = $args["a_SQL"]; + //simple logic of sql validate + $pos = strstr($sql, "from"); + if (!$pos) { + $session->data = false; + } else { + $session->data = true; + } + return $session; + } +} + +//Mock return Session class +class Session +{ + var $target = null; + var $username = null; + var $password = null; + var $calling_program = null; + var $sessionId = null; + var $sessionKey = null; + var $data = null; +} + ?>