malkusch\lock\mutex\MutexTest::provideMutexFactories PHP Метод

provideMutexFactories() публичный Метод

Provides Mutex factories.
public provideMutexFactories ( ) : callable[][]
Результат callable[][] The mutex factories.
    public function provideMutexFactories()
    {
        $cases = ["NoMutex" => [function () {
            return new NoMutex();
        }], "TransactionalMutex" => [function () {
            $pdo = new \PDO("sqlite::memory:");
            $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            return new TransactionalMutex($pdo, self::TIMEOUT);
        }], "FlockMutex" => [function () {
            vfsStream::setup("test");
            return new FlockMutex(fopen(vfsStream::url("test/lock"), "w"));
        }], "SemaphoreMutex" => [function () {
            return new SemaphoreMutex(sem_get(ftok(__FILE__, "a")));
        }], "SpinlockMutex" => [function () {
            $mock = $this->getMockForAbstractClass(SpinlockMutex::class, ["test"]);
            $mock->expects($this->any())->method("acquire")->willReturn(true);
            $mock->expects($this->any())->method("release")->willReturn(true);
            return $mock;
        }], "LockMutex" => [function () {
            $mock = $this->getMockForAbstractClass(LockMutex::class);
            $mock->expects($this->any())->method("lock")->willReturn(true);
            $mock->expects($this->any())->method("unlock")->willReturn(true);
            return $mock;
        }]];
        if (getenv("MEMCACHE_HOST")) {
            $cases["MemcachedMutex"] = [function () {
                $memcache = new Memcached();
                $memcache->addServer(getenv("MEMCACHE_HOST"), 11211);
                return new MemcachedMutex("test", $memcache, self::TIMEOUT);
            }];
        }
        if (getenv("REDIS_URIS")) {
            $uris = explode(",", getenv("REDIS_URIS"));
            $cases["PredisMutex"] = [function () use($uris) {
                $clients = array_map(function ($uri) {
                    return new Client($uri);
                }, $uris);
                return new PredisMutex($clients, "test", self::TIMEOUT);
            }];
            $cases["PHPRedisMutex"] = [function () use($uris) {
                $apis = array_map(function ($uri) {
                    $redis = new Redis();
                    $uri = parse_url($uri);
                    if (!empty($uri["port"])) {
                        $redis->connect($uri["host"], $uri["port"]);
                    } else {
                        $redis->connect($uri["host"]);
                    }
                    return $redis;
                }, $uris);
                return new PHPRedisMutex($apis, "test", self::TIMEOUT);
            }];
        }
        return $cases;
    }