Removed compatibility layer for PHP <5.4 sessions
Signed-off-by: Alexandru Furculita <alex@furculita.net>
This commit is contained in:
parent
086daf85a0
commit
37d1a212f9
@ -47,9 +47,8 @@ class AppVariableTest extends TestCase
|
|||||||
|
|
||||||
public function testGetSession()
|
public function testGetSession()
|
||||||
{
|
{
|
||||||
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
|
|
||||||
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock();
|
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock();
|
||||||
$request->method('getSession')->willReturn($session);
|
$request->method('getSession')->willReturn($session = new Session());
|
||||||
|
|
||||||
$this->setRequestStack($request);
|
$this->setRequestStack($request);
|
||||||
|
|
||||||
@ -168,9 +167,8 @@ class AppVariableTest extends TestCase
|
|||||||
|
|
||||||
public function testGetFlashesWithNoSessionStarted()
|
public function testGetFlashesWithNoSessionStarted()
|
||||||
{
|
{
|
||||||
$session = $this->getMockBuilder(Session::class)->disableOriginalConstructor()->getMock();
|
|
||||||
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock();
|
$request = $this->getMockBuilder('Symfony\Component\HttpFoundation\Request')->getMock();
|
||||||
$request->method('getSession')->willReturn($session);
|
$request->method('getSession')->willReturn(new Session());
|
||||||
|
|
||||||
$this->setRequestStack($request);
|
$this->setRequestStack($request);
|
||||||
|
|
||||||
@ -259,7 +257,7 @@ class AppVariableTest extends TestCase
|
|||||||
$flashBag = new FlashBag();
|
$flashBag = new FlashBag();
|
||||||
$flashBag->initialize($flashMessages);
|
$flashBag->initialize($flashMessages);
|
||||||
|
|
||||||
$session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')->disableOriginalConstructor()->getMock();
|
$session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')->getMock();
|
||||||
$session->method('isStarted')->willReturn(true);
|
$session->method('isStarted')->willReturn(true);
|
||||||
$session->method('getFlashBag')->willReturn($flashBag);
|
$session->method('getFlashBag')->willReturn($flashBag);
|
||||||
|
|
||||||
|
@ -376,7 +376,7 @@ abstract class ControllerTraitTest extends TestCase
|
|||||||
public function testAddFlash()
|
public function testAddFlash()
|
||||||
{
|
{
|
||||||
$flashBag = new FlashBag();
|
$flashBag = new FlashBag();
|
||||||
$session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')->disableOriginalConstructor()->getMock();
|
$session = $this->getMockBuilder('Symfony\Component\HttpFoundation\Session\Session')->getMock();
|
||||||
$session->expects($this->once())->method('getFlashBag')->willReturn($flashBag);
|
$session->expects($this->once())->method('getFlashBag')->willReturn($flashBag);
|
||||||
|
|
||||||
$container = new Container();
|
$container = new Container();
|
||||||
|
@ -17,6 +17,11 @@ CHANGELOG
|
|||||||
* checking for cacheable HTTP methods using the `Request::isMethodSafe()`
|
* checking for cacheable HTTP methods using the `Request::isMethodSafe()`
|
||||||
method (by not passing `false` as its argument) is not supported anymore and
|
method (by not passing `false` as its argument) is not supported anymore and
|
||||||
throws a `\BadMethodCallException`
|
throws a `\BadMethodCallException`
|
||||||
|
* the `NativeSessionHandler` class has been removed
|
||||||
|
* the `AbstractProxy`, `NativeProxy` and `SessionHandlerProxy` classes have been removed
|
||||||
|
* setting session save handlers that do not implement `\SessionHandlerInterface` in
|
||||||
|
`NativeSessionStorage::setSaveHandler()` is not supported anymore and throws a
|
||||||
|
`\TypeError`
|
||||||
|
|
||||||
3.4.0
|
3.4.0
|
||||||
-----
|
-----
|
||||||
|
@ -16,7 +16,7 @@ namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
|
|||||||
*
|
*
|
||||||
* @author Drak <drak@zikula.org>
|
* @author Drak <drak@zikula.org>
|
||||||
*/
|
*/
|
||||||
class NativeFileSessionHandler extends NativeSessionHandler
|
class NativeFileSessionHandler extends \SessionHandler
|
||||||
{
|
{
|
||||||
/**
|
/**
|
||||||
* @param string $savePath Path of directory to save session files
|
* @param string $savePath Path of directory to save session files
|
||||||
|
@ -1,22 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
|
|
||||||
|
|
||||||
@trigger_error('The '.__NAMESPACE__.'\NativeSessionHandler class is deprecated since version 3.4 and will be removed in 4.0. Use the \SessionHandler class instead.', E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated since version 3.4, to be removed in 4.0. Use \SessionHandler instead.
|
|
||||||
* @see http://php.net/sessionhandler
|
|
||||||
*/
|
|
||||||
class NativeSessionHandler extends \SessionHandler
|
|
||||||
{
|
|
||||||
}
|
|
@ -12,8 +12,6 @@
|
|||||||
namespace Symfony\Component\HttpFoundation\Session\Storage;
|
namespace Symfony\Component\HttpFoundation\Session\Storage;
|
||||||
|
|
||||||
use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
|
use Symfony\Component\HttpFoundation\Session\SessionBagInterface;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This provides a base class for session attribute storage.
|
* This provides a base class for session attribute storage.
|
||||||
@ -38,7 +36,7 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
protected $closed = false;
|
protected $closed = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var AbstractProxy|\SessionHandlerInterface
|
* @var \SessionHandlerInterface
|
||||||
*/
|
*/
|
||||||
protected $saveHandler;
|
protected $saveHandler;
|
||||||
|
|
||||||
@ -87,12 +85,8 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
* sid_bits_per_character, "5"
|
* sid_bits_per_character, "5"
|
||||||
* trans_sid_hosts, $_SERVER['HTTP_HOST']
|
* trans_sid_hosts, $_SERVER['HTTP_HOST']
|
||||||
* trans_sid_tags, "a=href,area=href,frame=src,form="
|
* trans_sid_tags, "a=href,area=href,frame=src,form="
|
||||||
*
|
|
||||||
* @param array $options Session configuration options
|
|
||||||
* @param \SessionHandlerInterface|null $handler
|
|
||||||
* @param MetadataBag $metaBag MetadataBag
|
|
||||||
*/
|
*/
|
||||||
public function __construct(array $options = array(), $handler = null, MetadataBag $metaBag = null)
|
public function __construct(array $options = array(), \SessionHandlerInterface $handler = null, MetadataBag $metaBag = null)
|
||||||
{
|
{
|
||||||
session_cache_limiter(''); // disable by default because it's managed by HeaderBag (if used)
|
session_cache_limiter(''); // disable by default because it's managed by HeaderBag (if used)
|
||||||
ini_set('session.use_cookies', 1);
|
ini_set('session.use_cookies', 1);
|
||||||
@ -107,7 +101,7 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
/**
|
/**
|
||||||
* Gets the save handler instance.
|
* Gets the save handler instance.
|
||||||
*
|
*
|
||||||
* @return AbstractProxy|\SessionHandlerInterface
|
* @return \SessionHandlerInterface
|
||||||
*/
|
*/
|
||||||
public function getSaveHandler()
|
public function getSaveHandler()
|
||||||
{
|
{
|
||||||
@ -146,15 +140,21 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
*/
|
*/
|
||||||
public function getId()
|
public function getId()
|
||||||
{
|
{
|
||||||
return $this->saveHandler->getId();
|
return session_id();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @throws \LogicException When the session is active
|
||||||
*/
|
*/
|
||||||
public function setId($id)
|
public function setId($id)
|
||||||
{
|
{
|
||||||
$this->saveHandler->setId($id);
|
if (\PHP_SESSION_ACTIVE === session_status()) {
|
||||||
|
throw new \LogicException('Cannot change the ID of an active session');
|
||||||
|
}
|
||||||
|
|
||||||
|
session_id($id);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -162,15 +162,21 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
*/
|
*/
|
||||||
public function getName()
|
public function getName()
|
||||||
{
|
{
|
||||||
return $this->saveHandler->getName();
|
return session_name();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @throws \LogicException When the session is active
|
||||||
*/
|
*/
|
||||||
public function setName($name)
|
public function setName($name)
|
||||||
{
|
{
|
||||||
$this->saveHandler->setName($name);
|
if (\PHP_SESSION_ACTIVE === session_status()) {
|
||||||
|
throw new \LogicException('Cannot change the name of an active session');
|
||||||
|
}
|
||||||
|
|
||||||
|
session_name($name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -217,9 +223,6 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
// The default PHP error message is not very helpful, as it does not give any information on the current save handler.
|
// The default PHP error message is not very helpful, as it does not give any information on the current save handler.
|
||||||
// Therefore, we catch this error and trigger a warning with a better error message
|
// Therefore, we catch this error and trigger a warning with a better error message
|
||||||
$handler = $this->getSaveHandler();
|
$handler = $this->getSaveHandler();
|
||||||
if ($handler instanceof SessionHandlerProxy) {
|
|
||||||
$handler = $handler->getHandler();
|
|
||||||
}
|
|
||||||
|
|
||||||
restore_error_handler();
|
restore_error_handler();
|
||||||
trigger_error(sprintf('session_write_close(): Failed to write session data with %s handler', get_class($handler)), E_USER_WARNING);
|
trigger_error(sprintf('session_write_close(): Failed to write session data with %s handler', get_class($handler)), E_USER_WARNING);
|
||||||
@ -248,6 +251,8 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritdoc}
|
* {@inheritdoc}
|
||||||
|
*
|
||||||
|
* @throws \LogicException When the session is already started
|
||||||
*/
|
*/
|
||||||
public function registerBag(SessionBagInterface $bag)
|
public function registerBag(SessionBagInterface $bag)
|
||||||
{
|
{
|
||||||
@ -267,7 +272,7 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
throw new \InvalidArgumentException(sprintf('The SessionBagInterface %s is not registered.', $name));
|
throw new \InvalidArgumentException(sprintf('The SessionBagInterface %s is not registered.', $name));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->started && $this->saveHandler->isActive()) {
|
if (!$this->started && \PHP_SESSION_ACTIVE === session_status()) {
|
||||||
$this->loadSession();
|
$this->loadSession();
|
||||||
} elseif (!$this->started) {
|
} elseif (!$this->started) {
|
||||||
$this->start();
|
$this->start();
|
||||||
@ -357,38 +362,13 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
* @see http://php.net/sessionhandlerinterface
|
* @see http://php.net/sessionhandlerinterface
|
||||||
* @see http://php.net/sessionhandler
|
* @see http://php.net/sessionhandler
|
||||||
* @see http://github.com/drak/NativeSession
|
* @see http://github.com/drak/NativeSession
|
||||||
*
|
|
||||||
* @param \SessionHandlerInterface|null $saveHandler
|
|
||||||
*
|
|
||||||
* @throws \InvalidArgumentException
|
|
||||||
*/
|
*/
|
||||||
public function setSaveHandler($saveHandler = null)
|
public function setSaveHandler(\SessionHandlerInterface $saveHandler = null)
|
||||||
{
|
{
|
||||||
if (!$saveHandler instanceof AbstractProxy &&
|
$this->saveHandler = $saveHandler ?: new \SessionHandler();
|
||||||
!$saveHandler instanceof \SessionHandlerInterface &&
|
|
||||||
null !== $saveHandler) {
|
|
||||||
throw new \InvalidArgumentException('Must be instance of AbstractProxy; implement \SessionHandlerInterface; or be null.');
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($saveHandler instanceof AbstractProxy) {
|
|
||||||
@trigger_error(
|
|
||||||
'Using session save handlers that are instances of AbstractProxy is deprecated since version 3.4 and will be removed in 4.0.',
|
|
||||||
E_USER_DEPRECATED
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Wrap $saveHandler in proxy and prevent double wrapping of proxy
|
|
||||||
if (!$saveHandler instanceof AbstractProxy && $saveHandler instanceof \SessionHandlerInterface) {
|
|
||||||
$saveHandler = new SessionHandlerProxy($saveHandler);
|
|
||||||
} elseif (!$saveHandler instanceof AbstractProxy) {
|
|
||||||
$saveHandler = new SessionHandlerProxy(new \SessionHandler());
|
|
||||||
}
|
|
||||||
$this->saveHandler = $saveHandler;
|
|
||||||
|
|
||||||
if ($this->saveHandler instanceof \SessionHandlerInterface) {
|
|
||||||
session_set_save_handler($this->saveHandler, false);
|
session_set_save_handler($this->saveHandler, false);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load the session with attributes.
|
* Load the session with attributes.
|
||||||
@ -406,11 +386,12 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||||||
$session = &$_SESSION;
|
$session = &$_SESSION;
|
||||||
}
|
}
|
||||||
|
|
||||||
$bags = array_merge($this->bags, array($this->metadataBag));
|
$bags = $this->bags;
|
||||||
|
$bags[] = $this->metadataBag;
|
||||||
|
|
||||||
foreach ($bags as $bag) {
|
foreach ($bags as $bag) {
|
||||||
$key = $bag->getStorageKey();
|
$key = $bag->getStorageKey();
|
||||||
$session[$key] = isset($session[$key]) ? $session[$key] : array();
|
$session[$key] = $session[$key] ?? array();
|
||||||
$bag->initialize($session[$key]);
|
$bag->initialize($session[$key]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,126 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
@trigger_error('The '.__NAMESPACE__.'\AbstractProxy class is deprecated since version 3.4 and will be removed in 4.0. Use your session handler implementation directly.', E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated since version 3.4, to be removed in 4.0. Use your session handler implementation directly.
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*/
|
|
||||||
abstract class AbstractProxy
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Flag if handler wraps an internal PHP session handler (using \SessionHandler).
|
|
||||||
*
|
|
||||||
* @var bool
|
|
||||||
*/
|
|
||||||
protected $wrapper = false;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
protected $saveHandlerName;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the session.save_handler name.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getSaveHandlerName()
|
|
||||||
{
|
|
||||||
return $this->saveHandlerName;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Is this proxy handler and instance of \SessionHandlerInterface.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function isSessionHandlerInterface()
|
|
||||||
{
|
|
||||||
return $this instanceof \SessionHandlerInterface;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if this handler wraps an internal PHP session save handler using \SessionHandler.
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function isWrapper()
|
|
||||||
{
|
|
||||||
return $this->wrapper;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Has a session started?
|
|
||||||
*
|
|
||||||
* @return bool
|
|
||||||
*/
|
|
||||||
public function isActive()
|
|
||||||
{
|
|
||||||
return \PHP_SESSION_ACTIVE === session_status();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the session ID.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getId()
|
|
||||||
{
|
|
||||||
return session_id();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the session ID.
|
|
||||||
*
|
|
||||||
* @param string $id
|
|
||||||
*
|
|
||||||
* @throws \LogicException
|
|
||||||
*/
|
|
||||||
public function setId($id)
|
|
||||||
{
|
|
||||||
if ($this->isActive()) {
|
|
||||||
throw new \LogicException('Cannot change the ID of an active session');
|
|
||||||
}
|
|
||||||
|
|
||||||
session_id($id);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Gets the session name.
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
*/
|
|
||||||
public function getName()
|
|
||||||
{
|
|
||||||
return session_name();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the session name.
|
|
||||||
*
|
|
||||||
* @param string $name
|
|
||||||
*
|
|
||||||
* @throws \LogicException
|
|
||||||
*/
|
|
||||||
public function setName($name)
|
|
||||||
{
|
|
||||||
if ($this->isActive()) {
|
|
||||||
throw new \LogicException('Cannot change the name of an active session');
|
|
||||||
}
|
|
||||||
|
|
||||||
session_name($name);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,43 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
@trigger_error('The '.__NAMESPACE__.'\NativeProxy class is deprecated since version 3.4 and will be removed in 4.0. Use your session handler implementation directly.', E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This proxy is built-in session handlers in PHP 5.3.x.
|
|
||||||
*
|
|
||||||
* @deprecated since version 3.4, to be removed in 4.0. Use your session handler implementation directly.
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*/
|
|
||||||
class NativeProxy extends AbstractProxy
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Constructor.
|
|
||||||
*/
|
|
||||||
public function __construct()
|
|
||||||
{
|
|
||||||
// this makes an educated guess as to what the handler is since it should already be set.
|
|
||||||
$this->saveHandlerName = ini_get('session.save_handler');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns true if this handler wraps an internal PHP session save handler using \SessionHandler.
|
|
||||||
*
|
|
||||||
* @return bool False
|
|
||||||
*/
|
|
||||||
public function isWrapper()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,92 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
@trigger_error('The '.__NAMESPACE__.'\SessionHandlerProxy class is deprecated since version 3.4 and will be removed in 4.0. Use your session handler implementation directly.', E_USER_DEPRECATED);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated since version 3.4, to be removed in 4.0. Use your session handler implementation directly.
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*/
|
|
||||||
class SessionHandlerProxy extends AbstractProxy implements \SessionHandlerInterface
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var \SessionHandlerInterface
|
|
||||||
*/
|
|
||||||
protected $handler;
|
|
||||||
|
|
||||||
public function __construct(\SessionHandlerInterface $handler)
|
|
||||||
{
|
|
||||||
$this->handler = $handler;
|
|
||||||
$this->wrapper = ($handler instanceof \SessionHandler);
|
|
||||||
$this->saveHandlerName = $this->wrapper ? ini_get('session.save_handler') : 'user';
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @return \SessionHandlerInterface
|
|
||||||
*/
|
|
||||||
public function getHandler()
|
|
||||||
{
|
|
||||||
return $this->handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
// \SessionHandlerInterface
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function open($savePath, $sessionName)
|
|
||||||
{
|
|
||||||
return (bool) $this->handler->open($savePath, $sessionName);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function close()
|
|
||||||
{
|
|
||||||
return (bool) $this->handler->close();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function read($sessionId)
|
|
||||||
{
|
|
||||||
return (string) $this->handler->read($sessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function write($sessionId, $data)
|
|
||||||
{
|
|
||||||
return (bool) $this->handler->write($sessionId, $data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function destroy($sessionId)
|
|
||||||
{
|
|
||||||
return (bool) $this->handler->destroy($sessionId);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
public function gc($maxlifetime)
|
|
||||||
{
|
|
||||||
return (bool) $this->handler->gc($maxlifetime);
|
|
||||||
}
|
|
||||||
}
|
|
@ -29,7 +29,6 @@ class NativeFileSessionHandlerTest extends TestCase
|
|||||||
{
|
{
|
||||||
$storage = new NativeSessionStorage(array('name' => 'TESTING'), new NativeFileSessionHandler(sys_get_temp_dir()));
|
$storage = new NativeSessionStorage(array('name' => 'TESTING'), new NativeFileSessionHandler(sys_get_temp_dir()));
|
||||||
|
|
||||||
$this->assertEquals('files', $storage->getSaveHandler()->getSaveHandlerName());
|
|
||||||
$this->assertEquals('user', ini_get('session.save_handler'));
|
$this->assertEquals('user', ini_get('session.save_handler'));
|
||||||
|
|
||||||
$this->assertEquals(sys_get_temp_dir(), ini_get('session.save_path'));
|
$this->assertEquals(sys_get_temp_dir(), ini_get('session.save_path'));
|
||||||
|
@ -1,35 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Handler;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test class for NativeSessionHandler.
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*
|
|
||||||
* @runTestsInSeparateProcesses
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
* @group legacy
|
|
||||||
*/
|
|
||||||
class NativeSessionHandlerTest extends TestCase
|
|
||||||
{
|
|
||||||
public function testConstruct()
|
|
||||||
{
|
|
||||||
$handler = new NativeSessionHandler();
|
|
||||||
|
|
||||||
$this->assertTrue($handler instanceof \SessionHandler);
|
|
||||||
$this->assertTrue($handler instanceof NativeSessionHandler);
|
|
||||||
}
|
|
||||||
}
|
|
@ -14,10 +14,8 @@ namespace Symfony\Component\HttpFoundation\Tests\Session\Storage;
|
|||||||
use PHPUnit\Framework\TestCase;
|
use PHPUnit\Framework\TestCase;
|
||||||
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
|
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
|
||||||
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
|
use Symfony\Component\HttpFoundation\Session\Flash\FlashBag;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
|
use Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
|
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Test class for NativeSessionStorage.
|
* Test class for NativeSessionStorage.
|
||||||
@ -100,6 +98,7 @@ class NativeSessionStorageTest extends TestCase
|
|||||||
|
|
||||||
$storage->start();
|
$storage->start();
|
||||||
$id = $storage->getId();
|
$id = $storage->getId();
|
||||||
|
$this->assertEquals(session_id(), $id);
|
||||||
$this->assertInternalType('string', $id);
|
$this->assertInternalType('string', $id);
|
||||||
$this->assertNotSame('', $id);
|
$this->assertNotSame('', $id);
|
||||||
|
|
||||||
@ -107,6 +106,44 @@ class NativeSessionStorageTest extends TestCase
|
|||||||
$this->assertSame($id, $storage->getId(), 'ID stays after saving session');
|
$this->assertSame($id, $storage->getId(), 'ID stays after saving session');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testId()
|
||||||
|
{
|
||||||
|
$storage = $this->getStorage();
|
||||||
|
|
||||||
|
$this->assertEquals(session_id(), $storage->getId());
|
||||||
|
$storage->setId('foo');
|
||||||
|
$this->assertEquals('foo', $storage->getId());
|
||||||
|
$this->assertEquals(session_id(), $storage->getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \LogicException
|
||||||
|
*/
|
||||||
|
public function testIdException()
|
||||||
|
{
|
||||||
|
session_start();
|
||||||
|
$this->getStorage()->setId('foo');
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testName()
|
||||||
|
{
|
||||||
|
$storage = $this->getStorage();
|
||||||
|
|
||||||
|
$this->assertEquals(session_name(), $storage->getName());
|
||||||
|
$storage->setName('foo');
|
||||||
|
$this->assertEquals('foo', $storage->getName());
|
||||||
|
$this->assertEquals(session_name(), $storage->getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @expectedException \LogicException
|
||||||
|
*/
|
||||||
|
public function testNameException()
|
||||||
|
{
|
||||||
|
session_start();
|
||||||
|
$this->getStorage()->setName('foo');
|
||||||
|
}
|
||||||
|
|
||||||
public function testRegenerate()
|
public function testRegenerate()
|
||||||
{
|
{
|
||||||
$storage = $this->getStorage();
|
$storage = $this->getStorage();
|
||||||
@ -185,9 +222,9 @@ class NativeSessionStorageTest extends TestCase
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @expectedException \InvalidArgumentException
|
* @expectedException \TypeError
|
||||||
*/
|
*/
|
||||||
public function testSetSaveHandlerException()
|
public function testSetSaveHandlerError()
|
||||||
{
|
{
|
||||||
$storage = $this->getStorage();
|
$storage = $this->getStorage();
|
||||||
$storage->setSaveHandler(new \stdClass());
|
$storage->setSaveHandler(new \stdClass());
|
||||||
@ -198,17 +235,13 @@ class NativeSessionStorageTest extends TestCase
|
|||||||
$this->iniSet('session.save_handler', 'files');
|
$this->iniSet('session.save_handler', 'files');
|
||||||
$storage = $this->getStorage();
|
$storage = $this->getStorage();
|
||||||
$storage->setSaveHandler();
|
$storage->setSaveHandler();
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
$this->assertInstanceOf(\SessionHandler::class, $storage->getSaveHandler());
|
||||||
$storage->setSaveHandler(null);
|
$storage->setSaveHandler(null);
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
$this->assertInstanceOf(\SessionHandler::class, $storage->getSaveHandler());
|
||||||
$storage->setSaveHandler(new SessionHandlerProxy(new NativeSessionHandler()));
|
$storage->setSaveHandler(new \SessionHandler());
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
$this->assertInstanceOf(\SessionHandler::class, $storage->getSaveHandler());
|
||||||
$storage->setSaveHandler(new NativeSessionHandler());
|
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
|
||||||
$storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler()));
|
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
|
||||||
$storage->setSaveHandler(new NullSessionHandler());
|
$storage->setSaveHandler(new NullSessionHandler());
|
||||||
$this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
|
$this->assertInstanceOf(\SessionHandlerInterface::class, $storage->getSaveHandler());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -218,12 +251,12 @@ class NativeSessionStorageTest extends TestCase
|
|||||||
{
|
{
|
||||||
$storage = $this->getStorage();
|
$storage = $this->getStorage();
|
||||||
|
|
||||||
$this->assertFalse($storage->getSaveHandler()->isActive());
|
$this->assertNotSame(\PHP_SESSION_ACTIVE, session_status());
|
||||||
$this->assertFalse($storage->isStarted());
|
$this->assertFalse($storage->isStarted());
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
$this->assertTrue(isset($_SESSION));
|
$this->assertTrue(isset($_SESSION));
|
||||||
$this->assertTrue($storage->getSaveHandler()->isActive());
|
$this->assertSame(\PHP_SESSION_ACTIVE, session_status());
|
||||||
|
|
||||||
// PHP session might have started, but the storage driver has not, so false is correct here
|
// PHP session might have started, but the storage driver has not, so false is correct here
|
||||||
$this->assertFalse($storage->isStarted());
|
$this->assertFalse($storage->isStarted());
|
||||||
|
@ -64,13 +64,12 @@ class PhpBridgeSessionStorageTest extends TestCase
|
|||||||
{
|
{
|
||||||
$storage = $this->getStorage();
|
$storage = $this->getStorage();
|
||||||
|
|
||||||
$this->assertFalse($storage->getSaveHandler()->isActive());
|
$this->assertNotSame(\PHP_SESSION_ACTIVE, session_status());
|
||||||
$this->assertFalse($storage->isStarted());
|
$this->assertFalse($storage->isStarted());
|
||||||
|
|
||||||
session_start();
|
session_start();
|
||||||
$this->assertTrue(isset($_SESSION));
|
$this->assertTrue(isset($_SESSION));
|
||||||
// in PHP 5.4 we can reliably detect a session started
|
$this->assertSame(\PHP_SESSION_ACTIVE, session_status());
|
||||||
$this->assertTrue($storage->getSaveHandler()->isActive());
|
|
||||||
// PHP session might have started, but the storage driver has not, so false is correct here
|
// PHP session might have started, but the storage driver has not, so false is correct here
|
||||||
$this->assertFalse($storage->isStarted());
|
$this->assertFalse($storage->isStarted());
|
||||||
|
|
||||||
|
@ -1,115 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\AbstractProxy;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test class for AbstractProxy.
|
|
||||||
*
|
|
||||||
* @group legacy
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*/
|
|
||||||
class AbstractProxyTest extends TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var AbstractProxy
|
|
||||||
*/
|
|
||||||
protected $proxy;
|
|
||||||
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
$this->proxy = $this->getMockForAbstractClass(AbstractProxy::class);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown()
|
|
||||||
{
|
|
||||||
$this->proxy = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetSaveHandlerName()
|
|
||||||
{
|
|
||||||
$this->assertNull($this->proxy->getSaveHandlerName());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsSessionHandlerInterface()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->proxy->isSessionHandlerInterface());
|
|
||||||
$sh = new SessionHandlerProxy(new \SessionHandler());
|
|
||||||
$this->assertTrue($sh->isSessionHandlerInterface());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testIsWrapper()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->proxy->isWrapper());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @runInSeparateProcess
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
*/
|
|
||||||
public function testIsActive()
|
|
||||||
{
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
session_start();
|
|
||||||
$this->assertTrue($this->proxy->isActive());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @runInSeparateProcess
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
*/
|
|
||||||
public function testName()
|
|
||||||
{
|
|
||||||
$this->assertEquals(session_name(), $this->proxy->getName());
|
|
||||||
$this->proxy->setName('foo');
|
|
||||||
$this->assertEquals('foo', $this->proxy->getName());
|
|
||||||
$this->assertEquals(session_name(), $this->proxy->getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @runInSeparateProcess
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
* @expectedException \LogicException
|
|
||||||
*/
|
|
||||||
public function testNameException()
|
|
||||||
{
|
|
||||||
session_start();
|
|
||||||
$this->proxy->setName('foo');
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @runInSeparateProcess
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
*/
|
|
||||||
public function testId()
|
|
||||||
{
|
|
||||||
$this->assertEquals(session_id(), $this->proxy->getId());
|
|
||||||
$this->proxy->setId('foo');
|
|
||||||
$this->assertEquals('foo', $this->proxy->getId());
|
|
||||||
$this->assertEquals(session_id(), $this->proxy->getId());
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @runInSeparateProcess
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
* @expectedException \LogicException
|
|
||||||
*/
|
|
||||||
public function testIdException()
|
|
||||||
{
|
|
||||||
session_start();
|
|
||||||
$this->proxy->setId('foo');
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,38 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\NativeProxy;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Test class for NativeProxy.
|
|
||||||
*
|
|
||||||
* @group legacy
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*/
|
|
||||||
class NativeProxyTest extends TestCase
|
|
||||||
{
|
|
||||||
public function testIsWrapper()
|
|
||||||
{
|
|
||||||
$proxy = new NativeProxy();
|
|
||||||
$this->assertFalse($proxy->isWrapper());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGetSaveHandlerName()
|
|
||||||
{
|
|
||||||
$name = ini_get('session.save_handler');
|
|
||||||
$proxy = new NativeProxy();
|
|
||||||
$this->assertEquals($name, $proxy->getSaveHandlerName());
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,125 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This file is part of the Symfony package.
|
|
||||||
*
|
|
||||||
* (c) Fabien Potencier <fabien@symfony.com>
|
|
||||||
*
|
|
||||||
* For the full copyright and license information, please view the LICENSE
|
|
||||||
* file that was distributed with this source code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
namespace Symfony\Component\HttpFoundation\Tests\Session\Storage\Proxy;
|
|
||||||
|
|
||||||
use PHPUnit\Framework\TestCase;
|
|
||||||
use Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tests for SessionHandlerProxy class.
|
|
||||||
*
|
|
||||||
* @author Drak <drak@zikula.org>
|
|
||||||
*
|
|
||||||
* @runTestsInSeparateProcesses
|
|
||||||
* @preserveGlobalState disabled
|
|
||||||
* @group legacy
|
|
||||||
*/
|
|
||||||
class SessionHandlerProxyTest extends TestCase
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* @var \PHPUnit_Framework_MockObject_Matcher
|
|
||||||
*/
|
|
||||||
private $mock;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @var SessionHandlerProxy
|
|
||||||
*/
|
|
||||||
private $proxy;
|
|
||||||
|
|
||||||
protected function setUp()
|
|
||||||
{
|
|
||||||
$this->mock = $this->getMockBuilder('SessionHandlerInterface')->getMock();
|
|
||||||
$this->proxy = new SessionHandlerProxy($this->mock);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected function tearDown()
|
|
||||||
{
|
|
||||||
$this->mock = null;
|
|
||||||
$this->proxy = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOpenTrue()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('open')
|
|
||||||
->will($this->returnValue(true));
|
|
||||||
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
$this->proxy->open('name', 'id');
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testOpenFalse()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('open')
|
|
||||||
->will($this->returnValue(false));
|
|
||||||
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
$this->proxy->open('name', 'id');
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testClose()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('close')
|
|
||||||
->will($this->returnValue(true));
|
|
||||||
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
$this->proxy->close();
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testCloseFalse()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('close')
|
|
||||||
->will($this->returnValue(false));
|
|
||||||
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
$this->proxy->close();
|
|
||||||
$this->assertFalse($this->proxy->isActive());
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testRead()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('read');
|
|
||||||
|
|
||||||
$this->proxy->read('id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testWrite()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('write');
|
|
||||||
|
|
||||||
$this->proxy->write('id', 'data');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testDestroy()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('destroy');
|
|
||||||
|
|
||||||
$this->proxy->destroy('id');
|
|
||||||
}
|
|
||||||
|
|
||||||
public function testGc()
|
|
||||||
{
|
|
||||||
$this->mock->expects($this->once())
|
|
||||||
->method('gc');
|
|
||||||
|
|
||||||
$this->proxy->gc(86400);
|
|
||||||
}
|
|
||||||
}
|
|
Reference in New Issue
Block a user