cacert-testmgr/external/ZendFramework-1.9.5/tests/Zend/Session/SaveHandler/DbTableTest.php

572 lines
19 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* Zend Framework
*
* LICENSE
*
* This source file is subject to the new BSD license that is bundled
* with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://framework.zend.com/license/new-bsd
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@zend.com so we can send you a copy immediately.
*
* @category Zend
* @package Zend_Session
* @subpackage UnitTests
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @version $Id: DbTableTest.php 17363 2009-08-03 07:40:18Z bkarwin $
*/
/**
* Test helper
*/
require_once dirname(__FILE__) . '/../../../TestHelper.php';
/**
* @see Zend_Session_SaveHandler_DbTable
*/
require_once 'Zend/Session/SaveHandler/DbTable.php';
/**
* Unit testing for Zend_Session_SaveHandler_DbTable include all tests for
* regular session handling
*
* @category Zend
* @package Zend_Session
* @subpackage UnitTests
* @copyright Copyright (c) 2005-2009 Zend Technologies USA Inc. (http://www.zend.com)
* @license http://framework.zend.com/license/new-bsd New BSD License
* @group Zend_Session
* @group Zend_Db_Table
*/
class Zend_Session_SaveHandler_DbTableTest extends PHPUnit_Framework_TestCase
{
/**
* @var array
*/
protected $_saveHandlerTableConfig = array(
'name' => 'sessions',
'primary' => array(
'id',
'save_path',
'name',
),
Zend_Session_SaveHandler_DbTable::MODIFIED_COLUMN => 'modified',
Zend_Session_SaveHandler_DbTable::LIFETIME_COLUMN => 'lifetime',
Zend_Session_SaveHandler_DbTable::DATA_COLUMN => 'data',
Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT => array(
Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_ID,
Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_SAVE_PATH,
Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_NAME,
),
);
/**
* @var Zend_Db_Adapter_Abstract
*/
protected $_db;
/**
* Array to collect used Zend_Session_SaveHandler_DbTable objects, so they are not
* destroyed before all tests are done and session is not closed
*
* @var array
*/
protected $_usedSaveHandlers = array();
/**
* Setup performed prior to each test method
*
* @return void
*/
public function setUp()
{
$this->_setupDb($this->_saveHandlerTableConfig['primary']);
}
/**
* Tear-down operations performed after each test method
*
* @return void
*/
public function tearDown()
{
$this->_dropTable();
}
public function testConfigPrimaryAssignmentFullConfig()
{
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($this->_saveHandlerTableConfig);
/**
* @todo Test something other than that an exception is not thrown
*/
}
public function testConstructorThrowsExceptionGivenConfigAsNull()
{
try {
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable(null);
$this->fail('Expected Zend_Session_SaveHandler_Exception not thrown');
} catch (Zend_Session_SaveHandler_Exception $e) {
$this->assertContains('$config must be', $e->getMessage());
}
}
public function testTableNameSchema()
{
$config = $this->_saveHandlerTableConfig;
$config['name'] = 'schema.session';
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
}
public function testTableEmptyNamePullFromSavePath()
{
$config = $this->_saveHandlerTableConfig;
unset($config['name']);
try {
$savePath = ini_get('session.save_path');
ini_set('session.save_path', dirname(__FILE__));
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
ini_set('session.save_path', $savePath);
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testPrimaryAssignmentIdNotSet()
{
$this->setExpectedException('Zend_Session_SaveHandler_Exception');
$config = $this->_saveHandlerTableConfig;
$config['primary'] = array('id');
$config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]
= Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_SAVE_PATH;
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is thrown
*/
}
public function testPrimaryAssignmentNotArray()
{
$config = $this->_saveHandlerTableConfig;
$config['primary'] = array('id');
$config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]
= Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_ID;
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is not thrown
*/
}
public function testModifiedColumnNotSet()
{
$this->setExpectedException('Zend_Session_SaveHandler_Exception');
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::MODIFIED_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is thrown
*/
}
public function testLifetimeColumnNotSet()
{
$this->setExpectedException('Zend_Session_SaveHandler_Exception');
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::LIFETIME_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is thrown
*/
}
public function testDataColumnNotSet()
{
$this->setExpectedException('Zend_Session_SaveHandler_Exception');
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::DATA_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is thrown
*/
}
public function testDifferentArraySize()
{
//different number of args between primary and primaryAssignment
try {
$config = $this->_saveHandlerTableConfig;
array_pop($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testEmptyPrimaryAssignment()
{
//test the default - no primaryAssignment
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = $config['primary'][0];
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
/**
* @todo Test something other than that an exception is not thrown
*/
}
public function testSessionIdPresent()
{
//test that the session Id must be in the primary assignment config
try {
$config = $this->_saveHandlerTableConfig;
$config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT] = array(
Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT_SESSION_NAME,
);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testModifiedColumnDefined()
{
//test the default - no primaryAssignment
try {
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
unset($config[Zend_Session_SaveHandler_DbTable::MODIFIED_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testLifetimeColumnDefined()
{
//test the default - no primaryAssignment
try {
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
unset($config[Zend_Session_SaveHandler_DbTable::LIFETIME_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testDataColumnDefined()
{
//test the default - no primaryAssignment
try {
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
unset($config[Zend_Session_SaveHandler_DbTable::DATA_COLUMN]);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->fail();
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
}
public function testLifetime()
{
$config = $this->_saveHandlerTableConfig;
unset($config['lifetime']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->assertSame($saveHandler->getLifetime(), (int) ini_get('session.gc_maxlifetime'),
'lifetime must default to session.gc_maxlifetime'
);
$config = $this->_saveHandlerTableConfig;
$lifetime = $config['lifetime'] = 1242;
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->assertSame($lifetime, $saveHandler->getLifetime());
}
public function testOverrideLifetime()
{
try {
$config = $this->_saveHandlerTableConfig;
$config['overrideLifetime'] = true;
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
} catch (Zend_Session_SaveHandler_Exception $e) {
/**
* @todo Test something other than that an exception is thrown
*/
}
$this->assertTrue($saveHandler->getOverrideLifetime(), '');
}
public function testSessionSaving()
{
$this->_dropTable();
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
Zend_Session::setSaveHandler($saveHandler);
Zend_Session::start();
/**
* @see Zend_Session_Namespace
*/
require_once 'Zend/Session/Namespace.php';
$session = new Zend_Session_Namespace('SaveHandler');
$session->testArray = $this->_saveHandlerTableConfig;
$tmp = array('SaveHandler' => serialize(array('testArray' => $this->_saveHandlerTableConfig)));
$testAgainst = '';
foreach ($tmp as $key => $val) {
$testAgainst .= $key . "|" . $val;
}
session_write_close();
foreach ($this->_db->query('SELECT * FROM Sessions')->fetchAll() as $row) {
$this->assertSame($row[$config[Zend_Session_SaveHandler_DbTable::DATA_COLUMN]],
$testAgainst, 'Data was not saved properly'
);
}
}
public function testReadWrite()
{
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$id = '242';
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
}
public function testReadWriteComplex()
{
$config = $this->_saveHandlerTableConfig;
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$saveHandler->open('savepath', 'sessionname');
$id = '242';
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
}
public function testReadWriteTwice()
{
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$id = '242';
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
}
public function testReadWriteTwiceAndExpire()
{
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$config['lifetime'] = 1;
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$id = '242';
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
$this->assertTrue($saveHandler->write($id, serialize($config)));
sleep(2);
$this->assertSame(false, unserialize($saveHandler->read($id)));
}
public function testReadWriteThreeTimesAndGc()
{
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$config['lifetime'] = 1;
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$id = 242;
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
$id++;
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
$id++;
$this->assertTrue($saveHandler->write($id, serialize($config)));
$this->assertSame($config, unserialize($saveHandler->read($id)));
foreach ($this->_db->query('SELECT * FROM Sessions')->fetchAll() as $row) {
$this->assertSame($config, unserialize($row['data']));
}
sleep(2);
$saveHandler->gc(false);
foreach ($this->_db->query('SELECT * FROM Sessions')->fetchAll() as $row) {
//should be empty!
$this->fail();
}
}
public function testSetLifetime()
{
$config = $this->_saveHandlerTableConfig;
unset($config[Zend_Session_SaveHandler_DbTable::PRIMARY_ASSIGNMENT]);
$config['primary'] = array($config['primary'][0]);
$config['lifetime'] = 1;
$this->_setupDb($config['primary']);
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable($config);
$this->assertSame(1, $saveHandler->getLifetime());
$saveHandler->setLifetime(27);
$this->assertSame(27, $saveHandler->getLifetime());
}
public function testZendConfig()
{
$this->_usedSaveHandlers[] =
$saveHandler = new Zend_Session_SaveHandler_DbTable(new Zend_Config($this->_saveHandlerTableConfig));
/**
* @todo Test something other than that an exception is not thrown
*/
}
/**
* Sets up the database connection and creates the table for session data
*
* @param array $primary
* @return void
*/
protected function _setupDb(array $primary)
{
if (!extension_loaded('pdo_sqlite')) {
$this->markTestSkipped('The pdo_sqlite extension must be available and enabled for this test');
}
$this->_db = Zend_Db::factory('Pdo_Sqlite', array('dbname' => ':memory:'));
Zend_Db_Table_Abstract::setDefaultAdapter($this->_db);
$query = array();
$query[] = 'CREATE TABLE `Sessions` ( ';
$query[] = '`id` varchar(32) NOT NULL, ';
if (in_array('save_path', $primary)) {
$query[] = '`save_path` varchar(32) NOT NULL, ';
}
if (in_array('name', $primary)) {
$query[] = '`name` varchar(32) NOT NULL, ';
}
$query[] = '`modified` int(11) default NULL, ';
$query[] = '`lifetime` int(11) default NULL, ';
$query[] = '`data` text, ';
$query[] = 'PRIMARY KEY (' . implode(', ', $primary) . ') ';
$query[] = ');';
$this->_db->query(implode("\n", $query));
}
/**
* Drops the database table for session data
*
* @return void
*/
protected function _dropTable()
{
$this->_db->query('DROP TABLE Sessions');
}
}
/**
* This class is used by Zend_Session_SaveHandler_AllTests to produce one skip message when pdo_sqlite is unavailable
*/
class Zend_Session_SaveHandler_DbTableTestSkip extends PHPUnit_Framework_TestCase
{
public function testNothing()
{
$this->markTestSkipped('The pdo_sqlite extension must be available and enabled for this test');
}
}