diff --git a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php index 31121e1..344364d 100644 --- a/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php +++ b/core/lib/Drupal/Core/StackMiddleware/ReverseProxyMiddleware.php @@ -4,6 +4,8 @@ * Contains \Drupal\Core\StackMiddleware\ReverseProxyMiddleware */ +namespace Drupal\Core\StackMiddleware; + use Drupal\Core\Site\Settings; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpKernel\HttpKernelInterface; diff --git a/core/tests/Drupal/Tests/Core/StackMiddleware/ReverseProxyMiddlewareTest.php b/core/tests/Drupal/Tests/Core/StackMiddleware/ReverseProxyMiddlewareTest.php index 0466b0f..231f833 100644 --- a/core/tests/Drupal/Tests/Core/StackMiddleware/ReverseProxyMiddlewareTest.php +++ b/core/tests/Drupal/Tests/Core/StackMiddleware/ReverseProxyMiddlewareTest.php @@ -2,10 +2,10 @@ /** * @file - * Contains \Drupal\Core\EventSubscriber\ReverseProxyMiddlewareTest. + * Contains \Drupal\Tests\Core\StackMiddleware\ReverseProxyMiddlewareTest. */ -namespace Drupal\Tests\Core\EventSubscriber; +namespace Drupal\Tests\Core\StackMiddleware; use Drupal\Core\Site\Settings; use Drupal\Core\StackMiddleware\ReverseProxyMiddleware; @@ -13,50 +13,70 @@ use Symfony\Component\HttpFoundation\Request; /** - * Unit test the reverse proxy event subscriber. + * Unit test the reverse proxy stack middleware. * - * @group EventSubscriber + * @group StackMiddleware */ class ReverseProxyMiddlewareTest extends UnitTestCase { /** + * @var \Symfony\Component\HttpKernel\HttpKernelInterface|\PHPUnit_Framework_MockObject_MockObject + */ + protected $mockHttpKernel; + + /** + * {@inheritdoc} + */ + public function setUp() { + $this->mockHttpKernel = $this->getMock('Symfony\Component\HttpKernel\HttpKernelInterface'); + } + + /** * Tests that subscriber does not act when reverse proxy is not set. */ public function testNoProxy() { $settings = new Settings(array()); $this->assertEquals(0, $settings->get('reverse_proxy')); - $subscriber = new ReverseProxySubscriber($settings); + $middleware = new ReverseProxyMiddleware($this->mockHttpKernel, $settings); // Mock a request object. $request = $this->getMock('Symfony\Component\HttpFoundation\Request', array('setTrustedHeaderName', 'setTrustedProxies')); // setTrustedHeaderName() should never fire. $request->expects($this->never()) ->method('setTrustedHeaderName'); - // Mock a response event. - $event = $this->getMockedEvent($request); // Actually call the check method. - $subscriber->onKernelRequestReverseProxyCheck($event); + $middleware->handle($request); } /** * Tests that subscriber sets trusted headers when reverse proxy is set. + * + * @dataProvider testReverseProxyEnabledProvider */ - public function testReverseProxyEnabled() { - $cases = array( + public function testReverseProxyEnabled($provided_settings) { + // Enable reverse proxy and add test values. + $settings = new Settings(array('reverse_proxy' => 1) + $provided_settings); + $this->trustedHeadersAreSet($settings); + } + + /** + * Data provider for testReverseProxyEnabled. + */ + public function testReverseProxyEnabledProvider() { + return array( array( - 'reverse_proxy_header' => 'HTTP_X_FORWARDED_FOR', - 'reverse_proxy_addresses' => array(), + array( + 'reverse_proxy_header' => 'HTTP_X_FORWARDED_FOR', + 'reverse_proxy_addresses' => array(), + ), ), array( - 'reverse_proxy_header' => 'X_FORWARDED_HOST', - 'reverse_proxy_addresses' => array('127.0.0.2', '127.0.0.3'), + array( + 'reverse_proxy_header' => 'X_FORWARDED_HOST', + 'reverse_proxy_addresses' => array('127.0.0.2', '127.0.0.3'), + ), ), ); - foreach ($cases as $case) { - // Enable reverse proxy and add test values. - $settings = new Settings(array('reverse_proxy' => 1) + $case); - $this->trustedHeadersAreSet($settings); - } } /** @@ -70,34 +90,11 @@ public function testReverseProxyEnabled() { * The settings object that holds reverse proxy configuration. */ protected function trustedHeadersAreSet(Settings $settings) { - $subscriber = new ReverseProxySubscriber($settings); + $middleware = new ReverseProxyMiddleware($this->mockHttpKernel, $settings); $request = new Request(); - $event = $this->getMockedEvent($request); - $subscriber->onKernelRequestReverseProxyCheck($event); + $middleware->handle($request); $this->assertSame($settings->get('reverse_proxy_header'), $request->getTrustedHeaderName($request::HEADER_CLIENT_IP)); $this->assertSame($settings->get('reverse_proxy_addresses'), $request->getTrustedProxies()); } - - /** - * Creates a mocked event. - * - * Mocks a \Symfony\Component\HttpKernel\Event\GetResponseEvent object - * and stubs its getRequest() method to return a mocked request object. - * - * @param \Symfony\Component\HttpFoundation\Request $request - * A mocked Request object. - * - * @return \Symfony\Component\HttpKernel\Event\GetResponseEvent - * The GetResponseEvent mocked object. - */ - protected function getMockedEvent($request) { - $event = $this->getMockBuilder('Symfony\Component\HttpKernel\Event\GetResponseEvent') - ->disableOriginalConstructor() - ->getMock(); - $event->expects($this->once()) - ->method('getRequest') - ->will($this->returnValue($request)); - return $event; - } }