Blame | Last modification | View Log | RSS feed
<?php/*** DatabaseSessionTest file** CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)** Licensed under The MIT License* For full copyright and license information, please see the LICENSE.txt* Redistributions of files must retain the above copyright notice.** @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)* @link http://cakephp.org CakePHP(tm) Project* @package Cake.Test.Case.Model.Datasource.Session* @since CakePHP(tm) v 2.0* @license http://www.opensource.org/licenses/mit-license.php MIT License*/App::uses('Model', 'Model');App::uses('CakeSession', 'Model/Datasource');App::uses('DatabaseSession', 'Model/Datasource/Session');class_exists('CakeSession');/*** Class SessionTestModel** @package Cake.Test.Case.Model.Datasource.Session*/class SessionTestModel extends Model {public $useTable = 'sessions';}/*** Database session test.** @package Cake.Test.Case.Model.Datasource.Session*/class DatabaseSessionTest extends CakeTestCase {protected static $_sessionBackup;/*** fixtures** @var string*/public $fixtures = array('core.session');/*** test case startup** @return void*/public static function setupBeforeClass() {self::$_sessionBackup = Configure::read('Session');Configure::write('Session.handler', array('model' => 'SessionTestModel',));Configure::write('Session.timeout', 100);}/*** cleanup after test case.** @return void*/public static function teardownAfterClass() {Configure::write('Session', self::$_sessionBackup);}/*** setUp** @return void*/public function setUp() {parent::setUp();$this->storage = new DatabaseSession();}/*** tearDown** @return void*/public function tearDown() {unset($this->storage);ClassRegistry::flush();parent::tearDown();}/*** test that constructor sets the right things up.** @return void*/public function testConstructionSettings() {ClassRegistry::flush();new DatabaseSession();$session = ClassRegistry::getObject('session');$this->assertInstanceOf('SessionTestModel', $session);$this->assertEquals('Session', $session->alias);$this->assertEquals('test', $session->useDbConfig);$this->assertEquals('sessions', $session->useTable);}/*** test opening the session** @return void*/public function testOpen() {$this->assertTrue($this->storage->open());}/*** test write()** @return void*/public function testWrite() {$result = $this->storage->write('foo', 'Some value');$expected = array('Session' => array('id' => 'foo','data' => 'Some value',));$expires = $result['Session']['expires'];unset($result['Session']['expires']);$this->assertEquals($expected, $result);$expected = time() + (Configure::read('Session.timeout') * 60);$this->assertWithinMargin($expires, $expected, 1);}/*** testReadAndWriteWithDatabaseStorage method** @return void*/public function testWriteEmptySessionId() {$result = $this->storage->write('', 'This is a Test');$this->assertFalse($result);}/*** test read()** @return void*/public function testRead() {$this->storage->write('foo', 'Some value');$result = $this->storage->read('foo');$expected = 'Some value';$this->assertEquals($expected, $result);$result = $this->storage->read('made up value');$this->assertFalse($result);}/*** test blowing up the session.** @return void*/public function testDestroy() {$this->storage->write('foo', 'Some value');$this->assertTrue($this->storage->destroy('foo'), 'Destroy failed');$this->assertFalse($this->storage->read('foo'), 'Value still present.');}/*** test the garbage collector** @return void*/public function testGc() {ClassRegistry::flush();Configure::write('Session.timeout', 0);$storage = new DatabaseSession();$storage->write('foo', 'Some value');sleep(1);$storage->gc();$this->assertFalse($storage->read('foo'));}}