Merge "Update session log messages"
[lhc/web/wiklou.git] / tests / phpunit / includes / session / CookieSessionProviderTest.php
index 46fb0dd..f5c8b05 100644 (file)
@@ -4,6 +4,7 @@ namespace MediaWiki\Session;
 
 use MediaWikiTestCase;
 use User;
+use Psr\Log\LogLevel;
 
 /**
  * @group Session
@@ -159,7 +160,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        'cookieOptions' => array( 'prefix' => 'x' ),
                );
                $provider = new CookieSessionProvider( $params );
-               $provider->setLogger( new \TestLogger() );
+               $logger = new \TestLogger( true );
+               $provider->setLogger( $logger );
                $provider->setConfig( $this->getConfig() );
                $provider->setManager( new SessionManager() );
 
@@ -174,6 +176,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $request = new \FauxRequest();
                $info = $provider->provideSessionInfo( $request );
                $this->assertNull( $info );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // Session key only
                $request = new \FauxRequest();
@@ -184,8 +188,17 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertNotNull( $info );
                $this->assertSame( $params['priority'], $info->getPriority() );
                $this->assertSame( $sessionId, $info->getId() );
-               $this->assertNull( $info->getUserInfo() );
+               $this->assertNotNull( $info->getUserInfo() );
+               $this->assertSame( 0, $info->getUserInfo()->getId() );
+               $this->assertNull( $info->getUserInfo()->getName() );
                $this->assertFalse( $info->forceHTTPS() );
+               $this->assertSame( array(
+                       array(
+                               LogLevel::DEBUG,
+                               'Session "{session}" requested without UserID cookie',
+                       ),
+               ), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User, no session key
                $request = new \FauxRequest();
@@ -201,6 +214,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $id, $info->getUserInfo()->getId() );
                $this->assertSame( $name, $info->getUserInfo()->getName() );
                $this->assertFalse( $info->forceHTTPS() );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User and session key
                $request = new \FauxRequest();
@@ -217,6 +232,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $id, $info->getUserInfo()->getId() );
                $this->assertSame( $name, $info->getUserInfo()->getName() );
                $this->assertFalse( $info->forceHTTPS() );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User with bad token
                $request = new \FauxRequest();
@@ -227,6 +244,13 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                ), '' );
                $info = $provider->provideSessionInfo( $request );
                $this->assertNull( $info );
+               $this->assertSame( array(
+                       array(
+                               LogLevel::WARNING,
+                               'Session "{session}" requested with invalid Token cookie.'
+                       ),
+               ), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User id with no token
                $request = new \FauxRequest();
@@ -243,6 +267,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $id, $info->getUserInfo()->getId() );
                $this->assertSame( $name, $info->getUserInfo()->getName() );
                $this->assertFalse( $info->forceHTTPS() );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                $request = new \FauxRequest();
                $request->setCookies( array(
@@ -250,6 +276,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                ), '' );
                $info = $provider->provideSessionInfo( $request );
                $this->assertNull( $info );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User and session key, with forceHTTPS flag
                $request = new \FauxRequest();
@@ -267,6 +295,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $id, $info->getUserInfo()->getId() );
                $this->assertSame( $name, $info->getUserInfo()->getName() );
                $this->assertTrue( $info->forceHTTPS() );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // Invalid user id
                $request = new \FauxRequest();
@@ -276,6 +306,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                ), '' );
                $info = $provider->provideSessionInfo( $request );
                $this->assertNull( $info );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User id with matching name
                $request = new \FauxRequest();
@@ -293,6 +325,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $id, $info->getUserInfo()->getId() );
                $this->assertSame( $name, $info->getUserInfo()->getName() );
                $this->assertFalse( $info->forceHTTPS() );
+               $this->assertSame( array(), $logger->getBuffer() );
+               $logger->clearBuffer();
 
                // User id with wrong name
                $request = new \FauxRequest();
@@ -303,6 +337,13 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                ), '' );
                $info = $provider->provideSessionInfo( $request );
                $this->assertNull( $info );
+               $this->assertSame( array(
+                       array(
+                               LogLevel::WARNING,
+                               'Session "{session}" requested with mismatched UserID and UserName cookies.',
+                       ),
+               ), $logger->getBuffer() );
+               $logger->clearBuffer();
        }
 
        public function testGetVaryCookies() {
@@ -350,7 +391,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $provider->setManager( SessionManager::singleton() );
 
                $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $store = new \HashBagOStuff();
+               $store = new TestBagOStuff();
                $user = User::newFromName( 'UTSysop' );
                $anon = new User;
 
@@ -379,10 +420,10 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $request = new \FauxRequest();
                $provider->persistSession( $backend, $request );
                $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserID' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xToken' ) );
-               $this->assertNull( $request->response()->getCookie( 'forceHTTPS' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
+               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
                $this->assertSame( array(), $backend->getData() );
 
                // Logged-in user, no remember
@@ -394,8 +435,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
                $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
                $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xToken' ) );
-               $this->assertNull( $request->response()->getCookie( 'forceHTTPS' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
                $this->assertSame( array(), $backend->getData() );
 
                // Logged-in user, remember
@@ -431,7 +472,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        'cookieOptions' => array( 'prefix' => 'x' ),
                ) );
                $config = $this->getConfig();
-               $config->set( 'CookieSecure', false );
+               $config->set( 'CookieSecure', $secure );
                $provider->setLogger( new \TestLogger() );
                $provider->setConfig( $config );
                $provider->setManager( SessionManager::singleton() );
@@ -448,7 +489,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                                'persisted' => true,
                                'idIsSafe' => true,
                        ) ),
-                       new \EmptyBagOStuff(),
+                       new TestBagOStuff(),
                        new \Psr\Log\NullLogger(),
                        10
                );
@@ -484,14 +525,14 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                        'xUserName' => array(
                                'value' => $user->getName(),
                        ) + $defaults,
-                       'xToken' => !$remember ? null : array(
-                               'value' => $user->getToken(),
-                               'expire' => $extendedExpiry,
+                       'xToken' => array(
+                               'value' => $remember ? $user->getToken() : '',
+                               'expire' => $remember ? $extendedExpiry : -31536000,
                        ) + $defaults,
-                       'forceHTTPS' => !$secure ? null : array(
-                               'value' => 'true',
+                       'forceHTTPS' => array(
+                               'value' => $secure ? 'true' : '',
                                'secure' => false,
-                               'expire' => $remember ? $defaults['expire'] : null,
+                               'expire' => $secure ? $remember ? $defaults['expire'] : 0 : -31536000,
                        ) + $defaults,
                );
                foreach ( $expect as $key => $value ) {
@@ -540,7 +581,7 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $provider->setManager( SessionManager::singleton() );
 
                $sessionId = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa';
-               $store = new \HashBagOStuff();
+               $store = new TestBagOStuff();
                $user = User::newFromName( 'UTSysop' );
                $anon = new User;
 
@@ -568,10 +609,10 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $request = new \FauxRequest();
                $provider->persistSession( $backend, $request );
                $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserID' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xToken' ) );
-               $this->assertNull( $request->response()->getCookie( 'forceHTTPS' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
+               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
                $this->assertSame( array(), $backend->getData() );
 
                $provider->persistSession( $backend, $this->getSentRequest() );
@@ -606,8 +647,8 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
                $this->assertSame( $sessionId, $request->response()->getCookie( 'MySessionName' ) );
                $this->assertSame( (string)$user->getId(), $request->response()->getCookie( 'xUserID' ) );
                $this->assertSame( $user->getName(), $request->response()->getCookie( 'xUserName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xToken' ) );
-               $this->assertNull( $request->response()->getCookie( 'forceHTTPS' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
                $this->assertSame( 'bar!', $request->response()->getCookie( 'xbar' ) );
                $this->assertSame( (string)$loggedOut, $request->response()->getCookie( 'xLoggedOut' ) );
                $this->assertEquals( array(
@@ -675,11 +716,11 @@ class CookieSessionProviderTest extends MediaWikiTestCase {
 
                $request = new \FauxRequest();
                $provider->unpersistSession( $request );
-               $this->assertNull( $request->response()->getCookie( 'MySessionName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserID' ) );
-               $this->assertNull( $request->response()->getCookie( 'xUserName' ) );
-               $this->assertNull( $request->response()->getCookie( 'xToken' ) );
-               $this->assertNull( $request->response()->getCookie( 'forceHTTPS' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'MySessionName' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xUserID' ) );
+               $this->assertSame( null, $request->response()->getCookie( 'xUserName' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'xToken' ) );
+               $this->assertSame( '', $request->response()->getCookie( 'forceHTTPS' ) );
 
                $provider->unpersistSession( $this->getSentRequest() );
        }