public function testPubsub() { $timeout = 2; $time = time(); $this->credis->setReadTimeout($timeout); try { $testCase = $this; $this->credis->pSubscribe(array('foobar', 'test*'), function ($credis, $pattern, $channel, $message) use($testCase, &$time) { $time = time(); // Reset timeout // Test using: redis-cli publish foobar blah $testCase->assertEquals('blah', $message); }); $this->fail('pSubscribe should not return.'); } catch (CredisException $e) { $this->assertEquals($timeout, time() - $time); if ($this->useStandalone) { // phpredis does not distinguish between timed out and disconnected $this->assertEquals($e->getCode(), CredisException::CODE_TIMED_OUT); } else { $this->assertEquals($e->getCode(), CredisException::CODE_DISCONNECTED); } } // Perform a new subscription. Client should have either unsubscribed or disconnected $timeout = 2; $time = time(); $this->credis->setReadTimeout($timeout); try { $testCase = $this; $this->credis->subscribe('foobar', function ($credis, $channel, $message) use($testCase, &$time) { $time = time(); // Reset timeout // Test using: redis-cli publish foobar blah $testCase->assertEquals('blah', $message); }); $this->fail('subscribe should not return.'); } catch (CredisException $e) { $this->assertEquals($timeout, time() - $time); if ($this->useStandalone) { // phpredis does not distinguish between timed out and disconnected $this->assertEquals($e->getCode(), CredisException::CODE_TIMED_OUT); } else { $this->assertEquals($e->getCode(), CredisException::CODE_DISCONNECTED); } } }