Jyxo\Beholder\TestCase\Redis::run PHP Method

run() public method

Performs the test.
public run ( ) : Result
return Jyxo\Beholder\Result
    public function run() : \Jyxo\Beholder\Result
    {
        // The redis extension or Predis library is required
        if (!extension_loaded('redis') && !class_exists(\Predis\Client::class)) {
            return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::NOT_APPLICABLE, 'Extension redis or Predis library required');
        }
        $random = md5(uniqid((string) time(), true));
        $key = 'beholder-' . $random;
        $value = $random;
        // Status label
        $description = (false !== filter_var($this->host, FILTER_VALIDATE_IP) ? gethostbyaddr($this->host) : $this->host) . ':' . $this->port . '?database=' . $this->database;
        // Connection
        if (extension_loaded('redis')) {
            $redis = new \Redis();
            if (false === $redis->connect($this->host, $this->port, 2)) {
                return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Connection error %s', $description));
            }
        } else {
            $redis = new \Predis\Client(['host' => $this->host, 'port' => $this->port]);
            if (false === $redis->connect()) {
                return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Connection error %s', $description));
            }
        }
        // Select database
        if (false === $redis->select($this->database)) {
            return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Database error %s', $description));
        }
        // Saving
        if (false === $redis->set($key, $value)) {
            if ($redis instanceof \Redis) {
                $redis->close();
            } else {
                $redis->quit();
            }
            return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Write error %s', $description));
        }
        // Check
        $check = $redis->get($key);
        if (false === $check || $check !== $value) {
            if ($redis instanceof \Redis) {
                $redis->close();
            } else {
                $redis->quit();
            }
            return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Read error %s', $description));
        }
        // Deleting
        if (false === $redis->del($key)) {
            if ($redis instanceof \Redis) {
                $redis->close();
            } else {
                $redis->quit();
            }
            return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::FAILURE, sprintf('Delete error %s', $description));
        }
        // Disconnect
        if ($redis instanceof \Redis) {
            $redis->close();
        } else {
            $redis->quit();
        }
        // OK
        return new \Jyxo\Beholder\Result(\Jyxo\Beholder\Result::SUCCESS, $description);
    }