From 26733eb54f98cf45e136f2f6901057cccff578f2 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Fri, 22 Jun 2018 19:22:34 -0700 Subject: [PATCH] (dev/core#174) Redis - Updates to comply with PSR-16 --- CRM/Utils/Cache/Redis.php | 14 ++++-- .../E2E/Cache/ConfiguredMemoryTest.php | 48 +++++++++++++++++++ 2 files changed, 57 insertions(+), 5 deletions(-) create mode 100644 tests/phpunit/E2E/Cache/ConfiguredMemoryTest.php diff --git a/CRM/Utils/Cache/Redis.php b/CRM/Utils/Cache/Redis.php index 01fc538c93..3e2f2f7f9b 100644 --- a/CRM/Utils/Cache/Redis.php +++ b/CRM/Utils/Cache/Redis.php @@ -123,16 +123,18 @@ class CRM_Utils_Cache_Redis implements CRM_Utils_Cache_Interface { * @throws Exception */ public function set($key, $value, $ttl = NULL) { - if ($ttl !== NULL) { - throw new \RuntimeException("FIXME: " . __CLASS__ . "::set() should support non-NULL TTL"); + CRM_Utils_Cache::assertValidKey($key); + if (is_int($ttl) && $ttl <= 0) { + return $this->delete($key); } - if (!$this->_cache->set($this->_prefix . $key, serialize($value), $this->_timeout)) { + $ttl = CRM_Utils_Date::convertCacheTtl($ttl, self::DEFAULT_TIMEOUT); + if (!$this->_cache->setex($this->_prefix . $key, $ttl, serialize($value))) { if (PHP_SAPI === 'cli' || (Civi\Core\Container::isContainerBooted() && CRM_Core_Permission::check('view debug output'))) { - CRM_Core_Error::fatal("Redis set ($key) failed: " . $this->_cache->getLastError()); + throw new CRM_Utils_Cache_CacheException("Redis set ($key) failed: " . $this->_cache->getLastError()); } else { Civi::log()->error("Redis set ($key) failed: " . $this->_cache->getLastError()); - CRM_Core_Error::fatal("Redis set ($key) failed"); + throw new CRM_Utils_Cache_CacheException("Redis set ($key) failed"); } return FALSE; } @@ -146,6 +148,7 @@ class CRM_Utils_Cache_Redis implements CRM_Utils_Cache_Interface { * @return mixed */ public function get($key, $default = NULL) { + CRM_Utils_Cache::assertValidKey($key); $result = $this->_cache->get($this->_prefix . $key); return ($result === FALSE) ? $default : unserialize($result); } @@ -156,6 +159,7 @@ class CRM_Utils_Cache_Redis implements CRM_Utils_Cache_Interface { * @return bool */ public function delete($key) { + CRM_Utils_Cache::assertValidKey($key); $this->_cache->delete($this->_prefix . $key); return TRUE; } diff --git a/tests/phpunit/E2E/Cache/ConfiguredMemoryTest.php b/tests/phpunit/E2E/Cache/ConfiguredMemoryTest.php new file mode 100644 index 0000000000..5f1ea8bc07 --- /dev/null +++ b/tests/phpunit/E2E/Cache/ConfiguredMemoryTest.php @@ -0,0 +1,48 @@ +markTestSkipped('This environment is not configured to use a memory-backed cache service.'); + } + } + +} -- 2.25.1