2010-07-25 20:40:44 +00:00
|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* DatabaseSessionTest file
|
|
|
|
*
|
2010-10-03 16:31:21 +00:00
|
|
|
* PHP 5
|
2010-07-25 20:40:44 +00:00
|
|
|
*
|
|
|
|
* CakePHP(tm) Tests <http://book.cakephp.org/view/1196/Testing>
|
|
|
|
* Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
|
|
*
|
|
|
|
* Licensed under The MIT License
|
|
|
|
* Redistributions of files must retain the above copyright notice.
|
|
|
|
*
|
|
|
|
* @copyright Copyright 2005-2010, Cake Software Foundation, Inc. (http://cakefoundation.org)
|
|
|
|
* @link http://cakephp.org CakePHP(tm) Project
|
2010-12-24 18:57:20 +00:00
|
|
|
* @package cake.tests.cases.libs.session
|
2010-07-25 20:40:44 +00:00
|
|
|
* @since CakePHP(tm) v 2.0
|
|
|
|
* @license MIT License (http://www.opensource.org/licenses/mit-license.php)
|
|
|
|
*/
|
|
|
|
|
2010-12-10 06:23:27 +00:00
|
|
|
App::uses('Model', 'Model');
|
2010-12-22 03:02:12 +00:00
|
|
|
App::uses('CakeSession', 'Model/Datasource');
|
2010-12-10 06:23:27 +00:00
|
|
|
App::uses('DatabaseSession', 'Model/Datasource/Session');
|
2010-12-22 03:02:12 +00:00
|
|
|
class_exists('CakeSession');
|
2010-07-25 20:40:44 +00:00
|
|
|
|
2010-07-25 21:06:03 +00:00
|
|
|
class SessionTestModel extends Model {
|
|
|
|
var $name = 'SessionTestModel';
|
|
|
|
var $useTable = 'sessions';
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Database session test.
|
|
|
|
*
|
|
|
|
* @package cake.tests.cases.libs.session
|
|
|
|
*/
|
2010-07-25 20:40:44 +00:00
|
|
|
class DatabaseSessionTest extends CakeTestCase {
|
2010-07-25 21:06:03 +00:00
|
|
|
|
|
|
|
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');
|
2010-09-06 05:21:58 +00:00
|
|
|
Configure::write('Session.handler', array(
|
|
|
|
'model' => 'SessionTestModel',
|
2010-09-20 02:58:30 +00:00
|
|
|
'database' => 'test',
|
2010-09-06 05:21:58 +00:00
|
|
|
'table' => 'sessions'
|
2010-07-25 21:06:03 +00:00
|
|
|
));
|
|
|
|
Configure::write('Session.timeout', 100);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* cleanup after test case.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
public static function teardownAfterClass() {
|
|
|
|
Configure::write('Session', self::$_sessionBackup);
|
|
|
|
}
|
|
|
|
|
2010-09-06 04:43:58 +00:00
|
|
|
/**
|
|
|
|
* setup
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function setup() {
|
|
|
|
$this->storage = new DatabaseSession();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* teardown
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function teardown() {
|
|
|
|
unset($this->storage);
|
2010-09-06 05:21:58 +00:00
|
|
|
ClassRegistry::flush();
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* test that constructor sets the right things up.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testConstructionSettings() {
|
|
|
|
ClassRegistry::flush();
|
|
|
|
$storage = new DatabaseSession();
|
|
|
|
|
|
|
|
$session = ClassRegistry::getObject('session');
|
2010-12-24 17:54:04 +00:00
|
|
|
$this->assertInstanceOf('SessionTestModel', $session);
|
2010-09-06 05:21:58 +00:00
|
|
|
$this->assertEquals('Session', $session->alias);
|
2010-09-20 02:58:30 +00:00
|
|
|
$this->assertEquals('test', $session->useDbConfig);
|
2010-09-06 04:43:58 +00:00
|
|
|
}
|
|
|
|
|
2010-07-25 21:06:03 +00:00
|
|
|
/**
|
|
|
|
* test opening the session
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testOpen() {
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->assertTrue($this->storage->open());
|
2010-07-25 21:06:03 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* test write()
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testWrite() {
|
2010-09-06 04:43:58 +00:00
|
|
|
$result = $this->storage->write('foo', 'Some value');
|
2010-07-25 21:06:03 +00:00
|
|
|
$expected = array(
|
|
|
|
'Session' => array(
|
|
|
|
'id' => 'foo',
|
|
|
|
'data' => 'Some value',
|
|
|
|
'expires' => time() + (Configure::read('Session.timeout') * 60)
|
|
|
|
)
|
|
|
|
);
|
|
|
|
$this->assertEquals($expected, $result);
|
|
|
|
}
|
|
|
|
|
2011-01-19 01:20:49 +00:00
|
|
|
/**
|
|
|
|
* testReadAndWriteWithDatabaseStorage method
|
|
|
|
*
|
|
|
|
* @access public
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testWriteEmptySessionId() {
|
|
|
|
$result = $this->storage->write('', 'This is a Test');
|
|
|
|
$this->assertFalse($result);
|
|
|
|
}
|
2010-07-25 21:06:03 +00:00
|
|
|
/**
|
|
|
|
* test read()
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testRead() {
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->storage->write('foo', 'Some value');
|
2010-07-25 21:06:03 +00:00
|
|
|
|
2010-09-06 04:43:58 +00:00
|
|
|
$result = $this->storage->read('foo');
|
2010-07-25 21:06:03 +00:00
|
|
|
$expected = 'Some value';
|
|
|
|
$this->assertEquals($expected, $result);
|
|
|
|
|
2010-09-06 04:43:58 +00:00
|
|
|
$result = $this->storage->read('made up value');
|
2010-07-25 21:06:03 +00:00
|
|
|
$this->assertFalse($result);
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* test blowing up the session.
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testDestroy() {
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->storage->write('foo', 'Some value');
|
2010-07-25 21:06:03 +00:00
|
|
|
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->assertTrue($this->storage->destroy('foo'), 'Destroy failed');
|
|
|
|
$this->assertFalse($this->storage->read('foo'), 'Value still present.');
|
2010-07-25 21:06:03 +00:00
|
|
|
}
|
2010-07-25 21:22:53 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* test the garbage collector
|
|
|
|
*
|
|
|
|
* @return void
|
|
|
|
*/
|
|
|
|
function testGc() {
|
|
|
|
Configure::write('Session.timeout', 0);
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->storage->write('foo', 'Some value');
|
2010-07-25 21:22:53 +00:00
|
|
|
|
|
|
|
sleep(1);
|
2010-09-06 04:43:58 +00:00
|
|
|
$this->storage->gc();
|
|
|
|
$this->assertFalse($this->storage->read('foo'));
|
2010-07-25 21:22:53 +00:00
|
|
|
}
|
2010-07-25 20:40:44 +00:00
|
|
|
}
|