$session = $manager->getSessionForRequest( $request );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $idEmpty, $session->getId() );
- $this->assertNull( $manager->getPersistedSessionId( $request ) );
// Both providers return info, picks best one
$request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 1, array(
$session = $manager->getSessionForRequest( $request );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $id2, $session->getId() );
- $this->assertSame( $id2, $manager->getPersistedSessionId( $request ) );
$request->info1 = new SessionInfo( SessionInfo::MIN_PRIORITY + 2, array(
'provider' => $provider1,
$session = $manager->getSessionForRequest( $request );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $id1, $session->getId() );
- $this->assertSame( $id1, $manager->getPersistedSessionId( $request ) );
// Tied priorities
$request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
$this->assertContains( $request->info1, $ex->sessionInfos );
$this->assertContains( $request->info2, $ex->sessionInfos );
}
- try {
- $manager->getPersistedSessionId( $request );
- $this->fail( 'Expcected exception not thrown' );
- } catch ( \OverFlowException $ex ) {
- $this->assertStringStartsWith(
- 'Multiple sessions for this request tied for top priority: ',
- $ex->getMessage()
- );
- $this->assertCount( 2, $ex->sessionInfos );
- $this->assertContains( $request->info1, $ex->sessionInfos );
- $this->assertContains( $request->info2, $ex->sessionInfos );
- }
// Bad provider
$request->info1 = new SessionInfo( SessionInfo::MAX_PRIORITY, array(
$ex->getMessage()
);
}
- try {
- $manager->getPersistedSessionId( $request );
- $this->fail( 'Expcected exception not thrown' );
- } catch ( \UnexpectedValueException $ex ) {
- $this->assertSame(
- 'Provider1 returned session info for a different provider: ' . $request->info1,
- $ex->getMessage()
- );
- }
// Unusable session info
$this->logger->setCollect( true );
$session = $manager->getSessionForRequest( $request );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $id2, $session->getId() );
- $this->assertSame( $id2, $manager->getPersistedSessionId( $request ) );
$this->logger->setCollect( false );
// Unpersisted session ID
$this->assertSame( $id1, $session->getId() );
$session->persist();
$this->assertTrue( $session->isPersistent(), 'sanity check' );
- $this->assertNull( $manager->getPersistedSessionId( $request ) );
}
public function testGetSessionById() {
$manager = $this->getManager();
-
try {
$manager->getSessionById( 'bad' );
$this->fail( 'Expected exception not thrown' );
// Unknown session ID
$id = $manager->generateSessionId();
- $session = $manager->getSessionById( $id );
+ $session = $manager->getSessionById( $id, true );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $id, $session->getId() );
$id = $manager->generateSessionId();
- $this->assertNull( $manager->getSessionById( $id, true ) );
+ $this->assertNull( $manager->getSessionById( $id, false ) );
// Known but unloadable session ID
$this->logger->setCollect( true );
$id = $manager->generateSessionId();
- $this->store->setRawSession( $id, array( 'metadata' => array(
- 'provider' => 'DummySessionProvider',
- 'userId' => 0,
- 'userName' => null,
- 'userToken' => null,
+ $this->store->setSession( $id, array( 'metadata' => array(
+ 'userId' => User::idFromName( 'UTSysop' ),
+ 'userToken' => 'bad',
) ) );
- try {
- $manager->getSessionById( $id );
- $this->fail( 'Expected exception not thrown' );
- } catch ( \UnexpectedValueException $ex ) {
- $this->assertSame(
- 'Can neither load the session nor create an empty session',
- $ex->getMessage()
- );
- }
-
$this->assertNull( $manager->getSessionById( $id, true ) );
+ $this->assertNull( $manager->getSessionById( $id, false ) );
$this->logger->setCollect( false );
// Known session ID
$this->store->setSession( $id, array() );
- $session = $manager->getSessionById( $id );
+ $session = $manager->getSessionById( $id, false );
$this->assertInstanceOf( 'MediaWiki\\Session\\Session', $session );
$this->assertSame( $id, $session->getId() );
}
'Bar' => array( 'X', 'Bar1', 3 => 'Bar2' ),
'Quux' => array( 'Quux' ),
'Baz' => array(),
- 'Quux' => array( 'Quux' ),
);
$this->assertEquals( $expect, $manager->getVaryHeaders() );
$sessionId = $session->getSessionId();
$id = (string)$sessionId;
- $this->assertSame( $sessionId, $manager->getSessionById( $id )->getSessionId() );
+ $this->assertSame( $sessionId, $manager->getSessionById( $id, true )->getSessionId() );
$manager->changeBackendId( $backend );
$this->assertSame( $sessionId, $session->getSessionId() );
$this->assertNotEquals( $id, (string)$sessionId );
$id = (string)$sessionId;
- $this->assertSame( $sessionId, $manager->getSessionById( $id )->getSessionId() );
+ $this->assertSame( $sessionId, $manager->getSessionById( $id, true )->getSessionId() );
// Destruction of the session here causes the backend to be deregistered
$session = null;
);
}
- $session = $manager->getSessionById( $id );
+ $session = $manager->getSessionById( $id, true );
$this->assertSame( $sessionId, $session->getSessionId() );
}
$that = $this;
- \ObjectCache::$instances[__METHOD__] = new \HashBagOStuff();
+ \ObjectCache::$instances[__METHOD__] = new TestBagOStuff();
$this->setMwGlobals( array( 'wgMainCacheType' => __METHOD__ ) );
$this->stashMwGlobals( array( 'wgGroupPermissions' ) );
$this->assertTrue( $info->forceHTTPS() );
$this->assertSame( array(), $logger->getBuffer() );
+ // "Persist" flag from session
+ $this->store->setSessionMeta( $id, $metadata );
+ $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
+ 'provider' => $provider,
+ 'id' => $id,
+ 'userInfo' => $userInfo
+ ) );
+ $this->assertTrue( $loadSessionInfoFromStore( $info ) );
+ $this->assertFalse( $info->wasPersisted() );
+ $this->assertSame( array(), $logger->getBuffer() );
+
+ $this->store->setSessionMeta( $id, array( 'persisted' => true ) + $metadata );
+ $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
+ 'provider' => $provider,
+ 'id' => $id,
+ 'userInfo' => $userInfo
+ ) );
+ $this->assertTrue( $loadSessionInfoFromStore( $info ) );
+ $this->assertTrue( $info->wasPersisted() );
+ $this->assertSame( array(), $logger->getBuffer() );
+
+ $this->store->setSessionMeta( $id, array( 'persisted' => false ) + $metadata );
+ $info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
+ 'provider' => $provider,
+ 'id' => $id,
+ 'userInfo' => $userInfo,
+ 'persisted' => true
+ ) );
+ $this->assertTrue( $loadSessionInfoFromStore( $info ) );
+ $this->assertTrue( $info->wasPersisted() );
+ $this->assertSame( array(), $logger->getBuffer() );
+
// Provider refreshSessionInfo() returning false
$info = new SessionInfo( SessionInfo::MIN_PRIORITY, array(
'provider' => $provider3,