X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fsession%2FBotPasswordSessionProviderTest.php;h=d76d9dfc8a98934d09d4713c4ef3af0ba83a232e;hb=425090d4eb0b9de89ad6818f40ab8295368f645e;hp=e1ba0ba7f6e2beda9484726b0e703a0c9eb7a196;hpb=9193046880a4f1db46f7376c14decc9f952aa01e;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php index e1ba0ba7f6..9bc41c06b3 100644 --- a/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php +++ b/tests/phpunit/includes/session/BotPasswordSessionProviderTest.php @@ -18,75 +18,74 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { private function getProvider( $name = null, $prefix = null ) { global $wgSessionProviders; - $params = array( + $params = [ 'priority' => 40, 'sessionCookieName' => $name, - 'sessionCookieOptions' => array(), - ); + 'sessionCookieOptions' => [], + ]; if ( $prefix !== null ) { $params['sessionCookieOptions']['prefix'] = $prefix; } if ( !$this->config ) { - $this->config = new \HashConfig( array( + $this->config = new \HashConfig( [ 'CookiePrefix' => 'wgCookiePrefix', 'EnableBotPasswords' => true, 'BotPasswordsDatabase' => false, - 'SessionProviders' => $wgSessionProviders + array( - 'MediaWiki\\Session\\BotPasswordSessionProvider' => array( - 'class' => 'MediaWiki\\Session\\BotPasswordSessionProvider', - 'args' => array( $params ), - ) - ), - ) ); + 'SessionProviders' => $wgSessionProviders + [ + BotPasswordSessionProvider::class => [ + 'class' => BotPasswordSessionProvider::class, + 'args' => [ $params ], + ] + ], + ] ); } - $manager = new SessionManager( array( - 'config' => new \MultiConfig( array( $this->config, \RequestContext::getMain()->getConfig() ) ), + $manager = new SessionManager( [ + 'config' => new \MultiConfig( [ $this->config, \RequestContext::getMain()->getConfig() ] ), 'logger' => new \Psr\Log\NullLogger, 'store' => new TestBagOStuff, - ) ); + ] ); - return $manager->getProvider( 'MediaWiki\\Session\\BotPasswordSessionProvider' ); + return $manager->getProvider( BotPasswordSessionProvider::class ); } protected function setUp() { parent::setUp(); - $this->setMwGlobals( array( + $this->setMwGlobals( [ 'wgEnableBotPasswords' => true, 'wgBotPasswordsDatabase' => false, 'wgCentralIdLookupProvider' => 'local', - 'wgGrantPermissions' => array( - 'test' => array( 'read' => true ), - ), - ) ); + 'wgGrantPermissions' => [ + 'test' => [ 'read' => true ], + ], + ] ); } - public function addDBData() { + public function addDBDataOnce() { $passwordFactory = new \PasswordFactory(); $passwordFactory->init( \RequestContext::getMain()->getConfig() ); - // A is unsalted MD5 (thus fast) ... we don't care about security here, this is test only - $passwordFactory->setDefaultType( 'A' ); - $pwhash = $passwordFactory->newFromPlaintext( 'foobaz' ); + $passwordHash = $passwordFactory->newFromPlaintext( 'foobaz' ); - $userId = \CentralIdLookup::factory( 'local' )->centralIdFromName( 'UTSysop' ); + $sysop = static::getTestSysop()->getUser(); + $userId = \CentralIdLookup::factory( 'local' )->centralIdFromName( $sysop->getName() ); $dbw = wfGetDB( DB_MASTER ); $dbw->delete( 'bot_passwords', - array( 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider' ), + [ 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider' ], __METHOD__ ); $dbw->insert( 'bot_passwords', - array( + [ 'bp_user' => $userId, 'bp_app_id' => 'BotPasswordSessionProvider', - 'bp_password' => $pwhash->toString(), + 'bp_password' => $passwordHash->toString(), 'bp_token' => 'token!', 'bp_restrictions' => '{"IPAddresses":["127.0.0.0/8"]}', 'bp_grants' => '["test"]', - ), + ], __METHOD__ ); } @@ -103,9 +102,9 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { } try { - $provider = new BotPasswordSessionProvider( array( + $provider = new BotPasswordSessionProvider( [ 'priority' => SessionInfo::MIN_PRIORITY - 1 - ) ); + ] ); $this->fail( 'Expected exception not thrown' ); } catch ( \InvalidArgumentException $ex ) { $this->assertSame( @@ -115,9 +114,9 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { } try { - $provider = new BotPasswordSessionProvider( array( + $provider = new BotPasswordSessionProvider( [ 'priority' => SessionInfo::MAX_PRIORITY + 1 - ) ); + ] ); $this->fail( 'Expected exception not thrown' ); } catch ( \InvalidArgumentException $ex ) { $this->assertSame( @@ -126,35 +125,35 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { ); } - $provider = new BotPasswordSessionProvider( array( + $provider = new BotPasswordSessionProvider( [ 'priority' => 40 - ) ); + ] ); $priv = \TestingAccessWrapper::newFromObject( $provider ); $this->assertSame( 40, $priv->priority ); $this->assertSame( '_BPsession', $priv->sessionCookieName ); - $this->assertSame( array(), $priv->sessionCookieOptions ); + $this->assertSame( [], $priv->sessionCookieOptions ); - $provider = new BotPasswordSessionProvider( array( + $provider = new BotPasswordSessionProvider( [ 'priority' => 40, 'sessionCookieName' => null, - ) ); + ] ); $priv = \TestingAccessWrapper::newFromObject( $provider ); $this->assertSame( '_BPsession', $priv->sessionCookieName ); - $provider = new BotPasswordSessionProvider( array( + $provider = new BotPasswordSessionProvider( [ 'priority' => 40, 'sessionCookieName' => 'Foo', - 'sessionCookieOptions' => array( 'Bar' ), - ) ); + 'sessionCookieOptions' => [ 'Bar' ], + ] ); $priv = \TestingAccessWrapper::newFromObject( $provider ); $this->assertSame( 'Foo', $priv->sessionCookieName ); - $this->assertSame( array( 'Bar' ), $priv->sessionCookieOptions ); + $this->assertSame( [ 'Bar' ], $priv->sessionCookieOptions ); } public function testBasics() { $provider = $this->getProvider(); - $this->assertTrue( $provider->persistsSessionID() ); + $this->assertTrue( $provider->persistsSessionId() ); $this->assertFalse( $provider->canChangeUser() ); $this->assertNull( $provider->newSessionInfo() ); @@ -172,7 +171,7 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { } $info = $provider->provideSessionInfo( $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\SessionInfo', $info ); + $this->assertInstanceOf( SessionInfo::class, $info ); $this->assertSame( 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', $info->getId() ); $this->config->set( 'EnableBotPasswords', false ); @@ -184,26 +183,26 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { public function testNewSessionInfoForRequest() { $provider = $this->getProvider(); - $user = \User::newFromName( 'UTSysop' ); - $request = $this->getMock( 'FauxRequest', array( 'getIP' ) ); + $user = static::getTestSysop()->getUser(); + $request = $this->getMock( 'FauxRequest', [ 'getIP' ] ); $request->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '127.0.0.1' ) ); $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' ); $session = $provider->newSessionForRequest( $user, $bp, $request ); - $this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session ); + $this->assertInstanceOf( Session::class, $session ); $this->assertEquals( $session->getId(), $request->getSession()->getId() ); $this->assertEquals( $user->getName(), $session->getUser()->getName() ); - $this->assertEquals( array( + $this->assertEquals( [ 'centralId' => $bp->getUserCentralId(), 'appId' => $bp->getAppId(), 'token' => $bp->getToken(), - 'rights' => array( 'read' ), - ), $session->getProviderMetadata() ); + 'rights' => [ 'read' ], + ], $session->getProviderMetadata() ); - $this->assertEquals( array( 'read' ), $session->getAllowedUserRights() ); + $this->assertEquals( [ 'read' ], $session->getAllowedUserRights() ); } public function testCheckSessionInfo() { @@ -211,23 +210,23 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $provider = $this->getProvider(); $provider->setLogger( $logger ); - $user = \User::newFromName( 'UTSysop' ); - $request = $this->getMock( 'FauxRequest', array( 'getIP' ) ); + $user = static::getTestSysop()->getUser(); + $request = $this->getMock( 'FauxRequest', [ 'getIP' ] ); $request->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '127.0.0.1' ) ); $bp = \BotPassword::newFromUser( $user, 'BotPasswordSessionProvider' ); - $data = array( + $data = [ 'provider' => $provider, 'id' => 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa', 'userInfo' => UserInfo::newFromUser( $user, true ), 'persisted' => false, - 'metadata' => array( + 'metadata' => [ 'centralId' => $bp->getUserCentralId(), 'appId' => $bp->getAppId(), 'token' => $bp->getToken(), - ), - ); + ], + ]; $dataMD = $data['metadata']; foreach ( array_keys( $data['metadata'] ) as $key ) { @@ -237,9 +236,9 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $metadata = $info->getProviderMetadata(); $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) ); - $this->assertSame( array( - array( LogLevel::INFO, 'Session "{session}": Missing metadata: {missing}' ) - ), $logger->getBuffer() ); + $this->assertSame( [ + [ LogLevel::INFO, 'Session "{session}": Missing metadata: {missing}' ] + ], $logger->getBuffer() ); $logger->clearBuffer(); } @@ -248,9 +247,9 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data ); $metadata = $info->getProviderMetadata(); $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) ); - $this->assertSame( array( - array( LogLevel::INFO, 'Session "{session}": No BotPassword for {centralId} {appId}' ), - ), $logger->getBuffer() ); + $this->assertSame( [ + [ LogLevel::INFO, 'Session "{session}": No BotPassword for {centralId} {appId}' ], + ], $logger->getBuffer() ); $logger->clearBuffer(); $data['metadata'] = $dataMD; @@ -258,27 +257,81 @@ class BotPasswordSessionProviderTest extends MediaWikiTestCase { $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data ); $metadata = $info->getProviderMetadata(); $this->assertFalse( $provider->refreshSessionInfo( $info, $request, $metadata ) ); - $this->assertSame( array( - array( LogLevel::INFO, 'Session "{session}": BotPassword token check failed' ), - ), $logger->getBuffer() ); + $this->assertSame( [ + [ LogLevel::INFO, 'Session "{session}": BotPassword token check failed' ], + ], $logger->getBuffer() ); $logger->clearBuffer(); - $request2 = $this->getMock( 'FauxRequest', array( 'getIP' ) ); + $request2 = $this->getMock( 'FauxRequest', [ 'getIP' ] ); $request2->expects( $this->any() )->method( 'getIP' ) ->will( $this->returnValue( '10.0.0.1' ) ); $data['metadata'] = $dataMD; $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data ); $metadata = $info->getProviderMetadata(); $this->assertFalse( $provider->refreshSessionInfo( $info, $request2, $metadata ) ); - $this->assertSame( array( - array( LogLevel::INFO, 'Session "{session}": Restrictions check failed' ), - ), $logger->getBuffer() ); + $this->assertSame( [ + [ LogLevel::INFO, 'Session "{session}": Restrictions check failed' ], + ], $logger->getBuffer() ); $logger->clearBuffer(); $info = new SessionInfo( SessionInfo::MIN_PRIORITY, $data ); $metadata = $info->getProviderMetadata(); $this->assertTrue( $provider->refreshSessionInfo( $info, $request, $metadata ) ); - $this->assertSame( array(), $logger->getBuffer() ); - $this->assertEquals( $dataMD + array( 'rights' => array( 'read' ) ), $metadata ); + $this->assertSame( [], $logger->getBuffer() ); + $this->assertEquals( $dataMD + [ 'rights' => [ 'read' ] ], $metadata ); + } + + public function testGetAllowedUserRights() { + $logger = new \TestLogger( true ); + $provider = $this->getProvider(); + $provider->setLogger( $logger ); + + $backend = TestUtils::getDummySessionBackend(); + $backendPriv = \TestingAccessWrapper::newFromObject( $backend ); + + try { + $provider->getAllowedUserRights( $backend ); + $this->fail( 'Expected exception not thrown' ); + } catch ( \InvalidArgumentException $ex ) { + $this->assertSame( 'Backend\'s provider isn\'t $this', $ex->getMessage() ); + } + + $backendPriv->provider = $provider; + $backendPriv->providerMetadata = [ 'rights' => [ 'foo', 'bar', 'baz' ] ]; + $this->assertSame( [ 'foo', 'bar', 'baz' ], $provider->getAllowedUserRights( $backend ) ); + $this->assertSame( [], $logger->getBuffer() ); + + $backendPriv->providerMetadata = [ 'foo' => 'bar' ]; + $this->assertSame( [], $provider->getAllowedUserRights( $backend ) ); + $this->assertSame( [ + [ + LogLevel::DEBUG, + 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' . + 'No provider metadata, returning no rights allowed' + ] + ], $logger->getBuffer() ); + $logger->clearBuffer(); + + $backendPriv->providerMetadata = [ 'rights' => 'bar' ]; + $this->assertSame( [], $provider->getAllowedUserRights( $backend ) ); + $this->assertSame( [ + [ + LogLevel::DEBUG, + 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' . + 'No provider metadata, returning no rights allowed' + ] + ], $logger->getBuffer() ); + $logger->clearBuffer(); + + $backendPriv->providerMetadata = null; + $this->assertSame( [], $provider->getAllowedUserRights( $backend ) ); + $this->assertSame( [ + [ + LogLevel::DEBUG, + 'MediaWiki\\Session\\BotPasswordSessionProvider::getAllowedUserRights: ' . + 'No provider metadata, returning no rights allowed' + ] + ], $logger->getBuffer() ); + $logger->clearBuffer(); } }