Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b047a2d

Browse files
alexander-schranznicolas-grekas
authored andcommitted
[HttpKernel] Fix session test cases for symfony
1 parent 111459e commit b047a2d

File tree

1 file changed

+64
-52
lines changed

1 file changed

+64
-52
lines changed

src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php

Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
use Symfony\Component\HttpFoundation\Session\Session;
2323
use Symfony\Component\HttpFoundation\Session\SessionFactory;
2424
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
25-
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;
25+
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory;
26+
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory;
27+
use Symfony\Component\HttpFoundation\Session\Storage\SessionStorageFactoryInterface;
2628
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
2729
use Symfony\Component\HttpKernel\Event\FinishRequestEvent;
2830
use Symfony\Component\HttpKernel\Event\RequestEvent;
@@ -134,20 +136,8 @@ public function testPhpBridgeAlreadyStartedSession()
134136
session_start();
135137
$sessionId = session_id();
136138

137-
$requestStack = new RequestStack();
138139
$request = new Request();
139-
$requestStack->push($request);
140-
141-
$session = new Session();
142-
$sessionStorage = new PhpBridgeSessionStorage();
143-
144-
$container = new Container();
145-
$container->set('request_stack', $requestStack);
146-
$container->set('session', $session);
147-
$container->set('session_storage', $sessionStorage);
148-
149-
$request = new Request();
150-
$listener = new SessionListener($container);
140+
$listener = $this->createListener($request, new PhpBridgeSessionStorageFactory());
151141

152142
$event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST);
153143

@@ -162,17 +152,14 @@ public function testPhpBridgeAlreadyStartedSession()
162152
*/
163153
public function testSessionCookieWrittenNoCookieGiven()
164154
{
165-
$session = new Session();
166-
$session->set('hello', 'world');
167-
168-
$container = new Container();
169-
$container->set('initialized_session', $session);
155+
$request = new Request();
156+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
170157

171-
$listener = new SessionListener($container);
172158
$kernel = $this->createMock(HttpKernelInterface::class);
173159

174-
$request = new Request();
175160
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
161+
$session = $request->getSession();
162+
$session->set('hello', 'world');
176163

177164
$response = new Response();
178165
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
@@ -191,22 +178,25 @@ public function testSessionCookieWrittenNoCookieGiven()
191178
*/
192179
public function testSessionCookieNotWrittenCookieGiven()
193180
{
194-
$session = new Session();
195-
$session->set('hello', 'world');
196-
$sessionId = $session->getId();
197-
198-
$container = new Container();
199-
$container->set('initialized_session', $session);
181+
$sessionId = $this->createValidSessionId();
200182

201-
$listener = new SessionListener($container);
202-
$kernel = $this->createMock(HttpKernelInterface::class);
183+
$this->assertNotEmpty($sessionId);
203184

204185
$request = new Request();
205186
$request->cookies->set('PHPSESSID', $sessionId);
187+
188+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
189+
190+
$kernel = $this->createMock(HttpKernelInterface::class);
206191
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
207192

193+
$session = $request->getSession();
194+
$this->assertSame($sessionId, $session->getId());
195+
$session->set('hello', 'world');
196+
208197
$response = new Response();
209198
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
199+
$this->assertSame($sessionId, $session->getId());
210200

211201
$cookies = $response->headers->getCookies();
212202
$this->assertCount(0, $cookies);
@@ -217,21 +207,18 @@ public function testSessionCookieNotWrittenCookieGiven()
217207
*/
218208
public function testSessionCookieClearedWhenInvalidated()
219209
{
220-
$session = new Session();
221-
222-
$container = new Container();
223-
$container->set('initialized_session', $session);
224-
225-
$listener = new SessionListener($container);
210+
$sessionId = $this->createValidSessionId();
211+
$request = new Request();
212+
$request->cookies->set('PHPSESSID', $sessionId);
213+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
226214
$kernel = $this->createMock(HttpKernelInterface::class);
227215

228-
$request = new Request();
229216
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
230217

218+
$session = $request->getSession();
231219
$session->start();
232220
$sessionId = $session->getId();
233221
$this->assertNotEmpty($sessionId);
234-
$request->cookies->set($session->getName(), $sessionId);
235222
$_SESSION['hello'] = 'world'; // check compatibility to php session bridge
236223

237224
$session->invalidate();
@@ -252,21 +239,18 @@ public function testSessionCookieClearedWhenInvalidated()
252239
*/
253240
public function testSessionCookieNotClearedWhenOtherVariablesSet()
254241
{
255-
$session = new Session();
256-
257-
$container = new Container();
258-
$container->set('initialized_session', $session);
259-
260-
$listener = new SessionListener($container);
242+
$sessionId = $this->createValidSessionId();
243+
$request = new Request();
244+
$request->cookies->set('PHPSESSID', $sessionId);
245+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
261246
$kernel = $this->createMock(HttpKernelInterface::class);
262247

263-
$request = new Request();
264248
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
265249

250+
$session = $request->getSession();
266251
$session->start();
267252
$sessionId = $session->getId();
268253
$this->assertNotEmpty($sessionId);
269-
$request->cookies->set($session->getName(), $sessionId);
270254
$_SESSION['hello'] = 'world';
271255

272256
$response = new Response();
@@ -281,17 +265,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
281265
*/
282266
public function testSessionCookieSetWhenOtherNativeVariablesSet()
283267
{
284-
$session = new Session();
285-
286-
$container = new Container();
287-
$container->set('initialized_session', $session);
288-
289-
$listener = new SessionListener($container);
268+
$request = new Request();
269+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
290270
$kernel = $this->createMock(HttpKernelInterface::class);
291271

292-
$request = new Request();
293272
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
294273

274+
$session = $request->getSession();
295275
$session->start();
296276
$sessionId = $session->getId();
297277
$this->assertNotEmpty($sessionId);
@@ -756,4 +736,36 @@ public function testResetUnclosedSession()
756736
$this->assertEmpty(session_id());
757737
$this->assertSame(\PHP_SESSION_NONE, session_status());
758738
}
739+
740+
private function createListener(Request $request, SessionStorageFactoryInterface $sessionFactory)
741+
{
742+
$requestStack = new RequestStack();
743+
$request = new Request();
744+
$requestStack->push($request);
745+
746+
$sessionFactory = new SessionFactory(
747+
$requestStack,
748+
$sessionFactory,
749+
);
750+
751+
$container = new Container();
752+
$container->set('request_stack', $requestStack);
753+
$container->set('session_factory', $sessionFactory);
754+
755+
$listener = new SessionListener($container);
756+
757+
return new SessionListener($container);
758+
}
759+
760+
private function createValidSessionId(): string
761+
{
762+
session_start();
763+
$sessionId = session_id();
764+
$_SESSION['some'] = 'value';
765+
session_write_close();
766+
$_SESSION = [];
767+
session_abort();
768+
769+
return $sessionId;
770+
}
759771
}

0 commit comments

Comments
 (0)