]> source.dussan.org Git - nextcloud-server.git/commitdiff
Restoring the error handler within the error handler causes unexpected results
authorJoas Schilling <coding@schilljs.com>
Thu, 20 Apr 2017 10:23:34 +0000 (12:23 +0200)
committerJoas Schilling <coding@schilljs.com>
Thu, 20 Apr 2017 10:23:34 +0000 (12:23 +0200)
See http://php.net/manual/en/function.restore-error-handler.php#120879
for more information.

Signed-off-by: Joas Schilling <coding@schilljs.com>
tests/lib/Memcache/RedisTest.php

index 094954d4a1a04ec69f5b6eae2ca1741a6012a3a3..e707f30fb5bd48704915dca85c7185663d6b09e8 100644 (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.');