Replace spaces with tabs
[lhc/web/wiklou.git] / maintenance / fuzz-tester.php
index ce21e77..89a88e6 100644 (file)
@@ -139,11 +139,7 @@ Wiki configuration for testing:
 
   // Install & enable Special Page extensions to increase code coverage. E.g.:
   require_once("extensions/Cite/SpecialCite.php");
-  require_once("extensions/Filepath/SpecialFilepath.php");
-  require_once("extensions/Makebot/Makebot.php");
-  require_once("extensions/Makesysop/SpecialMakesysop.php");
   require_once("extensions/Renameuser/SpecialRenameuser.php");
-  require_once("extensions/LinkSearch/LinkSearch.php");
   // --------- End ---------
 
   If you want to try E_STRICT error logging, add this to the above:
@@ -816,6 +812,13 @@ class wikiFuzz {
                }
        }
 
+       /**
+        * Returns the matched character slash-escaped as in a C string
+        * Helper for makeTitleSafe callback
+        */
+       static private function stringEscape( $matches ) {
+               return sprintf( "\\x%02x", ord( $matches[1] ) );
+       }
 
        /**
         ** Strips out the stuff that Mediawiki balks at in a page's title.
@@ -824,13 +827,7 @@ class wikiFuzz {
        static public function makeTitleSafe( $str ) {
                $legalTitleChars = " %!\"$&'()*,\\-.\\/0-9:;=?@A-Z\\\\^_`a-z~\\x80-\\xFF";
                return preg_replace_callback(
-                               "/([^$legalTitleChars])/",
-                               create_function(
-                                       // single quotes are essential here,
-                                       // or alternative escape all $ as \$
-                                       '$matches',
-                                       'return sprintf( "\\x%02x", ord( $matches[1] ) );'
-                                       ),
+                               "/([^$legalTitleChars])/", 'wikiFuzz::stringEscape',
                                $str );
        }
 
@@ -1045,18 +1042,18 @@ class prefixindexTest extends pageTest {
 
                $this->params = array (
                                "title"         => "Special:Prefixindex",
-                               "namespace"     => wikiFuzz::randnum( -10, 101 ),
+                               "namespace"     => wikiFuzz::randnum( 101, -10 ),
                                "Go"            => wikiFuzz::makeFuzz( 2 )
                                );
 
                // sometimes we want 'prefix', sometimes we want 'from', and sometimes we want nothing.
                if ( wikiFuzz::randnum( 3 ) == 0 ) {
                        $this->params["prefix"] = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                                wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) );
+                                                                                                wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
                }
                if ( wikiFuzz::randnum( 3 ) == 0 ) {
                        $this->params["from"]   = wikiFuzz::chooseInput( array( "-1", "-----'--------0", "+++--+1",
-                                                                                               wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) );
+                                                                                               wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
                }
        }
 }
@@ -1368,7 +1365,7 @@ class viewPageTest extends pageTest {
 
                // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
                if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               else if ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
+               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
 
                // Raw pages cannot really be validated
                if ( $this->params["action"] == "raw" ) unset( $this->params["action"] );
@@ -1402,7 +1399,7 @@ class specialAllmessagesTest extends pageTest {
 /**
  ** a page test for "Special:Newpages".
  */
-class specialNewpages extends pageTest {
+class specialNewpagesPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Newpages";
 
@@ -1415,7 +1412,7 @@ class specialNewpages extends pageTest {
 
                // Tidy does not know how to valid atom or rss, so exclude from testing for the time being.
                if ( $this->params["feed"] == "atom" )     { unset( $this->params["feed"] ); }
-               else if ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
+               elseif ( $this->params["feed"] == "rss" ) { unset( $this->params["feed"] ); }
        }
 }
 
@@ -1488,7 +1485,7 @@ class specialBlockmeTest extends pageTest {
 
                // sometimes we specify "ip", and sometimes we don't.
                if ( wikiFuzz::randnum( 1 ) == 0 ) {
-                       $this->params["ip"] = wikiFuzz::chooseInput( array( "10.12.41.213", wikiFuzz::randnum( -10, 8134 ), wikiFuzz::makeFuzz( 2 ) ) );
+                       $this->params["ip"] = wikiFuzz::chooseInput( array( "10.12.41.213", wikiFuzz::randnum( 8134, -10 ), wikiFuzz::makeFuzz( 2 ) ) );
                }
        }
 }
@@ -1530,7 +1527,7 @@ class specialMovePage extends pageTest {
 /**
  ** a page test for "Special:Undelete"
  */
-class specialUndelete extends pageTest {
+class specialUndeletePageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Undelete";
 
@@ -1557,7 +1554,7 @@ class specialUndelete extends pageTest {
 /**
  ** a page test for "Special:Unlockdb"
  */
-class specialUnlockdb extends pageTest {
+class specialUnlockdbPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Unlockdb";
 
@@ -1578,7 +1575,7 @@ class specialUnlockdb extends pageTest {
 /**
  ** a page test for "Special:Lockdb"
  */
-class specialLockdb extends pageTest {
+class specialLockdbPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Lockdb";
 
@@ -1731,7 +1728,7 @@ class pageDeletion extends pageTest {
 /**
  ** a test for Revision Deletion.
  */
-class specialRevisionDelete extends pageTest {
+class specialRevisionDeletePageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Revisiondelete";
 
@@ -1762,7 +1759,7 @@ class specialRevisionDelete extends pageTest {
 /**
  ** a test for Special:Import.
  */
-class specialImport extends pageTest {
+class specialImportPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Import";
 
@@ -1860,7 +1857,7 @@ class profileInfo extends pageTest {
 /**
  ** a test for Special:Cite (extension Special page).
  */
-class specialCite extends pageTest {
+class specialCitePageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Cite";
 
@@ -1879,7 +1876,7 @@ class specialCite extends pageTest {
 /**
  ** a test for Special:Filepath (extension Special page).
  */
-class specialFilepath extends pageTest {
+class specialFilepathPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Filepath";
 
@@ -1890,56 +1887,10 @@ class specialFilepath extends pageTest {
 }
 
 
-/**
- ** a test for Special:Makebot (extension Special page).
- */
-class specialMakebot extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Makebot";
-
-               $this->params = array (
-                               "username" => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "dosearch" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "grant"    => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "comment"  => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "token"    => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["dosearch"] );
-               if ( wikiFuzz::randnum( 2 ) == 0 ) unset( $this->params["grant"] );
-               if ( wikiFuzz::randnum( 5 ) == 0 ) unset( $this->params["token"] );
-       }
-}
-
-
-/**
- ** a test for Special:Makesysop (extension Special page).
- */
-class specialMakesysop extends pageTest {
-       function __construct() {
-               $this->pagePath = "index.php?title=Special:Makesysop";
-
-               $this->params = array (
-                               "wpMakesysopUser"   => wikiFuzz::chooseInput( array( "Nickj2", "192.168.0.2", wikiFuzz::makeFuzz( 1 ) ) ),
-                               "action"            => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpMakesysopSubmit" => wikiFuzz::chooseInput( array( "0", "1", "++--34234", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpEditToken"       => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               "wpSetBureaucrat"   => wikiFuzz::chooseInput( array( "20398702394", "", wikiFuzz::makeFuzz( 2 ) ) ),
-                               );
-
-               // sometimes we don't want to specify certain parameters.
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpMakesysopSubmit"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpEditToken"] );
-               if ( wikiFuzz::randnum( 3 ) == 0 ) unset( $this->params["wpSetBureaucrat"] );
-       }
-}
-
-
 /**
  ** a test for Special:Renameuser (extension Special page).
  */
-class specialRenameuser extends pageTest {
+class specialRenameuserPageTest extends pageTest {
        function __construct() {
                $this->pagePath = "index.php?title=Special:Renameuser";
 
@@ -2062,18 +2013,18 @@ class api extends pageTest {
 
        // API watchlist feed mode.
        private static function feedwatchlistMode() {
-               // FIXME: add "wikiFuzz::makeFuzz(2)" as possible value below?
+               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible value below?
                return array ( "feedformat"    => wikiFuzz::chooseInput( array( "rss", "atom" ) ) );
        }
 
        // API query mode.
        private static function queryMode() {
-               // FIXME: add "wikiFuzz::makeFuzz(2)" as possible params for the elements below?
+               // @todo FIXME: Add "wikiFuzz::makeFuzz(2)" as possible params for the elements below?
                //        Suspect this will stuff up the tests more, but need to check.
                $params = array (
-                                        // FIXME: More titles.
+                                        // @todo FIXME: More titles.
                                         "titles"        => wikiFuzz::chooseInput( array( "Main Page" ) ),
-                                        // FIXME: More pageids.
+                                        // @todo FIXME: More pageids.
                                         "pageids"       => 1,
                                         "prop"          => wikiFuzz::chooseInput( array( "info", "revisions", "watchlist" ) ),
                                         "list"          => wikiFuzz::chooseInput( array( "allpages", "logevents", "watchlist", "usercontribs", "recentchanges", "backlinks", "embeddedin", "imagelinks" ) ),
@@ -2167,7 +2118,7 @@ class api extends pageTest {
                $this->params["action"] = $action;
 
                // Set the cookie:
-               // FIXME: need to get this cookie dynamically set, rather than hard-coded.
+               // @todo FIXME: Need to get this cookie dynamically set, rather than hard-coded.
                $this->cookie = "wikidbUserID=10001; wikidbUserName=Test; wikidb_session=178df0fe68c75834643af65dec9ec98a; wikidbToken=1adc6753d62c44aec950c024d7ae0540";
 
                // Output format
@@ -2191,7 +2142,7 @@ class GeSHi_Test extends pageTest {
                return "<source lang=\"" . $this->getLang() . "\" "
                           . ( wikiFuzz::randnum( 2 ) == 0 ? "line " : "" )
                           . ( wikiFuzz::randnum( 2 ) == 0 ? "strict " : "" )
-                          . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( -6000, 6000 ), wikiFuzz::makeFuzz( 2 ) ) )
+                          . "start=" . wikiFuzz::chooseInput( array( wikiFuzz::randnum( 6000, -6000 ), wikiFuzz::makeFuzz( 2 ) ) )
                           . ">"
                           . wikiFuzz::makeFuzz( 2 )
                           . "</source>";
@@ -2256,35 +2207,33 @@ function selectPageTest( $count ) {
                case 15: return new contributionsTest();
                case 16: return new viewPageTest();
                case 17: return new specialAllmessagesTest();
-               case 18: return new specialNewpages();
+               case 18: return new specialNewpagesPageTest();
                case 19: return new searchTest();
                case 20: return new redirectTest();
                case 21: return new confirmEmail();
                case 22: return new watchlistTest();
                case 23: return new specialBlockmeTest();
-               case 24: return new specialUndelete();
+               case 24: return new specialUndeletePageTest();
                case 25: return new specialMovePage();
-               case 26: return new specialUnlockdb();
-               case 27: return new specialLockdb();
+               case 26: return new specialUnlockdbPageTest();
+               case 27: return new specialLockdbPageTest();
                case 28: return new specialUserrights();
                case 29: return new pageProtectionForm();
                case 30: return new specialBlockip();
                case 31: return new imagepageTest();
                case 32: return new pageDeletion();
-               case 33: return new specialRevisionDelete();
-               case 34: return new specialImport();
+               case 33: return new specialRevisionDeletePageTest();
+               case 34: return new specialImportPageTest();
                case 35: return new thumbTest();
                case 36: return new trackbackTest();
                case 37: return new profileInfo();
-               case 38: return new specialCite();
-               case 39: return new specialFilepath();
-               case 40: return new specialMakebot();
-               case 41: return new specialMakesysop();
-               case 42: return new specialRenameuser();
-               case 43: return new specialLinksearch();
-               case 44: return new specialCategoryTree();
-               case 45: return new api();
-               case 45: return new specialChemicalsourcesTest();
+               case 38: return new specialCitePageTest();
+               case 39: return new specialFilepathPageTest();
+               case 40: return new specialRenameuserPageTest();
+               case 41: return new specialLinksearch();
+               case 42: return new specialCategoryTree();
+               case 43: return new api();
+               case 44: return new specialChemicalsourcesTest();
                default: return new editPageTest();
        }
 }
@@ -2351,7 +2300,7 @@ function saveTestAsPHP( pageTest $test, $filename ) {
                . "\$result=curl_exec(\$ch);\n"
                . "curl_close (\$ch);\n"
                . "print \$result;\n"
-               . "?>\n";
+               . "\n";
        saveFile( $str, $filename );
 }
 
@@ -2471,7 +2420,7 @@ function validateHTML( $text ) {
 
        curl_close ( $ch );
 
-       $valid = ( strpos( $result, "Failed validation" ) === false ? true : false );
+       $valid = ( strpos( $result, "Failed validation" ) === false );
 
        return array( $valid, $result );
 }
@@ -2508,8 +2457,8 @@ function dbErrorLogged() {
        // first time running this function
        if ( !isset( $filesize ) ) {
                // create log if it does not exist
-               if ( !file_exists( DB_ERROR_LOG_FILE ) ) {
-                       saveFile( "", DB_ERROR_LOG_FILE );
+               if ( DB_ERROR_LOG_FILE && !file_exists( DB_ERROR_LOG_FILE ) ) {
+                       saveFile( '', DB_ERROR_LOG_FILE );
                }
                $filesize = filesize( DB_ERROR_LOG_FILE );
                return false;
@@ -2701,7 +2650,7 @@ if ( !is_dir( DIRECTORY ) ) {
        mkdir ( DIRECTORY, 0700 );
 }
 // otherwise, we first retest the things that we have found in previous runs
-else if ( RERUN_OLD_TESTS ) {
+elseif ( RERUN_OLD_TESTS ) {
        rerunPreviousTests();
 }
 
@@ -2749,7 +2698,7 @@ for ( $count = 0; true; $count++ ) {
                }
                saveTest( $test, $testname );
                $num_errors += 1;
-       } else if ( KEEP_PASSED_TESTS ) {
+       } elseif ( KEEP_PASSED_TESTS ) {
                // print current time, with microseconds (matches "strace" format), and the test name.
                print " " . date( "H:i:s." ) . substr( current( explode( " ", microtime() ) ), 2 ) . " " . $testname;
                saveTest( $test, $testname );