From 0990d6475601e5993e81cbbb4463f7505b5a065e Mon Sep 17 00:00:00 2001 From: Christian Schmidt Date: Sat, 8 Nov 2014 15:05:56 +0100 Subject: [PATCH] Ensure metadata cache is not ArrayCache in production --- lib/Doctrine/ORM/Configuration.php | 3 + lib/Doctrine/ORM/ORMException.php | 8 +++ .../Doctrine/Tests/ORM/ConfigurationTest.php | 64 +++++++++++++------ 3 files changed, 54 insertions(+), 21 deletions(-) diff --git a/lib/Doctrine/ORM/Configuration.php b/lib/Doctrine/ORM/Configuration.php index 02433b93c..e92a04cd5 100644 --- a/lib/Doctrine/ORM/Configuration.php +++ b/lib/Doctrine/ORM/Configuration.php @@ -388,6 +388,9 @@ class Configuration extends \Doctrine\DBAL\Configuration if ( ! $this->getMetadataCacheImpl()) { throw ORMException::metadataCacheNotConfigured(); } + if ($this->getMetadataCacheImpl() instanceof ArrayCache) { + throw ORMException::metadataCacheUsesArrayCache(); + } if ($this->getAutoGenerateProxyClasses()) { throw ORMException::proxyClassesAlwaysRegenerating(); diff --git a/lib/Doctrine/ORM/ORMException.php b/lib/Doctrine/ORM/ORMException.php index 799fd1b8d..0cea4e087 100644 --- a/lib/Doctrine/ORM/ORMException.php +++ b/lib/Doctrine/ORM/ORMException.php @@ -232,6 +232,14 @@ class ORMException extends Exception return new self('Class Metadata Cache is not configured.'); } + /** + * @return ORMException + */ + public static function metadataCacheUsesArrayCache() + { + return new self('Metadata Cache uses ArrayCache.'); + } + /** * @return ORMException */ diff --git a/tests/Doctrine/Tests/ORM/ConfigurationTest.php b/tests/Doctrine/Tests/ORM/ConfigurationTest.php index 4d0c28349..c7fe0981b 100644 --- a/tests/Doctrine/Tests/ORM/ConfigurationTest.php +++ b/tests/Doctrine/Tests/ORM/ConfigurationTest.php @@ -2,6 +2,7 @@ namespace Doctrine\Tests\ORM; +use Doctrine\Common\Cache\ArrayCache; use Doctrine\ORM\Mapping as AnnotationNamespace; use Doctrine\ORM\Configuration; use Doctrine\ORM\ORMException; @@ -136,31 +137,52 @@ class ConfigurationTest extends PHPUnit_Framework_TestCase $this->configuration->getNamedQuery('NonExistingQuery'); } - public function ensureProductionSettings() + protected function setProductionSettings($skipCache = false) { $cache = $this->getMock('Doctrine\Common\Cache\Cache'); - $this->configuration->setAutoGenerateProxyClasses(true); - - try { - $this->configuration->ensureProductionSettings(); - $this->fail('Didn\'t check all production settings'); - } catch (ORMException $e) {} - - $this->configuration->setQueryCacheImpl($cache); - - try { - $this->configuration->ensureProductionSettings(); - $this->fail('Didn\'t check all production settings'); - } catch (ORMException $e) {} - - $this->configuration->setMetadataCacheImpl($cache); - - try { - $this->configuration->ensureProductionSettings(); - $this->fail('Didn\'t check all production settings'); - } catch (ORMException $e) {} $this->configuration->setAutoGenerateProxyClasses(false); + if ($skipCache !== 'query') { + $this->configuration->setQueryCacheImpl($cache); + } + if ($skipCache !== 'metadata') { + $this->configuration->setMetadataCacheImpl($cache); + } + } + + public function testEnsureProductionSettings() + { + $this->setProductionSettings(); + $this->configuration->ensureProductionSettings(); + } + + public function testEnsureProductionSettingsQueryCache() + { + $this->setProductionSettings('query'); + $this->setExpectedException('Doctrine\ORM\ORMException', 'Query Cache is not configured.'); + $this->configuration->ensureProductionSettings(); + } + + public function testEnsureProductionSettingsMetadataCache() + { + $this->setProductionSettings('metadata'); + $this->setExpectedException('Doctrine\ORM\ORMException', 'Metadata Cache is not configured.'); + $this->configuration->ensureProductionSettings(); + } + + public function testEnsureProductionSettingsMetadataArrayCache() + { + $this->setProductionSettings(); + $this->configuration->setMetadataCacheImpl(new ArrayCache()); + $this->setExpectedException('Doctrine\ORM\ORMException', 'Metadata Cache uses ArrayCache.'); + $this->configuration->ensureProductionSettings(); + } + + public function testEnsureProductionSettingsAutoGenerateProxyClasses() + { + $this->setProductionSettings(); + $this->configuration->setAutoGenerateProxyClasses(true); + $this->setExpectedException('Doctrine\ORM\ORMException', 'Proxy Classes are always regenerating.'); $this->configuration->ensureProductionSettings(); }