From 09027ada4e78234af1c8eae3bca0747eed7d6ffa Mon Sep 17 00:00:00 2001 From: David Alger Date: Mon, 8 Feb 2016 15:09:34 -0600 Subject: [PATCH 1/2] Resolves #2705: add explicit set of path component to generated request uris --- .../Magento/PageCache/Model/Cache/Server.php | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/app/code/Magento/PageCache/Model/Cache/Server.php b/app/code/Magento/PageCache/Model/Cache/Server.php index 2e2f3a87fb8c0..bd103cd5a7de7 100644 --- a/app/code/Magento/PageCache/Model/Cache/Server.php +++ b/app/code/Magento/PageCache/Model/Cache/Server.php @@ -5,16 +5,17 @@ */ namespace Magento\PageCache\Model\Cache; -use Zend\Uri\Uri; +use Magento\Framework\UrlInterface; use Magento\Framework\App\DeploymentConfig; use Magento\Framework\Config\ConfigOptionsListConstants; use Magento\Framework\App\RequestInterface; +use Zend\Uri\Uri; use Zend\Uri\UriFactory; class Server { /** - * @var \Magento\Framework\UrlInterface + * @var UrlInterface */ protected $urlBuilder; @@ -33,12 +34,12 @@ class Server /** * Constructor * - * @param \Magento\Framework\UrlInterface $urlBuilder + * @param UrlInterface $urlBuilder * @param DeploymentConfig $config * @param RequestInterface $request */ public function __construct( - \Magento\Framework\UrlInterface $urlBuilder, + UrlInterface $urlBuilder, DeploymentConfig $config, RequestInterface $request ) { @@ -56,21 +57,25 @@ public function getUris() { $servers = []; $configuredHosts = $this->config->get(ConfigOptionsListConstants::CONFIG_PATH_CACHE_HOSTS); - if (null == $configuredHosts) { - $httpHost = $this->request->getHttpHost(); - $servers[] = $httpHost ? - UriFactory::factory('')->setHost($httpHost)->setPort(self::DEFAULT_PORT)->setScheme('http') : - UriFactory::factory($this->urlBuilder->getUrl('*', ['_nosid' => true])) // Don't use SID in building URL - ->setScheme('http') - ->setPath(null) - ->setQuery(null); - } else { + if (is_array($configuredHosts)) { foreach ($configuredHosts as $host) { - $servers[] = UriFactory::factory('')->setHost($host['host']) + $servers[] = UriFactory::factory('') + ->setHost($host['host']) ->setPort(isset($host['port']) ? $host['port'] : self::DEFAULT_PORT) - ->setScheme('http'); + ; } + } elseif ($this->request->getHttpHost()) { + $servers[] = UriFactory::factory('')->setHost($this->request->getHttpHost())->setPort(self::DEFAULT_PORT); + } else { + $servers[] = UriFactory::factory($this->urlBuilder->getUrl('*', ['_nosid' => true])); + } + + foreach ($servers as $key => $value) { + $servers[$key]->setScheme('http') + ->setPath('/') + ->setQuery(null) + ; } return $servers; } From 6e2882a06170cc1ed10f6b9495fa7ab37c0e6c49 Mon Sep 17 00:00:00 2001 From: David Alger Date: Mon, 8 Feb 2016 15:48:45 -0600 Subject: [PATCH 2/2] Update unit test to properly test corrected implementation of getUris --- .../Test/Unit/Model/Cache/ServerTest.php | 35 ++++++++++--------- 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php b/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php index f18c5e04468da..5f75a1c5a8106 100644 --- a/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php +++ b/app/code/Magento/PageCache/Test/Unit/Model/Cache/ServerTest.php @@ -5,11 +5,13 @@ */ namespace Magento\PageCache\Test\Unit\Model\Cache; +use \Magento\Framework\TestFramework\Unit\Helper\ObjectManager; +use \Magento\PageCache\Model\Cache\Server; use \Zend\Uri\UriFactory; class ServerTest extends \PHPUnit_Framework_TestCase { - /** @var \Magento\PageCache\Model\Cache\Server */ + /** @var Server */ protected $model; /** @var \PHPUnit_Framework_MockObject_MockObject | \Magento\Framework\App\DeploymentConfig */ @@ -30,7 +32,7 @@ public function setUp() ->disableOriginalConstructor() ->getMock(); - $objectManager = new \Magento\Framework\TestFramework\Unit\Helper\ObjectManager($this); + $objectManager = new ObjectManager($this); $this->model = $objectManager->getObject( 'Magento\PageCache\Model\Cache\Server', [ @@ -56,12 +58,9 @@ public function testGetUris( $url, $hostConfig = null ) { - $this->configMock->expects($this->once()) - ->method('get') - ->willReturn($hostConfig); - $this->requestMock->expects($this->exactly($getHttpHostCallCtr)) - ->method('getHttpHost') - ->willReturn($httpHost); + $this->configMock->expects($this->once())->method('get')->willReturn($hostConfig); + $this->requestMock->expects($this->exactly($getHttpHostCallCtr))->method('getHttpHost')->willReturn($httpHost); + $this->urlBuilderMock->expects($this->exactly($getUrlCallCtr)) ->method('getUrl') ->with('*', ['_nosid' => true]) @@ -70,30 +69,32 @@ public function testGetUris( $uris = []; if (null === $hostConfig) { if (!empty($httpHost)) { - $uris[] = UriFactory::factory('')->setHost($httpHost) - ->setPort(\Magento\PageCache\Model\Cache\Server::DEFAULT_PORT) - ->setScheme('http'); + $uris[] = UriFactory::factory('')->setHost($httpHost)->setPort(Server::DEFAULT_PORT); } if (!empty($url)) { $uris[] = UriFactory::factory($url); } } else { foreach ($hostConfig as $host) { - $port = isset($host['port']) ? $host['port'] : \Magento\PageCache\Model\Cache\Server::DEFAULT_PORT; - $uris[] = UriFactory::factory('')->setHost($host['host']) - ->setPort($port) - ->setScheme('http'); + $port = isset($host['port']) ? $host['port'] : Server::DEFAULT_PORT; + $uris[] = UriFactory::factory('')->setHost($host['host'])->setPort($port); } } + foreach ($uris as $key => $value) { + $uris[$key]->setScheme('http') + ->setPath('/') + ->setQuery(null); + } + $this->assertEquals($uris, $this->model->getUris()); } public function getUrisDataProvider() { return [ - 'http host' => [1, '127.0.0.1', 0, '',], - 'url' => [1, '', 1, 'http://host',], + 'http host' => [2, '127.0.0.1', 0, ''], + 'url' => [1, '', 1, 'http://host'], 'config' => [ 0, '',