123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185 |
- <?php
- /*
- * This file is part of the Symfony package.
- *
- * (c) Fabien Potencier <fabien@symfony.com>
- *
- * For the full copyright and license information, please view the LICENSE
- * file that was distributed with this source code.
- */
- namespace Symfony\Component\HttpKernel\Tests\HttpCache;
- use PHPUnit\Framework\TestCase;
- use Symfony\Component\HttpFoundation\Request;
- use Symfony\Component\HttpKernel\HttpCache\Esi;
- use Symfony\Component\HttpKernel\HttpCache\HttpCache;
- use Symfony\Component\HttpKernel\HttpCache\Store;
- use Symfony\Component\HttpKernel\HttpKernelInterface;
- class HttpCacheTestCase extends TestCase
- {
- protected $kernel;
- protected $cache;
- protected $caches;
- protected $cacheConfig;
- protected $request;
- protected $response;
- protected $responses;
- protected $catch;
- protected $esi;
- /**
- * @var Store
- */
- protected $store;
- protected function setUp()
- {
- $this->kernel = null;
- $this->cache = null;
- $this->esi = null;
- $this->caches = [];
- $this->cacheConfig = [];
- $this->request = null;
- $this->response = null;
- $this->responses = [];
- $this->catch = false;
- $this->clearDirectory(sys_get_temp_dir().'/http_cache');
- }
- protected function tearDown()
- {
- if ($this->cache) {
- $this->cache->getStore()->cleanup();
- }
- $this->kernel = null;
- $this->cache = null;
- $this->caches = null;
- $this->request = null;
- $this->response = null;
- $this->responses = null;
- $this->cacheConfig = null;
- $this->catch = null;
- $this->esi = null;
- $this->clearDirectory(sys_get_temp_dir().'/http_cache');
- }
- public function assertHttpKernelIsCalled()
- {
- $this->assertTrue($this->kernel->hasBeenCalled());
- }
- public function assertHttpKernelIsNotCalled()
- {
- $this->assertFalse($this->kernel->hasBeenCalled());
- }
- public function assertResponseOk()
- {
- $this->assertEquals(200, $this->response->getStatusCode());
- }
- public function assertTraceContains($trace)
- {
- $traces = $this->cache->getTraces();
- $traces = current($traces);
- $this->assertRegExp('/'.$trace.'/', implode(', ', $traces));
- }
- public function assertTraceNotContains($trace)
- {
- $traces = $this->cache->getTraces();
- $traces = current($traces);
- $this->assertNotRegExp('/'.$trace.'/', implode(', ', $traces));
- }
- public function assertExceptionsAreCaught()
- {
- $this->assertTrue($this->kernel->isCatchingExceptions());
- }
- public function assertExceptionsAreNotCaught()
- {
- $this->assertFalse($this->kernel->isCatchingExceptions());
- }
- public function request($method, $uri = '/', $server = [], $cookies = [], $esi = false, $headers = [])
- {
- if (null === $this->kernel) {
- throw new \LogicException('You must call setNextResponse() before calling request().');
- }
- $this->kernel->reset();
- $this->store = new Store(sys_get_temp_dir().'/http_cache');
- $this->cacheConfig['debug'] = true;
- $this->esi = $esi ? new Esi() : null;
- $this->cache = new HttpCache($this->kernel, $this->store, $this->esi, $this->cacheConfig);
- $this->request = Request::create($uri, $method, [], $cookies, [], $server);
- $this->request->headers->add($headers);
- $this->response = $this->cache->handle($this->request, HttpKernelInterface::MASTER_REQUEST, $this->catch);
- $this->responses[] = $this->response;
- }
- public function getMetaStorageValues()
- {
- $values = [];
- foreach (new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator(sys_get_temp_dir().'/http_cache/md', \RecursiveDirectoryIterator::SKIP_DOTS), \RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
- $values[] = file_get_contents($file);
- }
- return $values;
- }
- // A basic response with 200 status code and a tiny body.
- public function setNextResponse($statusCode = 200, array $headers = [], $body = 'Hello World', \Closure $customizer = null)
- {
- $this->kernel = new TestHttpKernel($body, $statusCode, $headers, $customizer);
- }
- public function setNextResponses($responses)
- {
- $this->kernel = new TestMultipleHttpKernel($responses);
- }
- public function catchExceptions($catch = true)
- {
- $this->catch = $catch;
- }
- public static function clearDirectory($directory)
- {
- if (!is_dir($directory)) {
- return;
- }
- $fp = opendir($directory);
- while (false !== $file = readdir($fp)) {
- if (!\in_array($file, ['.', '..'])) {
- if (is_link($directory.'/'.$file)) {
- unlink($directory.'/'.$file);
- } elseif (is_dir($directory.'/'.$file)) {
- self::clearDirectory($directory.'/'.$file);
- rmdir($directory.'/'.$file);
- } else {
- unlink($directory.'/'.$file);
- }
- }
- }
- closedir($fp);
- }
- }
|