From e257c17588a7a3e0f3c38edd68f371819717dc99 Mon Sep 17 00:00:00 2001 From: xmujay Date: Fri, 12 Jul 2013 22:31:35 +0800 Subject: [PATCH 1/4] Unit test case for PMA_server_replication refactored functions --- .../libraries/PMA_server_replication_test.php | 386 ++++++++++++++++++ 1 file changed, 386 insertions(+) create mode 100644 test/libraries/PMA_server_replication_test.php diff --git a/test/libraries/PMA_server_replication_test.php b/test/libraries/PMA_server_replication_test.php new file mode 100644 index 0000000000..91e8e10375 --- /dev/null +++ b/test/libraries/PMA_server_replication_test.php @@ -0,0 +1,386 @@ + "master-bin.000030", + "Position" => "107", + "Binlog_Do_DB" => "Binlog_Do_DB", + "Binlog_Ignore_DB" => "Binlog_Ignore_DB", + ) + ); + $server_slave_replication = array( + array( + "File" => "slave-bin.000030", + "Position" => "slave_Position", + "Binlog_Do_DB" => "slave__Do_DB", + "Binlog_Ignore_DB" => "slave_Binlog_Ignore_DB", + ) + ); + + $slave_host = array( + array('Server_id'=>'Server_id1', 'Host'=>'Host1'), + array('Server_id'=>'Server_id2', 'Host'=>'Host2'), + ); + + $fetchResult = array( + array( + "SHOW MASTER STATUS", + null, + null, + null, + 0, + $server_master_replication + ), + array( + "SHOW SLAVE STATUS", + null, + null, + null, + 0, + $server_slave_replication + ), + array( + "SHOW SLAVE HOSTS", + null, + null, + null, + 0, + $slave_host + ), + ); + + $dbi = $this->getMockBuilder('PMA_DatabaseInterface') + ->disableOriginalConstructor() + ->getMock(); + + $dbi->expects($this->any())->method('fetchResult') + ->will($this->returnValueMap($fetchResult)); + + $fields_info = array( + "Host" => array( + "Field" => "host", + "Type" => "char(60)", + "Null" => "NO", + ) + ); + $dbi->expects($this->any())->method('getColumns') + ->will($this->returnValue($fields_info)); + + $GLOBALS['dbi'] = $dbi; + } + + /** + * Test for PMA_getHtmlForMasterReplication + * + * @return void + */ + public function testPMAGetHtmlForMasterReplication() + { + global $master_variables; + global $master_variables_alerts; + global $master_variables_oks; + global $server_master_replication; + global $strReplicationStatus_master; + + $server_master_replication = array( + array( + "File" => "master-bin.000030", + "Position" => "107", + "Binlog_Do_DB" => "Binlog_Do_DB", + "Binlog_Ignore_DB" => "Binlog_Ignore_DB", + ) + ); + $master_variables_alerts = null; + $master_variables_oks = null; + $strReplicationStatus_master = null; + + //Call the test function + $html = PMA_getHtmlForMasterReplication(); + + //validate 1: Master replication + $this->assertContains( + 'Master replication', + $html + ); + $this->assertContains( + 'This server is configured as master in a replication process.', + $html + ); + + //validate 2: PMA_getHtmlForReplicationStatusTable + $this->assertContains( + '
assertContains( + "Binlog_Do_DB", + $html + ); + $this->assertContains( + "Binlog_Ignore_DB", + $html + ); + //$server_master_replication + $this->assertContains( + "master-bin.000030", + $html + ); + + //validate 3: PMA_getHtmlForReplicationSlavesTable + $this->assertContains( + 'replication_slaves_section', + $html + ); + $this->assertContains( + 'Server ID', + $html + ); + $this->assertContains( + 'Host', + $html + ); + //slave host + $this->assertContains( + 'Server_id1', + $html + ); + $this->assertContains( + 'Server_id2', + $html + ); + $this->assertContains( + 'Host1', + $html + ); + $this->assertContains( + 'Host2', + $html + ); + //Notice + $this->assertContains( + 'Only slaves started with the', + $html + ); + + //validate 4: navigation URL + $this->assertContains( + '', + $html + ); + } + + /** + * Test for PMA_getHtmlForNotServerReplication + * + * @return void + */ + public function testPMAGetHtmlForNotServerReplication() + { + //Call the test function + $html = PMA_getHtmlForNotServerReplication(); + + $this->assertContains( + 'Master replication', + $html + ); + $this->assertContains( + 'This server is not configured as master in a replication process.', + $html + ); + } + + /** + * Test for PMA_getHtmlForSlaveConfiguration + * + * @return void + */ + public function testPMAGetHtmlForSlaveConfiguration() + { + global $server_slave_replication; + $server_slave_replication = array( + array( + 'Slave_IO_State' => 'running', + 'Master_Host' => 'locahost', + 'Master_User' => 'Master_User', + 'Master_Port' => '1002', + 'Connect_Retry' => 'Connect_Retry', + 'Master_Log_File' => 'Master_Log_File', + 'Read_Master_Log_Pos' => 'Read_Master_Log_Pos', + 'Relay_Log_File' => 'Relay_Log_File', + 'Relay_Log_Pos' => 'Relay_Log_Pos', + 'Relay_Master_Log_File' => 'Relay_Master_Log_File', + 'Slave_IO_Running' => 'NO', + 'Slave_SQL_Running' => 'NO', + 'Replicate_Do_DB' => 'Replicate_Do_DB', + 'Replicate_Ignore_DB' => 'Replicate_Ignore_DB', + 'Replicate_Do_Table' => 'Replicate_Do_Table', + 'Replicate_Ignore_Table' => 'Replicate_Ignore_Table', + 'Replicate_Wild_Do_Table' => 'Replicate_Wild_Do_Table', + 'Replicate_Wild_Ignore_Table' => 'Replicate_Wild_Ignore_Table', + 'Last_Errno' => 'Last_Errno', + 'Last_Error' => 'Last_Error', + 'Skip_Counter' => 'Skip_Counter', + 'Exec_Master_Log_Pos' => 'Exec_Master_Log_Pos', + 'Relay_Log_Space' => 'Relay_Log_Space', + 'Until_Condition' => 'Until_Condition', + 'Until_Log_File' => 'Until_Log_File', + 'Until_Log_Pos' => 'Until_Log_Pos', + 'Master_SSL_Allowed' => 'Master_SSL_Allowed', + 'Master_SSL_CA_File' => 'Master_SSL_CA_File', + 'Master_SSL_CA_Path' => 'Master_SSL_CA_Path', + 'Master_SSL_Cert' => 'Master_SSL_Cert', + 'Master_SSL_Cipher' => 'Master_SSL_Cipher', + 'Master_SSL_Key' => 'Master_SSL_Key', + 'Seconds_Behind_Master' => 'Seconds_Behind_Master', + ) + ); + + //Call the test function + $html = PMA_getHtmlForSlaveConfiguration( + true, + $server_slave_replication + ); + + //legend + $this->assertContains( + 'Slave replication', + $html + ); + $this->assertContains( + '
', + $html + ); + //notice + $this->assertContains( + 'Server is configured as slave in a replication process.', + $html + ); + //slave session + $this->assertContains( + '
assertContains( + 'Master_SSL_CA_Path', + $html + ); + $this->assertContains( + 'Master_SSL_Cert', + $html + ); + $this->assertContains( + 'Master_SSL_Cipher', + $html + ); + $this->assertContains( + 'Seconds_Behind_Master', + $html + ); + } + + /** + * Test for PMA_getHtmlForReplicationChangeMaster + * + * @return void + */ + public function testPMAGetHtmlForReplicationChangeMaster() + { + //Call the test function + $html = PMA_getHtmlForReplicationChangeMaster("slave_changemaster"); + + $this->assertContains( + '
', + $html + ); + $this->assertContains( + 'Slave configuration', + $html + ); + $this->assertContains( + 'Change or reconfigure master server', + $html + ); + $notice = 'Make sure, you have unique server-id ' + . 'in your configuration file (my.cnf)'; + $this->assertContains( + $notice, + $html + ); + } +} From 9ee4bb0efddbc0ea12cbd112465825847f837d97 Mon Sep 17 00:00:00 2001 From: xmujay Date: Fri, 12 Jul 2013 22:56:02 +0800 Subject: [PATCH 2/4] fix the failure: Cannot modify header information --- setup/lib/form_processing.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/lib/form_processing.lib.php b/setup/lib/form_processing.lib.php index 65ebb1db2e..32b2a1d0ea 100644 --- a/setup/lib/form_processing.lib.php +++ b/setup/lib/form_processing.lib.php @@ -56,9 +56,9 @@ function process_formset(FormDisplay $form_display) Date: Fri, 12 Jul 2013 23:11:05 +0800 Subject: [PATCH 3/4] revert the changes about header --- setup/lib/form_processing.lib.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup/lib/form_processing.lib.php b/setup/lib/form_processing.lib.php index 32b2a1d0ea..65ebb1db2e 100644 --- a/setup/lib/form_processing.lib.php +++ b/setup/lib/form_processing.lib.php @@ -56,9 +56,9 @@ function process_formset(FormDisplay $form_display) Date: Sat, 13 Jul 2013 11:31:01 +0800 Subject: [PATCH 4/4] fix the "Not support query" error by moving mock data to DBI Dummy class --- libraries/dbi/DBIDummy.class.php | 55 +++++++++++++ test/classes/plugin/import/ImportCsv_test.php | 1 + test/classes/plugin/import/ImportLdi_test.php | 1 + .../plugin/import/ImportMediawiki_test.php | 1 + test/classes/plugin/import/ImportOds_test.php | 1 + test/classes/plugin/import/ImportSql_test.php | 1 + test/classes/plugin/import/ImportXml_test.php | 1 + .../libraries/PMA_server_replication_test.php | 80 +------------------ 8 files changed, 63 insertions(+), 78 deletions(-) diff --git a/libraries/dbi/DBIDummy.class.php b/libraries/dbi/DBIDummy.class.php index 1361629e23..163f885fe1 100644 --- a/libraries/dbi/DBIDummy.class.php +++ b/libraries/dbi/DBIDummy.class.php @@ -301,6 +301,61 @@ $GLOBALS['dummy_queries'] = array( " AND table_name = 'pma_test_table2'" . " ORDER BY version DESC", 'result' => array() + ), + array( + 'query' => "SHOW SLAVE STATUS", + 'result' => array( + array( + 'Slave_IO_State' => 'running', + 'Master_Host' => 'locahost', + 'Master_User' => 'Master_User', + 'Master_Port' => '1002', + 'Connect_Retry' => 'Connect_Retry', + 'Master_Log_File' => 'Master_Log_File', + 'Read_Master_Log_Pos' => 'Read_Master_Log_Pos', + 'Relay_Log_File' => 'Relay_Log_File', + 'Relay_Log_Pos' => 'Relay_Log_Pos', + 'Relay_Master_Log_File' => 'Relay_Master_Log_File', + 'Slave_IO_Running' => 'NO', + 'Slave_SQL_Running' => 'NO', + 'Replicate_Do_DB' => 'Replicate_Do_DB', + 'Replicate_Ignore_DB' => 'Replicate_Ignore_DB', + 'Replicate_Do_Table' => 'Replicate_Do_Table', + 'Replicate_Ignore_Table' => 'Replicate_Ignore_Table', + 'Replicate_Wild_Do_Table' => 'Replicate_Wild_Do_Table', + 'Replicate_Wild_Ignore_Table' => 'Replicate_Wild_Ignore_Table', + 'Last_Errno' => 'Last_Errno', + 'Last_Error' => 'Last_Error', + 'Skip_Counter' => 'Skip_Counter', + 'Exec_Master_Log_Pos' => 'Exec_Master_Log_Pos', + 'Relay_Log_Space' => 'Relay_Log_Space', + 'Until_Condition' => 'Until_Condition', + 'Until_Log_File' => 'Until_Log_File', + 'Until_Log_Pos' => 'Until_Log_Pos', + 'Master_SSL_Allowed' => 'Master_SSL_Allowed', + 'Master_SSL_CA_File' => 'Master_SSL_CA_File', + 'Master_SSL_CA_Path' => 'Master_SSL_CA_Path', + 'Master_SSL_Cert' => 'Master_SSL_Cert', + 'Master_SSL_Cipher' => 'Master_SSL_Cipher', + 'Master_SSL_Key' => 'Master_SSL_Key', + 'Seconds_Behind_Master' => 'Seconds_Behind_Master', + ) + ) + ), + array( + 'query' => "SHOW MASTER STATUS", + 'result' => array( + array( + "File" => "master-bin.000030", + "Position" => "107", + "Binlog_Do_DB" => "Binlog_Do_DB", + "Binlog_Ignore_DB" => "Binlog_Ignore_DB", + ) + ) + ), + array( + 'query' => "SHOW GRANTS", + 'result' => array() ) ); /** diff --git a/test/classes/plugin/import/ImportCsv_test.php b/test/classes/plugin/import/ImportCsv_test.php index 404b3ed131..63e1ec6140 100644 --- a/test/classes/plugin/import/ImportCsv_test.php +++ b/test/classes/plugin/import/ImportCsv_test.php @@ -18,6 +18,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; require_once 'libraries/sanitizing.lib.php'; diff --git a/test/classes/plugin/import/ImportLdi_test.php b/test/classes/plugin/import/ImportLdi_test.php index 9a68cd191d..7703a36faa 100644 --- a/test/classes/plugin/import/ImportLdi_test.php +++ b/test/classes/plugin/import/ImportLdi_test.php @@ -19,6 +19,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; /* Each PluginObserver instance contains a PluginManager instance */ diff --git a/test/classes/plugin/import/ImportMediawiki_test.php b/test/classes/plugin/import/ImportMediawiki_test.php index 1e66090d11..dfe89efbdd 100644 --- a/test/classes/plugin/import/ImportMediawiki_test.php +++ b/test/classes/plugin/import/ImportMediawiki_test.php @@ -17,6 +17,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; diff --git a/test/classes/plugin/import/ImportOds_test.php b/test/classes/plugin/import/ImportOds_test.php index 51ce3df8b8..313fc7b398 100644 --- a/test/classes/plugin/import/ImportOds_test.php +++ b/test/classes/plugin/import/ImportOds_test.php @@ -18,6 +18,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; require_once 'libraries/sanitizing.lib.php'; diff --git a/test/classes/plugin/import/ImportSql_test.php b/test/classes/plugin/import/ImportSql_test.php index 13c76aea38..dafb9c20c5 100644 --- a/test/classes/plugin/import/ImportSql_test.php +++ b/test/classes/plugin/import/ImportSql_test.php @@ -18,6 +18,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; diff --git a/test/classes/plugin/import/ImportXml_test.php b/test/classes/plugin/import/ImportXml_test.php index 60e8314b2f..c1b3fb93cd 100644 --- a/test/classes/plugin/import/ImportXml_test.php +++ b/test/classes/plugin/import/ImportXml_test.php @@ -18,6 +18,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/url_generating.lib.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/Table.class.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/import.lib.php'; /* Each PluginObserver instance contains a PluginManager instance */ diff --git a/test/libraries/PMA_server_replication_test.php b/test/libraries/PMA_server_replication_test.php index 91e8e10375..cbf841d955 100644 --- a/test/libraries/PMA_server_replication_test.php +++ b/test/libraries/PMA_server_replication_test.php @@ -12,6 +12,7 @@ require_once 'libraries/Util.class.php'; require_once 'libraries/php-gettext/gettext.inc'; require_once 'libraries/url_generating.lib.php'; +require_once 'libraries/Tracker.class.php'; require_once 'libraries/database_interface.inc.php'; require_once 'libraries/replication.inc.php'; require_once 'libraries/replication_gui.lib.php'; @@ -64,22 +65,6 @@ class PMA_ServerReplication_Test extends PHPUnit_Framework_TestCase $_SESSION['PMA_Theme'] = new PMA_Theme(); //Mock DBI - $server_master_replication = array( - array( - "File" => "master-bin.000030", - "Position" => "107", - "Binlog_Do_DB" => "Binlog_Do_DB", - "Binlog_Ignore_DB" => "Binlog_Ignore_DB", - ) - ); - $server_slave_replication = array( - array( - "File" => "slave-bin.000030", - "Position" => "slave_Position", - "Binlog_Do_DB" => "slave__Do_DB", - "Binlog_Ignore_DB" => "slave_Binlog_Ignore_DB", - ) - ); $slave_host = array( array('Server_id'=>'Server_id1', 'Host'=>'Host1'), @@ -87,22 +72,6 @@ class PMA_ServerReplication_Test extends PHPUnit_Framework_TestCase ); $fetchResult = array( - array( - "SHOW MASTER STATUS", - null, - null, - null, - 0, - $server_master_replication - ), - array( - "SHOW SLAVE STATUS", - null, - null, - null, - 0, - $server_slave_replication - ), array( "SHOW SLAVE HOSTS", null, @@ -145,15 +114,7 @@ class PMA_ServerReplication_Test extends PHPUnit_Framework_TestCase global $master_variables_oks; global $server_master_replication; global $strReplicationStatus_master; - - $server_master_replication = array( - array( - "File" => "master-bin.000030", - "Position" => "107", - "Binlog_Do_DB" => "Binlog_Do_DB", - "Binlog_Ignore_DB" => "Binlog_Ignore_DB", - ) - ); + $master_variables_alerts = null; $master_variables_oks = null; $strReplicationStatus_master = null; @@ -272,43 +233,6 @@ class PMA_ServerReplication_Test extends PHPUnit_Framework_TestCase public function testPMAGetHtmlForSlaveConfiguration() { global $server_slave_replication; - $server_slave_replication = array( - array( - 'Slave_IO_State' => 'running', - 'Master_Host' => 'locahost', - 'Master_User' => 'Master_User', - 'Master_Port' => '1002', - 'Connect_Retry' => 'Connect_Retry', - 'Master_Log_File' => 'Master_Log_File', - 'Read_Master_Log_Pos' => 'Read_Master_Log_Pos', - 'Relay_Log_File' => 'Relay_Log_File', - 'Relay_Log_Pos' => 'Relay_Log_Pos', - 'Relay_Master_Log_File' => 'Relay_Master_Log_File', - 'Slave_IO_Running' => 'NO', - 'Slave_SQL_Running' => 'NO', - 'Replicate_Do_DB' => 'Replicate_Do_DB', - 'Replicate_Ignore_DB' => 'Replicate_Ignore_DB', - 'Replicate_Do_Table' => 'Replicate_Do_Table', - 'Replicate_Ignore_Table' => 'Replicate_Ignore_Table', - 'Replicate_Wild_Do_Table' => 'Replicate_Wild_Do_Table', - 'Replicate_Wild_Ignore_Table' => 'Replicate_Wild_Ignore_Table', - 'Last_Errno' => 'Last_Errno', - 'Last_Error' => 'Last_Error', - 'Skip_Counter' => 'Skip_Counter', - 'Exec_Master_Log_Pos' => 'Exec_Master_Log_Pos', - 'Relay_Log_Space' => 'Relay_Log_Space', - 'Until_Condition' => 'Until_Condition', - 'Until_Log_File' => 'Until_Log_File', - 'Until_Log_Pos' => 'Until_Log_Pos', - 'Master_SSL_Allowed' => 'Master_SSL_Allowed', - 'Master_SSL_CA_File' => 'Master_SSL_CA_File', - 'Master_SSL_CA_Path' => 'Master_SSL_CA_Path', - 'Master_SSL_Cert' => 'Master_SSL_Cert', - 'Master_SSL_Cipher' => 'Master_SSL_Cipher', - 'Master_SSL_Key' => 'Master_SSL_Key', - 'Seconds_Behind_Master' => 'Seconds_Behind_Master', - ) - ); //Call the test function $html = PMA_getHtmlForSlaveConfiguration(