%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/tests/phpunit/includes/password/ |
Current File : //www/varak.net/wiki.varak.net/tests/phpunit/includes/password/PasswordPolicyChecksTest.php |
<?php /** * Testing password-policy check functions * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file */ class PasswordPolicyChecksTest extends MediaWikiTestCase { /** * @covers PasswordPolicyChecks::checkMinimalPasswordLength */ public function testCheckMinimalPasswordLength() { $statusOK = PasswordPolicyChecks::checkMinimalPasswordLength( 3, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertTrue( $statusOK->isGood(), 'Password is longer than minimal policy' ); $statusShort = PasswordPolicyChecks::checkMinimalPasswordLength( 10, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertFalse( $statusShort->isGood(), 'Password is shorter than minimal policy' ); $this->assertTrue( $statusShort->isOK(), 'Password is shorter than minimal policy, not fatal' ); } /** * @covers PasswordPolicyChecks::checkMinimumPasswordLengthToLogin */ public function testCheckMinimumPasswordLengthToLogin() { $statusOK = PasswordPolicyChecks::checkMinimumPasswordLengthToLogin( 3, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertTrue( $statusOK->isGood(), 'Password is longer than minimal policy' ); $statusShort = PasswordPolicyChecks::checkMinimumPasswordLengthToLogin( 10, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertFalse( $statusShort->isGood(), 'Password is shorter than minimum login policy' ); $this->assertFalse( $statusShort->isOK(), 'Password is shorter than minimum login policy, fatal' ); } /** * @covers PasswordPolicyChecks::checkMaximalPasswordLength */ public function testCheckMaximalPasswordLength() { $statusOK = PasswordPolicyChecks::checkMaximalPasswordLength( 100, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertTrue( $statusOK->isGood(), 'Password is shorter than maximal policy' ); $statusLong = PasswordPolicyChecks::checkMaximalPasswordLength( 4, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertFalse( $statusLong->isGood(), 'Password is longer than maximal policy' ); $this->assertFalse( $statusLong->isOK(), 'Password is longer than maximal policy, fatal' ); } /** * @covers PasswordPolicyChecks::checkPasswordCannotMatchUsername */ public function testCheckPasswordCannotMatchUsername() { $statusOK = PasswordPolicyChecks::checkPasswordCannotMatchUsername( 1, // policy value User::newFromName( 'user' ), // User 'password' // password ); $this->assertTrue( $statusOK->isGood(), 'Password does not match username' ); $statusLong = PasswordPolicyChecks::checkPasswordCannotMatchUsername( 1, // policy value User::newFromName( 'user' ), // User 'user' // password ); $this->assertFalse( $statusLong->isGood(), 'Password matches username' ); $this->assertTrue( $statusLong->isOK(), 'Password matches username, not fatal' ); } /** * @covers PasswordPolicyChecks::checkPasswordCannotMatchBlacklist */ public function testCheckPasswordCannotMatchBlacklist() { $statusOK = PasswordPolicyChecks::checkPasswordCannotMatchBlacklist( true, // policy value User::newFromName( 'Username' ), // User 'AUniquePassword' // password ); $this->assertTrue( $statusOK->isGood(), 'Password is not on blacklist' ); $statusLong = PasswordPolicyChecks::checkPasswordCannotMatchBlacklist( true, // policy value User::newFromName( 'Useruser1' ), // User 'Passpass1' // password ); $this->assertFalse( $statusLong->isGood(), 'Password matches blacklist' ); $this->assertTrue( $statusLong->isOK(), 'Password matches blacklist, not fatal' ); } public static function providePopularBlacklist() { return [ [ false, 'sitename' ], [ false, 'password' ], [ false, '12345' ], [ true, 'hqY98gCZ6qM8s8' ], ]; } /** * @covers PasswordPolicyChecks::checkPopularPasswordBlacklist * @dataProvider providePopularBlacklist */ public function testCheckPopularPasswordBlacklist( $expected, $password ) { global $IP; $this->setMwGlobals( [ 'wgSitename' => 'sitename', 'wgPopularPasswordFile' => "$IP/includes/password/commonpasswords.cdb" ] ); $user = User::newFromName( 'username' ); $status = PasswordPolicyChecks::checkPopularPasswordBlacklist( PHP_INT_MAX, $user, $password ); $this->assertSame( $expected, $status->isGood() ); } /** * Verify that all password policy description messages actually exist. * Messages used on Special:PasswordPolicies */ public function testPasswordPolicyDescriptionsExist() { global $wgPasswordPolicy; $lang = Language::factory( 'en' ); foreach ( array_keys( $wgPasswordPolicy['checks'] ) as $check ) { $msgKey = 'passwordpolicies-policy-' . strtolower( $check ); $this->assertTrue( wfMessage( $msgKey )->useDatabase( false )->inLanguage( $lang )->exists(), "Message '$msgKey' required by '$check' must exist" ); } } }