toBe($name); expect(cacti_error_plugin($directory . '/vendor/plugins/thold/Foo.php'))->toBe($name); expect(cacti_error_plugin($outside . '/plugins/thold/Foo.php'))->toBe(''); expect(cacti_error_plugin(CACTI_PATH_PLUGINS . '/../lib/functions.php'))->toBe(''); expect(cacti_error_plugin($directory . '/missing.php'))->toBe(''); expect(cacti_error_plugin(CACTI_PATH_PLUGINS . '/index.php'))->toBe(''); // A file reached through a plugin symlink still lies outside the resolved // plugin root and must not cause a same-named Cacti plugin to be disabled. symlink($outside . '/plugins/thold', $directory . '/external'); expect(cacti_error_plugin($directory . '/external/Foo.php'))->toBe(''); unlink($directory . '/external'); } finally { unlink($directory . '/setup.php'); unlink($directory . '/vendor/plugins/thold/Foo.php'); unlink($outside . '/plugins/thold/Foo.php'); rmdir($directory . '/vendor/plugins/thold'); rmdir($directory . '/vendor/plugins'); rmdir($directory . '/vendor'); rmdir($directory); rmdir($outside . '/plugins/thold'); rmdir($outside . '/plugins'); rmdir($outside); } });