Restoring the error handler within the error handler causes unexpected results

See http://php.net/manual/en/function.restore-error-handler.php#120879
for more information.

Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
Joas Schilling 2017-04-20 12:23:34 +02:00
parent 38c901fadf
commit 24789ba0f4
No known key found for this signature in database
GPG Key ID: E166FD8976B3BAC8
1 changed files with 10 additions and 3 deletions

View File

@ -17,15 +17,22 @@ class RedisTest extends Cache {
self::markTestSkipped('The redis extension is not available.');
}
$errorOccurred = false;
set_error_handler(
function($errno, $errstr) {
restore_error_handler();
self::markTestSkipped($errstr);
throw new \RuntimeException($errstr, 123456789);
},
E_WARNING
);
$instance = new \OC\Memcache\Redis(self::getUniqueID());
try {
$instance = new \OC\Memcache\Redis(self::getUniqueID());
} catch (\RuntimeException $e) {
$errorOccurred = $e->getCode() === 123456789 ? $e->getMessage() : false;
}
restore_error_handler();
if ($errorOccurred !== false) {
self::markTestSkipped($errorOccurred);
}
if ($instance->set(self::getUniqueID(), self::getUniqueID()) === false) {
self::markTestSkipped('redis server seems to be down.');