diff --git a/config/autoload/locks.global.php b/config/autoload/locks.global.php index f76c911e..cbf3a000 100644 --- a/config/autoload/locks.global.php +++ b/config/autoload/locks.global.php @@ -2,6 +2,7 @@ declare(strict_types=1); use Shlinkio\Shlink\Common\Cache\RedisFactory; +use Shlinkio\Shlink\Common\Lock\RetryLockStoreDelegatorFactory; use Symfony\Component\Lock; use Zend\ServiceManager\AbstractFactory\ConfigAbstractFactory; @@ -22,6 +23,11 @@ return [ 'lock_store' => Lock\Store\FlockStore::class, 'redis_lock_store' => Lock\Store\RedisStore::class, ], + 'delegators' => [ + Lock\Store\RedisStore::class => [ + RetryLockStoreDelegatorFactory::class, + ], + ], ], ConfigAbstractFactory::class => [ diff --git a/module/Common/src/Lock/RetryLockStoreDelegatorFactory.php b/module/Common/src/Lock/RetryLockStoreDelegatorFactory.php new file mode 100644 index 00000000..7828e24f --- /dev/null +++ b/module/Common/src/Lock/RetryLockStoreDelegatorFactory.php @@ -0,0 +1,18 @@ +originalStore = $this->prophesize(StoreInterface::class)->reveal(); + $this->delegator = new RetryLockStoreDelegatorFactory(); + } + + /** @test */ + public function originalStoreIsWrappedInRetryStore(): void + { + $callback = function () { + return $this->originalStore; + }; + + $result = ($this->delegator)(new ServiceManager(), '', $callback); + + $ref = new ReflectionObject($result); + $prop = $ref->getProperty('decorated'); + $prop->setAccessible(true); + + $this->assertSame($this->originalStore, $prop->getValue($result)); + } +}