Open Journal Systems  3.3.0
NativeSessionStorageTest.php
1 <?php
2 
3 /*
4  * This file is part of the Symfony package.
5  *
6  * (c) Fabien Potencier <fabien@symfony.com>
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11 
13 
14 use PHPUnit\Framework\TestCase;
21 
32 class NativeSessionStorageTest extends TestCase
33 {
34  private $savePath;
35 
36  protected function setUp()
37  {
38  $this->iniSet('session.save_handler', 'files');
39  $this->iniSet('session.save_path', $this->savePath = sys_get_temp_dir().'/sf2test');
40  if (!is_dir($this->savePath)) {
41  mkdir($this->savePath);
42  }
43  }
44 
45  protected function tearDown()
46  {
47  session_write_close();
48  array_map('unlink', glob($this->savePath.'/*'));
49  if (is_dir($this->savePath)) {
50  rmdir($this->savePath);
51  }
52 
53  $this->savePath = null;
54  }
55 
61  protected function getStorage(array $options = array())
62  {
63  $storage = new NativeSessionStorage($options);
64  $storage->registerBag(new AttributeBag());
65 
66  return $storage;
67  }
68 
69  public function testBag()
70  {
71  $storage = $this->getStorage();
72  $bag = new FlashBag();
73  $storage->registerBag($bag);
74  $this->assertSame($bag, $storage->getBag($bag->getName()));
75  }
76 
80  public function testRegisterBagException()
81  {
82  $storage = $this->getStorage();
83  $storage->getBag('non_existing');
84  }
85 
90  {
91  $storage = $this->getStorage();
92  $storage->start();
93  $storage->registerBag(new AttributeBag());
94  }
95 
96  public function testGetId()
97  {
98  $storage = $this->getStorage();
99  $this->assertSame('', $storage->getId(), 'Empty ID before starting session');
100 
101  $storage->start();
102  $id = $storage->getId();
103  $this->assertInternalType('string', $id);
104  $this->assertNotSame('', $id);
105 
106  $storage->save();
107  $this->assertSame($id, $storage->getId(), 'ID stays after saving session');
108  }
109 
110  public function testRegenerate()
111  {
112  $storage = $this->getStorage();
113  $storage->start();
114  $id = $storage->getId();
115  $storage->getBag('attributes')->set('lucky', 7);
116  $storage->regenerate();
117  $this->assertNotEquals($id, $storage->getId());
118  $this->assertEquals(7, $storage->getBag('attributes')->get('lucky'));
119  }
120 
121  public function testRegenerateDestroy()
122  {
123  $storage = $this->getStorage();
124  $storage->start();
125  $id = $storage->getId();
126  $storage->getBag('attributes')->set('legs', 11);
127  $storage->regenerate(true);
128  $this->assertNotEquals($id, $storage->getId());
129  $this->assertEquals(11, $storage->getBag('attributes')->get('legs'));
130  }
131 
133  {
134  $storage = $this->getStorage();
135  $storage->start();
136  $storage->getBag('attributes')->set('lucky', 7);
137  $storage->regenerate();
138  $storage->getBag('attributes')->set('lucky', 42);
139 
140  $this->assertEquals(42, $_SESSION['_sf2_attributes']['lucky']);
141  }
142 
144  {
145  $storage = $this->getStorage();
146  $this->assertFalse($storage->regenerate());
147  $this->assertFalse($storage->isStarted());
148  }
149 
151  {
152  $this->iniSet('session.cache_limiter', 'nocache');
153 
155  $this->assertEquals('', ini_get('session.cache_limiter'));
156  }
157 
159  {
160  $this->iniSet('session.cache_limiter', 'nocache');
161 
162  $storage = new NativeSessionStorage(array('cache_limiter' => 'public'));
163  $this->assertEquals('public', ini_get('session.cache_limiter'));
164  }
165 
166  public function testCookieOptions()
167  {
168  $options = array(
169  'cookie_lifetime' => 123456,
170  'cookie_path' => '/my/cookie/path',
171  'cookie_domain' => 'symfony.example.com',
172  'cookie_secure' => true,
173  'cookie_httponly' => false,
174  );
175 
176  $this->getStorage($options);
177  $temp = session_get_cookie_params();
178  $gco = array();
179 
180  foreach ($temp as $key => $value) {
181  $gco['cookie_'.$key] = $value;
182  }
183 
184  $this->assertEquals($options, $gco);
185  }
186 
190  public function testSetSaveHandlerException()
191  {
192  $storage = $this->getStorage();
193  $storage->setSaveHandler(new \stdClass());
194  }
195 
196  public function testSetSaveHandler()
197  {
198  $this->iniSet('session.save_handler', 'files');
199  $storage = $this->getStorage();
200  $storage->setSaveHandler();
201  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
202  $storage->setSaveHandler(null);
203  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
204  $storage->setSaveHandler(new SessionHandlerProxy(new NativeSessionHandler()));
205  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
206  $storage->setSaveHandler(new NativeSessionHandler());
207  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
208  $storage->setSaveHandler(new SessionHandlerProxy(new NullSessionHandler()));
209  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
210  $storage->setSaveHandler(new NullSessionHandler());
211  $this->assertInstanceOf('Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy', $storage->getSaveHandler());
212  }
213 
217  public function testStarted()
218  {
219  $storage = $this->getStorage();
220 
221  $this->assertFalse($storage->getSaveHandler()->isActive());
222  $this->assertFalse($storage->isStarted());
223 
224  session_start();
225  $this->assertTrue(isset($_SESSION));
226  $this->assertTrue($storage->getSaveHandler()->isActive());
227 
228  // PHP session might have started, but the storage driver has not, so false is correct here
229  $this->assertFalse($storage->isStarted());
230 
231  $key = $storage->getMetadataBag()->getStorageKey();
232  $this->assertFalse(isset($_SESSION[$key]));
233  $storage->start();
234  }
235 
236  public function testRestart()
237  {
238  $storage = $this->getStorage();
239  $storage->start();
240  $id = $storage->getId();
241  $storage->getBag('attributes')->set('lucky', 7);
242  $storage->save();
243  $storage->start();
244  $this->assertSame($id, $storage->getId(), 'Same session ID after restarting');
245  $this->assertSame(7, $storage->getBag('attributes')->get('lucky'), 'Data still available');
246  }
247 }
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\getStorage
getStorage(array $options=array())
Definition: NativeSessionStorageTest.php:61
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testGetId
testGetId()
Definition: NativeSessionStorageTest.php:96
Symfony\Component\HttpFoundation\Session\Flash\FlashBag
Definition: lib/vendor/symfony/http-foundation/Session/Flash/FlashBag.php:19
Symfony\Component\HttpFoundation\Session\Storage\Proxy\SessionHandlerProxy
Definition: lib/vendor/symfony/http-foundation/Session/Storage/Proxy/SessionHandlerProxy.php:19
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRestart
testRestart()
Definition: NativeSessionStorageTest.php:236
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testDefaultSessionCacheLimiter
testDefaultSessionCacheLimiter()
Definition: NativeSessionStorageTest.php:150
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRegenerateDestroy
testRegenerateDestroy()
Definition: NativeSessionStorageTest.php:121
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\setUp
setUp()
Definition: NativeSessionStorageTest.php:36
Symfony\Component\HttpFoundation\Session\Session\$storage
$storage
Definition: lib/vendor/symfony/http-foundation/Session/Session.php:37
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\tearDown
tearDown()
Definition: NativeSessionStorageTest.php:45
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest
Definition: NativeSessionStorageTest.php:32
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testStarted
testStarted()
Definition: NativeSessionStorageTest.php:217
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testExplicitSessionCacheLimiter
testExplicitSessionCacheLimiter()
Definition: NativeSessionStorageTest.php:158
Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage
Definition: lib/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php:25
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testCookieOptions
testCookieOptions()
Definition: NativeSessionStorageTest.php:166
Symfony\Component\HttpFoundation\Tests\Session\Storage
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRegisterBagForAStartedSessionThrowsException
testRegisterBagForAStartedSessionThrowsException()
Definition: NativeSessionStorageTest.php:89
Symfony\Component\HttpFoundation\Session\Storage\Handler\NullSessionHandler
Definition: lib/vendor/symfony/http-foundation/Session/Storage/Handler/NullSessionHandler.php:21
Symfony\Component\HttpFoundation\Session\Storage\Handler\NativeSessionHandler
Definition: NativeSessionHandler.php:19
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRegisterBagException
testRegisterBagException()
Definition: NativeSessionStorageTest.php:80
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testSessionGlobalIsUpToDateAfterIdRegeneration
testSessionGlobalIsUpToDateAfterIdRegeneration()
Definition: NativeSessionStorageTest.php:132
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRegenerationFailureDoesNotFlagStorageAsStarted
testRegenerationFailureDoesNotFlagStorageAsStarted()
Definition: NativeSessionStorageTest.php:143
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testSetSaveHandler
testSetSaveHandler()
Definition: NativeSessionStorageTest.php:196
Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag
Definition: lib/vendor/symfony/http-foundation/Session/Attribute/AttributeBag.php:17
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testSetSaveHandlerException
testSetSaveHandlerException()
Definition: NativeSessionStorageTest.php:190
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testRegenerate
testRegenerate()
Definition: NativeSessionStorageTest.php:110
Symfony\Component\HttpFoundation\Tests\Session\Storage\NativeSessionStorageTest\testBag
testBag()
Definition: NativeSessionStorageTest.php:69