From 2293ff6206b114be1bddbc789b843aa49b338ae7 Mon Sep 17 00:00:00 2001 From: Philipp Date: Sun, 8 Jan 2023 02:28:27 +0100 Subject: [PATCH] Add test for Addon failures --- src/Core/Config/Util/ConfigFileManager.php | 4 ++- src/Core/Config/ValueObject/Cache.php | 2 +- tests/src/Core/Config/Cache/CacheTest.php | 39 +++++++++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/src/Core/Config/Util/ConfigFileManager.php b/src/Core/Config/Util/ConfigFileManager.php index fff240bb3..011dbf0e4 100644 --- a/src/Core/Config/Util/ConfigFileManager.php +++ b/src/Core/Config/Util/ConfigFileManager.php @@ -194,11 +194,13 @@ class ConfigFileManager try { if (flock($configStream, LOCK_SH)) { + clearstatcache(true, $filename); + if (($filesize = filesize($filename)) === 0) { return; } - $content = fread($configStream, filesize($filename)); + $content = fread($configStream, $filesize); if (!$content) { throw new ConfigFileException(sprintf('Couldn\'t read file %s', $filename)); } diff --git a/src/Core/Config/ValueObject/Cache.php b/src/Core/Config/ValueObject/Cache.php index 208251164..7492d2873 100644 --- a/src/Core/Config/ValueObject/Cache.php +++ b/src/Core/Config/ValueObject/Cache.php @@ -283,7 +283,7 @@ class Cache $keys = array_keys($config[$category]); foreach ($keys as $key) { - if (!isset($this->config[$category][$key])) { + if (!key_exists($key, $this->config[$category] ?? [])) { $return[$category][$key] = $config[$category][$key]; } } diff --git a/tests/src/Core/Config/Cache/CacheTest.php b/tests/src/Core/Config/Cache/CacheTest.php index dc9b62dc0..e14b7998c 100644 --- a/tests/src/Core/Config/Cache/CacheTest.php +++ b/tests/src/Core/Config/Cache/CacheTest.php @@ -40,6 +40,7 @@ class CacheTest extends MockedTest 'int' => 235, 'dec' => 2.456, 'array' => ['1', 2, '3', true, false], + 'null' => null, ], 'config' => [ 'a' => 'value', @@ -503,6 +504,24 @@ class CacheTest extends MockedTest ], ], ], + /** @see https://github.com/friendica/friendica/issues/12486#issuecomment-1374609349 */ + 'test_with_null' => [ + 'data' => [ + 'test_with_null' => null, + 'config' => [ + 'register_policy' => 2, + 'register_text' => '', + 'sitename' => 'Friendica Social Network23', + 'hostname' => 'friendica.local', + 'private_addons' => false, + ], + 'system' => [ + 'dbclean_expire_conversation' => 90, + ], + ], + 'cat' => 'test_with_null', + 'assertion' => null, + ], ]; } @@ -511,10 +530,28 @@ class CacheTest extends MockedTest * * @dataProvider dataTestCat */ - public function testGetCategory(array $data, string $category, array $assertion) + public function testGetCategory($data, string $category, $assertion) { $cache = new Cache($data); self::assertEquals($assertion, $cache->get($category)); } + + /** + * Test that the cache can get merged with different categories + * + * @dataProvider dataTestCat + */ + public function testCatMerge($data, string $category) + { + $cache = new Cache($data); + + $newCache = $cache->merge(new Cache([ + $category => [ + 'new_key' => 'new_value', + ], + ])); + + self::assertEquals('new_value', $newCache->get($category, 'new_key')); + } }