public function sessionOpen($path = null, $name = null)
 {
     if (is_string($this->options['database'])) {
         $this->options['database'] = sfContext::getInstance()->getDatabaseManager()->getDatabase($this->options['database']);
     }
     return parent::sessionOpen($path, $name);
 }
 /**
  *   @see parent::sessionRead
  */
 public function sessionRead($id)
 {
     $result = parent::sessionRead($id);
     $this->setSessionKey($id);
     // Find session persistent object
     $session = SessionQuery::create()->filterBySessionKey($id)->findOne();
     // Associate an IP address with the session & user
     if (!is_null($session) && $session instanceof Session) {
         $context = sfContext::getInstance();
         if ($session->getClientIpAddress() == null) {
             $session->setClientIpAddress($context->getRequest()->getRemoteAddress());
         }
         // Associate User with session
         $user = $context->getUser();
         if ($session->getUserId() == null && !is_null($user) && $user->isAuthenticated()) {
             $session->setUser($user->getProfile());
         }
         $session->save();
     }
     return $result;
 }
 */
require_once __DIR__ . '/../../bootstrap/unit.php';
ob_start();
$plan = 14;
$t = new lime_test($plan);
if (!extension_loaded('SQLite') && !extension_loaded('pdo_SQLite')) {
    $t->skip('SQLite needed to run these tests', $plan);
    return;
}
// initialize the storage
$database = new sfPDODatabase(array('dsn' => 'sqlite::memory:'));
$connection = $database->getConnection();
$connection->exec('CREATE TABLE session (sess_id, sess_data, sess_time)');
ini_set('session.use_cookies', 0);
$session_id = "1";
$storage = new sfPDOSessionStorage(array('db_table' => 'session', 'session_id' => $session_id, 'database' => $database));
$t->ok($storage instanceof sfStorage, 'sfPDOSessionStorage is an instance of sfStorage');
$t->ok($storage instanceof sfDatabaseSessionStorage, 'sfPDOSessionStorage is an instance of sfDatabaseSessionStorage');
// regenerate()
$oldSessionData = 'foo:bar';
$storage->sessionWrite($session_id, $oldSessionData);
$storage->regenerate(false);
$newSessionData = 'foo:bar:baz';
$storage->sessionWrite(session_id(), $newSessionData);
$t->isnt(session_id(), $session_id, 'regenerate() regenerated the session with a different session id');
// checking if the old session record still exists
$result = $connection->query(sprintf('SELECT sess_id, sess_data FROM session WHERE sess_id = "%s"', $session_id));
$data = $result->fetchAll();
$t->is(count($data), 1, 'regenerate() has kept destroyed old session');
// checking if the new session record has been created
$result = $connection->query(sprintf('SELECT sess_id, sess_data FROM session WHERE sess_id = "%s"', session_id()));