Skip BrokenRedirectsPage query test under MySQL
authorAntoine Musso <hashar@users.mediawiki.org>
Mon, 16 Jan 2012 10:33:24 +0000 (10:33 +0000)
committerAntoine Musso <hashar@users.mediawiki.org>
Mon, 16 Jan 2012 10:33:24 +0000 (10:33 +0000)
The MySQL backend, when using temporary tables, does not support referencing
a table which was already open.
http://bugs.mysql.com/bug.php?id=10327

This patch skip BrokenRedirectsPage on MySQL as reported on r102411.

tests/phpunit/includes/specials/QueryAllSpecialPagesTest.php

index 95d60e9..a33c7b6 100644 (file)
@@ -22,6 +22,16 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase {
                'LinkSearchPage'
        );
 
+       /**
+        * Pages whose query use the same DB table more than once.
+        * This is used to skip testing those pages when run against a MySQL backend
+        * which does not support reopening a temporary table. See upstream bug:
+        * http://bugs.mysql.com/bug.php?id=10327
+        */
+       protected $reopensTempTable = array(
+               'BrokenRedirects',
+       );
+
        /**
         * Initialize all query page objects
         */
@@ -42,8 +52,20 @@ class QueryAllSpecialPagesTest extends MediaWikiTestCase {
         * @group Database
         */
        function testQuerypageSqlQuery() {
+               global $wgDBtype;
+
                foreach( $this->queryPages as $page ) {
 
+                       // With MySQL, skips special pages reopening a temporary table
+                       // See http://bugs.mysql.com/bug.php?id=10327
+                       if(
+                               $wgDBtype === 'mysql'
+                               && in_array( $page->getName(), $this->reopensTempTable )
+                       ) {
+                                       $this->markTestSkipped( "SQL query for page {$page->getName()} can not be tested on MySQL backend (it reopens a temporary table)" );
+                                       continue;
+                               }
+
                        $msg = "SQL query for page {$page->getName()} should give a result wrapper object" ;
 
                        $result = $page->reallyDoQuery( 50 );