mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 12:05:37 +00:00
Merge pull request #10776 from creative-commoners/pulls/5.0/acpu-memcached-factories
FIX Get ApcuCacheFactory and MemcachedCacheFactory working again
This commit is contained in:
commit
58813d5075
@ -3,12 +3,11 @@
|
||||
namespace SilverStripe\Core\Cache;
|
||||
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use Symfony\Component\Cache\Simple\ApcuCache;
|
||||
use Memcached;
|
||||
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
||||
use Symfony\Component\Cache\Psr16Cache;
|
||||
|
||||
class ApcuCacheFactory implements CacheFactory
|
||||
{
|
||||
|
||||
/**
|
||||
* @var string
|
||||
*/
|
||||
@ -31,10 +30,11 @@ class ApcuCacheFactory implements CacheFactory
|
||||
? $params['namespace'] . '_' . md5(BASE_PATH)
|
||||
: md5(BASE_PATH);
|
||||
$defaultLifetime = isset($params['defaultLifetime']) ? $params['defaultLifetime'] : 0;
|
||||
return Injector::inst()->createWithArgs(ApcuCache::class, [
|
||||
$psr6Cache = Injector::inst()->createWithArgs(ApcuAdapter::class, [
|
||||
$namespace,
|
||||
$defaultLifetime,
|
||||
$this->version
|
||||
]);
|
||||
return Injector::inst()->createWithArgs(Psr16Cache::class, [$psr6Cache]);
|
||||
}
|
||||
}
|
||||
|
@ -3,7 +3,8 @@
|
||||
namespace SilverStripe\Core\Cache;
|
||||
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use Symfony\Component\Cache\Simple\MemcachedCache;
|
||||
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
|
||||
use Symfony\Component\Cache\Psr16Cache;
|
||||
use Memcached;
|
||||
|
||||
class MemcachedCacheFactory implements CacheFactory
|
||||
@ -31,10 +32,11 @@ class MemcachedCacheFactory implements CacheFactory
|
||||
? $params['namespace'] . '_' . md5(BASE_PATH)
|
||||
: md5(BASE_PATH);
|
||||
$defaultLifetime = isset($params['defaultLifetime']) ? $params['defaultLifetime'] : 0;
|
||||
return Injector::inst()->createWithArgs(MemcachedCache::class, [
|
||||
$psr6Cache = Injector::inst()->createWithArgs(MemcachedAdapter::class, [
|
||||
$this->memcachedClient,
|
||||
$namespace,
|
||||
$defaultLifetime
|
||||
]);
|
||||
return Injector::inst()->createWithArgs(Psr16Cache::class, [$psr6Cache]);
|
||||
}
|
||||
}
|
||||
|
@ -2,14 +2,17 @@
|
||||
|
||||
namespace SilverStripe\Core\Tests\Cache;
|
||||
|
||||
use Behat\Gherkin\Cache\MemoryCache;
|
||||
use Psr\SimpleCache\CacheInterface;
|
||||
use SilverStripe\Core\Cache\ApcuCacheFactory;
|
||||
use SilverStripe\Core\Cache\MemcachedCacheFactory;
|
||||
use SilverStripe\Core\Injector\Injector;
|
||||
use SilverStripe\Core\Tests\Cache\CacheTest\MockCache;
|
||||
use SilverStripe\Dev\SapphireTest;
|
||||
use Symfony\Component\Cache\Simple\ApcuCache;
|
||||
use Symfony\Component\Cache\Simple\MemcachedCache;
|
||||
use Symfony\Component\Cache\Psr16Cache;
|
||||
use Symfony\Component\Cache\Adapter\ApcuAdapter;
|
||||
use Symfony\Component\Cache\Adapter\MemcachedAdapter;
|
||||
use Memcached;
|
||||
|
||||
class CacheTest extends SapphireTest
|
||||
{
|
||||
@ -22,7 +25,10 @@ class CacheTest extends SapphireTest
|
||||
ApcuCacheFactory::class => [
|
||||
'constructor' => [ 'version' => 'ss40test' ]
|
||||
],
|
||||
MemcachedCacheFactory::class => MemcachedCacheFactory::class,
|
||||
'MemcachedClient' => Memcached::class,
|
||||
MemcachedCacheFactory::class => [
|
||||
'constructor' => [ 'memcachedClient' => '%$MemcachedClient' ]
|
||||
],
|
||||
CacheInterface::class . '.TestApcuCache' => [
|
||||
'factory' => ApcuCacheFactory::class,
|
||||
'constructor' => [
|
||||
@ -37,42 +43,42 @@ class CacheTest extends SapphireTest
|
||||
'defaultLifetime' => 5600,
|
||||
],
|
||||
],
|
||||
ApcuCache::class => MockCache::class,
|
||||
MemcachedCache::class => MockCache::class,
|
||||
Psr16Cache::class => MockCache::class,
|
||||
ApcuAdapter::class => MockCache::class,
|
||||
MemcachedAdapter::class => MockCache::class,
|
||||
]);
|
||||
}
|
||||
|
||||
public function testApcuCacheFactory()
|
||||
{
|
||||
$cache = Injector::inst()->get(CacheInterface::class . '.TestApcuCache');
|
||||
$this->assertInstanceOf(
|
||||
MockCache::class,
|
||||
$cache
|
||||
);
|
||||
$psr16Cache = Injector::inst()->get(CacheInterface::class . '.TestApcuCache');
|
||||
$this->assertInstanceOf(MockCache::class, $psr16Cache);
|
||||
$this->assertEquals(MockCache::class, get_class($psr16Cache->getArgs()[0]));
|
||||
$this->assertEquals(
|
||||
[
|
||||
'TestApcuCache_' . md5(BASE_PATH),
|
||||
2600,
|
||||
'ss40test'
|
||||
],
|
||||
$cache->getArgs()
|
||||
$psr16Cache->getArgs()[0]->getArgs()
|
||||
);
|
||||
}
|
||||
|
||||
public function testMemCacheFactory()
|
||||
{
|
||||
$cache = Injector::inst()->get(CacheInterface::class . '.TestMemcache');
|
||||
$this->assertInstanceOf(
|
||||
MockCache::class,
|
||||
$cache
|
||||
);
|
||||
if (!class_exists(Memcached::class)) {
|
||||
$this->markTestSkipped('Memcached is not installed');
|
||||
}
|
||||
$psr16Cache = Injector::inst()->get(CacheInterface::class . '.TestMemcache');
|
||||
$this->assertInstanceOf(MockCache::class, $psr16Cache);
|
||||
$this->assertEquals(MockCache::class, get_class($psr16Cache->getArgs()[0]));
|
||||
$this->assertEquals(
|
||||
[
|
||||
null,
|
||||
new MemCached(),
|
||||
'TestMemCache_' . md5(BASE_PATH),
|
||||
5600
|
||||
],
|
||||
$cache->getArgs()
|
||||
$psr16Cache->getArgs()[0]->getArgs()
|
||||
);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user