namespace Symfony\Component\HttpKernel\Tests;
use PHPUnit\Framework\TestCase;
+use Symfony\Component\EventDispatcher\EventDispatcher;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
+use Symfony\Component\HttpFoundation\RedirectResponse;
+use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
+use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Controller\ArgumentResolverInterface;
use Symfony\Component\HttpKernel\Controller\ControllerResolverInterface;
use Symfony\Component\HttpKernel\Event\FilterControllerArgumentsEvent;
+use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
+use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
+use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
use Symfony\Component\HttpKernel\HttpKernel;
use Symfony\Component\HttpKernel\HttpKernelInterface;
use Symfony\Component\HttpKernel\KernelEvents;
-use Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException;
-use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
-use Symfony\Component\HttpFoundation\Request;
-use Symfony\Component\HttpFoundation\Response;
-use Symfony\Component\HttpFoundation\RedirectResponse;
-use Symfony\Component\EventDispatcher\EventDispatcher;
class HttpKernelTest extends TestCase
{
}
/**
+ * @group legacy
* @dataProvider getStatusCodes
*/
- public function testHandleWhenAnExceptionIsHandledWithASpecificStatusCode($responseStatusCode, $expectedStatusCode)
+ public function testLegacyHandleWhenAnExceptionIsHandledWithASpecificStatusCode($responseStatusCode, $expectedStatusCode)
{
$dispatcher = new EventDispatcher();
$dispatcher->addListener(KernelEvents::EXCEPTION, function ($event) use ($responseStatusCode, $expectedStatusCode) {
);
}
+ /**
+ * @dataProvider getSpecificStatusCodes
+ */
+ public function testHandleWhenAnExceptionIsHandledWithASpecificStatusCode($expectedStatusCode)
+ {
+ $dispatcher = new EventDispatcher();
+ $dispatcher->addListener(KernelEvents::EXCEPTION, function (GetResponseForExceptionEvent $event) use ($expectedStatusCode) {
+ $event->allowCustomResponseCode();
+ $event->setResponse(new Response('', $expectedStatusCode));
+ });
+
+ $kernel = $this->getHttpKernel($dispatcher, function () { throw new \RuntimeException(); });
+ $response = $kernel->handle(new Request());
+
+ $this->assertEquals($expectedStatusCode, $response->getStatusCode());
+ }
+
+ public function getSpecificStatusCodes()
+ {
+ return array(
+ array(200),
+ array(302),
+ array(403),
+ );
+ }
+
public function testHandleWhenAListenerReturnsAResponse()
{
$dispatcher = new EventDispatcher();
$oldArguments = $event->getArguments();
$newController = function ($id) use ($oldController, $oldArguments) {
- $response = call_user_func_array($oldController, $oldArguments);
+ $response = \call_user_func_array($oldController, $oldArguments);
$response->headers->set('X-Id', $id);
public function testInconsistentClientIpsOnMasterRequests()
{
$request = new Request();
- $request->setTrustedProxies(array('1.1.1.1'), -1);
+ $request->setTrustedProxies(array('1.1.1.1'), Request::HEADER_X_FORWARDED_FOR | Request::HEADER_FORWARDED);
$request->server->set('REMOTE_ADDR', '1.1.1.1');
$request->headers->set('FORWARDED', 'for=2.2.2.2');
$request->headers->set('X_FORWARDED_FOR', '3.3.3.3');
$kernel = $this->getHttpKernel($dispatcher);
$kernel->handle($request, $kernel::MASTER_REQUEST, false);
+
+ Request::setTrustedProxies(array(), -1);
}
private function getHttpKernel(EventDispatcherInterface $eventDispatcher, $controller = null, RequestStack $requestStack = null, array $arguments = array())