diff --git a/library/Icinga/Application/ApplicationBootstrap.php b/library/Icinga/Application/ApplicationBootstrap.php index 02a939c5c..02b9e13cf 100755 --- a/library/Icinga/Application/ApplicationBootstrap.php +++ b/library/Icinga/Application/ApplicationBootstrap.php @@ -36,9 +36,9 @@ use \Icinga\Application\Modules\Manager as ModuleManager; use \Icinga\Application\Platform; use \Icinga\Application\Config; use \Icinga\Exception\ProgrammingError; -use \Icinga\Application\DbAdapterFactory; use \Icinga\Exception\ConfigurationError; use \Icinga\Util\DateTimeFactory; + use Icinga\Data\ResourceFactory; /** @@ -393,7 +393,6 @@ abstract class ApplicationBootstrap protected function setupResourceFactory() { $config = Config::app('resources'); - DbAdapterFactory::setConfig($config); ResourceFactory::setConfig($config); return $this; } diff --git a/library/Icinga/Application/DbAdapterFactory.php b/library/Icinga/Application/DbAdapterFactory.php deleted file mode 100644 index 0109016f7..000000000 --- a/library/Icinga/Application/DbAdapterFactory.php +++ /dev/null @@ -1,300 +0,0 @@ - - * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 - * @author Icinga Development Team - * - */ -// {{{ICINGA_LICENSE_HEADER}}} - -namespace Icinga\Application; - -use \PDO; -use \Zend_Config; -use \Zend_Db; -use \Zend_Db_Adapter_Abstract; -use \Icinga\Application\Logger; -use \Icinga\Util\ConfigAwareFactory; -use \Icinga\Exception\ConfigurationError; -use \Icinga\Exception\ProgrammingError; - -/** - * Create resources using short identifiers referring to configuration entries - */ -class DbAdapterFactory implements ConfigAwareFactory -{ - /** - * Resource definitions - * - * @var Zend_Config - */ - private static $resources; - - /** - * The factory class used to create instances of Zend_Db_Adapter - * - * @var String - */ - private static $factoryClass = 'Zend_Db'; - - /** - * Resource cache to allow multiple use - * - * @var array - */ - private static $resourceCache = array(); - - /** - * Array of PDO driver options - * - * @see http://www.php.net/manual/en/pdo.constants.php - * @var array - */ - private static $defaultPdoDriverOptions = array( - PDO::ATTR_TIMEOUT => 2, - PDO::ATTR_CASE => PDO::CASE_LOWER - ); - - /** - * Array of Zend_Db adapter options - * - * @see http://framework.zend.com/manual/1.12/en/zend.db.html - * @var array - */ - private static $defaultZendDbAdapterOptions = array( - Zend_Db::AUTO_QUOTE_IDENTIFIERS => false, - Zend_Db::CASE_FOLDING => Zend_Db::CASE_LOWER, - // Zend_Db::FETCH_MODE => Zend_Db::FETCH_OBJ - 'fetchMode' => Zend_Db::FETCH_OBJ - ); - - /** - * Set the configuration that stores the available resources - * - * @param mixed $config The configuration containing the resources - * - * @param array $options Additional options that affect the factories behaviour: - * * factory : Set the factory class that creates instances - * of Zend_Db_Adapter for the different database types - * (used for testing) - */ - public static function setConfig($config, array $options = null) - { - if (is_array($config)) { - $config = new Zend_Config($config); - } - self::$resources = $config; - if (isset($options['factory'])) { - self::$factoryClass = $options['factory']; - } else { - self::$factoryClass = 'Zend_Db'; - } - } - - /** - * Reset the factory configuration back to the default state - */ - public static function resetConfig() - { - self::$resources = null; - self::$factoryClass = 'Zend_Db'; - } - - /** - * Get a list of all resources available to this factory - * - * @return array An array containing all resources compatible to this factory - */ - public static function getResources() - { - $resources = self::$resources->toArray(); - foreach ($resources as $identifier => $resource) { - if ($resource['type'] !== 'db') { - unset($resources[$identifier]); - } - } - return $resources; - } - - /** - * Return if a resource with the given identifier exists - * - * @param $identifier The name of the resource - * - * @return boolean If the resource exists and is compatible - */ - public static function resourceExists($identifier) - { - return isset(self::$resources->{$identifier}) - && (self::$resources->{$identifier}->type === 'db'); - } - - /** - * Get the resource with the given $identifier - * - * @param string $identifier The name of the resource - * - * @return Zend_Db_Adapter_Abstract - * @throws ConfigurationError - * @throws ProgrammingError - */ - public static function getDbAdapter($identifier) - { - if (!isset(self::$resources)) { - $msg = 'Creation of resource ' . $identifier . ' not possible, because there is no configuration present.' - . ' Make shure this factory class was initialised correctly during the application bootstrap.'; - Logger::error($msg); - throw new ProgrammingError($msg); - } - if (!isset(self::$resources->{$identifier})) { - $msg = 'Creation of resource "' - . $identifier - . '" not possible, because there is no matching resource present in the configuration '; - Logger::error($msg); - throw new ConfigurationError($msg); - } - if (array_key_exists($identifier, self::$resourceCache)) { - return self::$resourceCache[$identifier]; - } else { - $res = self::createDbAdapter(self::$resources->{$identifier}); - self::$resourceCache[$identifier] = $res; - return $res; - } - } - - /** - * Create a db adapter directly from a configuration instead of a resource identifier - * - * @param Zend_Config $config The resource configuration that will be used. - * - * @return Zend_Db_Adapter_Abstract The created DbAdapter - * @throws ProgrammingError - */ - public static function createDbAdapterFromConfig(Zend_Config $config) - { - return self::createDbAdapter($config); - } - - /** - * Create the Db_Adapter for the given configuration section - * - * @param Zend_Config $config The configuration section containing the db information - * - * @return Zend_Db_Adapter_Abstract The created Zend_Db_Adapter - * @throws ConfigurationError When the specified db type is invalid - */ - public static function createDbAdapter(Zend_Config $config) - { - if ($config->type !== 'db') { - $msg = 'Resource type must be "db" but is "' . $config->type . '"'; - Logger::error($msg); - throw new ConfigurationError($msg); - } - $options = array( - 'dbname' => $config->dbname, - 'host' => $config->host, - 'username' => $config->username, - 'password' => $config->password, - 'options' => self::$defaultZendDbAdapterOptions, - 'driver_options' => self::$defaultPdoDriverOptions - ); - switch ($config->db) { - case 'mysql': - $options['port'] = $config->get('port', 3306); - return self::callFactory('Pdo_Mysql', $options); - case 'pgsql': - $options['port'] = $config->get('port', 5432); - return self::callFactory('Pdo_Pgsql', $options); - default: - if (!$config->db) { - $msg = 'Database type is missing (e.g. db=mysql).'; - } else { - $msg = 'Unsupported db type ' . $config->db . '.'; - } - Logger::error($msg); - throw new ConfigurationError($msg); - } - } - - /** - * Call the currently set factory class - * - * @param string $adapter The name of the used db adapter - * @param mixed $options An array or Zend_Config object with adapter - * parameters - * - * @return Zend_Db_Adapter_Abstract The created adapter - */ - private static function callFactory($adapter, $options) - { - $factory = self::$factoryClass; - $optionModifierCallback = __CLASS__ . '::get' . ucfirst(str_replace('_', '', $adapter)) . 'Options'; - if (is_callable($optionModifierCallback)) { - $options = call_user_func($optionModifierCallback, $options); - } - return $factory::factory($adapter, $options); - } - - /** - * Get modified attributes for driver PDO_Mysql - * - * @param array $options - * - * @return array - */ - private static function getPdoMysqlOptions(array $options) - { - /* - * Set MySQL server SQL modes to behave as closely as possible to Oracle and PostgreSQL. Note that the - * ONLY_FULL_GROUP_BY mode is left on purpose because MySQL requires you to specify all non-aggregate columns - * in the group by list even if the query is grouped by the master table's primary key which is valid - * ANSI SQL though. Further in that case the query plan would suffer if you add more columns to the group by - * list. - */ - $options['driver_options'][PDO::MYSQL_ATTR_INIT_COMMAND] = - 'SET SESSION SQL_MODE=\'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,' - . 'NO_AUTO_CREATE_USER,ANSI_QUOTES,PIPES_AS_CONCAT,NO_ENGINE_SUBSTITUTION\';'; - - if (!isset($options['port'])) { - $options['port'] = 3306; - } - - return $options; - } - - /** - * Get modified attributes for driver PDO_PGSQL - * - * @param array $options - * - * @return array - */ - private static function getPdoPgsqlOptions(array $options) - { - if (!isset($options['port'])) { - $options['port'] = 5432; - } - - return $options; - } -} diff --git a/library/Icinga/Authentication/Backend/DbUserBackend.php b/library/Icinga/Authentication/Backend/DbUserBackend.php index 16668a8aa..8d8e79857 100644 --- a/library/Icinga/Authentication/Backend/DbUserBackend.php +++ b/library/Icinga/Authentication/Backend/DbUserBackend.php @@ -34,13 +34,14 @@ use \stdClass; use \Zend_Config; use \Zend_Db; use \Zend_Db_Adapter_Abstract; -use \Icinga\Application\DbAdapterFactory; -use \Icinga\Exception\ProgrammingError; +use \Icinga\Data\ResourceFactory; +use \Icinga\Data\Db\Connection as DbConnection; use \Icinga\User; use \Icinga\Authentication\UserBackend; use \Icinga\Authentication\Credential; use \Icinga\Authentication; use \Icinga\Application\Logger; +use \Icinga\Exception\ProgrammingError; use \Icinga\Exception\ConfigurationError; /** @@ -103,22 +104,22 @@ class DbUserBackend implements UserBackend private $name; /** - * Create a DbUserBackend + * Create a new DbUserBackend * - * @param Zend_Config $config The database that provides the authentication data - * @throws ConfigurationError + * @param DbConnection $resource The db connection to use for the authentication. + * @param Zend_Config $config The configuration for this authentication backend. + * + * @throws Exception When connection to the resource is not possible. */ - public function __construct(Zend_Config $config) + public function __construct(DbConnection $resource = null, Zend_Config $config) { $this->name = $config->name; - if ($config->resource instanceof Zend_Db_Adapter_Abstract) { $this->db = $config->resource; } else { - $this->db = DbAdapterFactory::getDbAdapter($config->resource); + $this->db = $resource->getConnection(); } - - // Throw any errors for Authentication/Manager + // will throw an exception when connecting is not possible $this->db->getConnection(); } diff --git a/library/Icinga/Authentication/Backend/LdapUserBackend.php b/library/Icinga/Authentication/Backend/LdapUserBackend.php index de7e84d03..b1bec1a89 100644 --- a/library/Icinga/Authentication/Backend/LdapUserBackend.php +++ b/library/Icinga/Authentication/Backend/LdapUserBackend.php @@ -35,7 +35,7 @@ use \Icinga\User; use \Icinga\Authentication\UserBackend; use \Icinga\Authentication\Credential; use \Icinga\Protocol\Ldap; -use \Icinga\Protocol\Ldap\Connection; +use \Icinga\Protocol\Ldap\Connection as LdapConnection; use \Icinga\Application\Config as IcingaConfig; /** @@ -67,13 +67,19 @@ class LdapUserBackend implements UserBackend /** * Create new Ldap User backend * - * @param Zend_Config $config Configuration to create instance + * @param Zend_Config $connection Connection to use + * @param Zend_Config $config Configuration for authentication + * + * @throws Exception When connection to the resource is not possible. */ - public function __construct(Zend_Config $config) + public function __construct(LdapConnection $connection, Zend_Config $config) { - $this->connection = new Connection($config); + $this->connection = $connection; $this->config = $config; $this->name = $config->name; + + // will throw an exception, when the connection is not possible. + $connection->connect(); } /** @@ -170,6 +176,5 @@ class LdapUserBackend implements UserBackend ) ) ); - } } diff --git a/library/Icinga/Authentication/Manager.php b/library/Icinga/Authentication/Manager.php index dcd65c804..067d8fdc7 100644 --- a/library/Icinga/Authentication/Manager.php +++ b/library/Icinga/Authentication/Manager.php @@ -30,13 +30,19 @@ namespace Icinga\Authentication; use \Exception; +use Icinga\Exception\ConfigurationError; use \Zend_Config; +use \Icinga\User; +use \Icinga\Data\ResourceFactory; +use \Icinga\Data\Db\Connection as DbConnection; use \Icinga\Application\Logger; use \Icinga\Application\Config as IcingaConfig; -use \Icinga\Application\DbAdapterFactory; +use \Icinga\Protocol\Ldap\Connection as LdapConnection; +use \Icinga\Authentication\Backend\DbUserBackend; +use \Icinga\Authentication\Backend\LdapUserBackend; +use \Icinga\Exception\ProgrammingError; use \Icinga\Exception\ConfigurationError as ConfigError; -use \Icinga\User; -use \Icinga\Exception\ConfigurationError; + /** * The authentication manager allows to identify users and @@ -56,20 +62,6 @@ use \Icinga\Exception\ConfigurationError; **/ class Manager { - /** - * Backend type user - * - * @var string - */ - const BACKEND_TYPE_USER = 'user'; - - /** - * Backend type group - * - * @var string - */ - const BACKEND_TYPE_GROUP = 'group'; - /** * Singleton instance * @@ -172,11 +164,11 @@ class Manager if ($backendConfig->name === null) { $backendConfig->name = $name; } - $backend = $this->createBackend($backendConfig); if ($backend instanceof UserBackend) { $this->userBackends[$backend->getName()] = $backend; + } elseif ($backend instanceof GroupBackend) { $this->groupBackends[$backend->getName()] = $backend; } @@ -192,38 +184,39 @@ class Manager */ private function createBackend(Zend_Config $backendConfig) { - $type = ucwords(strtolower($backendConfig->backend)); $target = ucwords(strtolower($backendConfig->target)); $name = $backendConfig->name; - if (!$type && !$backendConfig->class) { - Logger::warn('AuthManager: Backend "%s" has no backend type configuration. (e.g. backend=ldap)', $name); - return null; - } - - if (!$target && !$backendConfig->class) { + // TODO: implement support for groups (#4624) and remove OR-Clause + if ((!$target || strtolower($target) != "user") && !$backendConfig->class) { Logger::warn('AuthManager: Backend "%s" has no target configuration. (e.g. target=user|group)', $name); return null; } - try { - // Allow vendor and test classes in configuration - if ($backendConfig->class) { - $class = $backendConfig->class; - } else { - $class = '\\Icinga\\Authentication\\Backend\\' . $type . $target . 'Backend'; - } + if (isset($backendConfig->class)) { + // use custom backend class, this is only useful for testing + if (!class_exists($backendConfig->class)) { + Logger::error('AuthManager: Class not found (%s) for backend %s', $backendConfig->class, $name); + return null; + } - if (!class_exists($class)) { - Logger::error('AuthManager: Class not found (%s) for backend %s', $class, $name); - return null; - } else { + $class = $backendConfig->class; return new $class($backendConfig); + + } else { + $resource = ResourceFactory::createResource(ResourceFactory::getResourceConfig($backendConfig->resource)); + if ($resource instanceof DbConnection) { + return new DbUserBackend($resource, $backendConfig); + } else if ($resource instanceof LdapConnection) { + return new LdapUserBackend($resource, $backendConfig); + } else { + Logger::warn('AuthManager: Resource class ' . get_class($resource) . ' cannot be used as backend.'); + } } } catch (\Exception $e) { Logger::warn('AuthManager: Not able to create backend. Exception was thrown: %s', $e->getMessage()); - return null; } + return null; } /** @@ -303,7 +296,6 @@ class Manager ); $authErrors++; - continue; } diff --git a/library/Icinga/Authentication/UserBackend.php b/library/Icinga/Authentication/UserBackend.php index 887210c85..114f3eddb 100644 --- a/library/Icinga/Authentication/UserBackend.php +++ b/library/Icinga/Authentication/UserBackend.php @@ -38,13 +38,6 @@ use Icinga\Authentication\Credential; */ interface UserBackend { - /** - * Create a new object - * - * @param Zend_Config $config Object to configure instance - */ - public function __construct(Zend_Config $config); - /** * Test if the username exists * diff --git a/library/Icinga/Data/ResourceFactory.php b/library/Icinga/Data/ResourceFactory.php index 0ab4afe08..cf1fffe57 100644 --- a/library/Icinga/Data/ResourceFactory.php +++ b/library/Icinga/Data/ResourceFactory.php @@ -29,12 +29,14 @@ namespace Icinga\Data; +use Icinga\Exception\ProgrammingError; use Zend_Config; use Icinga\Util\ConfigAwareFactory; use Icinga\Exception\ConfigurationError; use Icinga\Data\Db\Connection as DbConnection; use Icinga\Protocol\Livestatus\Connection as LivestatusConnection; use Icinga\Protocol\Statusdat\Reader as StatusdatReader; +use Icinga\Protocol\Ldap\Connection as LdapConnection; class ResourceFactory implements ConfigAwareFactory { @@ -50,6 +52,11 @@ class ResourceFactory implements ConfigAwareFactory public static function getResourceConfig($resourceName) { + if (!isset(self::$resources)) { + throw new ProgrammingError( + "The ResourceFactory must be initialised by setting a config, before it can be used" + ); + } if (($resourceConfig = self::$resources->get($resourceName)) === null) { throw new ConfigurationError('Resource "' . $resourceName . '" couldn\'t be retrieved'); } @@ -62,6 +69,9 @@ class ResourceFactory implements ConfigAwareFactory case 'db': $resource = new DbConnection($config); break; + case 'ldap': + $resource = new LdapConnection($config); + break; case 'statusdat': $resource = new StatusdatReader($config); break; diff --git a/library/Icinga/Test/BaseTestCase.php b/library/Icinga/Test/BaseTestCase.php index a2a6dff3e..f83104241 100644 --- a/library/Icinga/Test/BaseTestCase.php +++ b/library/Icinga/Test/BaseTestCase.php @@ -60,6 +60,7 @@ namespace Icinga\Test { use Zend_Db_Adapter_Pdo_Pgsql; use Zend_Db_Adapter_Pdo_Oci; use Icinga\Application\DbAdapterFactory; + use Icinga\Data\ResourceFactory; use Icinga\User\Preferences; use Icinga\Web\Form; // @codingStandardsIgnoreEnd @@ -209,7 +210,8 @@ namespace Icinga\Test { $this->requireDbLibraries(); try { - $adapter = DbAdapterFactory::createDbAdapter($this->createDbConfigFor($name)); + //$adapter = DbAdapterFactory::createDbAdapter($this->createDbConfigFor($name)); + $adapter = ResourceFactory::createResource($this->createDbConfigFor($name))->getConnection(); } catch (Exception $e) { $adapter = $e->getMessage(); } @@ -385,7 +387,9 @@ namespace Icinga\Test { require_once self::$libDir . '/Exception/ConfigurationError.php'; require_once self::$libDir . '/Util/ConfigAwareFactory.php'; - require_once self::$libDir . '/Application/DbAdapterFactory.php'; + require_once self::$libDir . '/Data/DatasourceInterface.php'; + require_once self::$libDir . '/Data/ResourceFactory.php'; + require_once self::$libDir . '/Data/Db/Connection.php'; require_once self::$libDir . '/Application/Logger.php'; } } diff --git a/modules/monitoring/test/php/testlib/MonitoringControllerTest.php b/modules/monitoring/test/php/testlib/MonitoringControllerTest.php index 8a0c10ec5..9a2dd3258 100644 --- a/modules/monitoring/test/php/testlib/MonitoringControllerTest.php +++ b/modules/monitoring/test/php/testlib/MonitoringControllerTest.php @@ -176,7 +176,6 @@ abstract class MonitoringControllerTest extends Zend_Test_PHPUnit_ControllerTest */ private function requireIDOQueries() { - require_once('Application/DbAdapterFactory.php'); require_once('library/Monitoring/Backend/Ido/Query/IdoQuery.php'); $this->requireFolder('library/Monitoring/Backend/Ido/Query'); } diff --git a/test/php/library/Icinga/Application/DbAdapterFactoryTest.php b/test/php/library/Icinga/Application/DbAdapterFactoryTest.php deleted file mode 100644 index 1124710f5..000000000 --- a/test/php/library/Icinga/Application/DbAdapterFactoryTest.php +++ /dev/null @@ -1,216 +0,0 @@ - - * @license http://www.gnu.org/licenses/gpl-2.0.txt GPL, version 2 - * @author Icinga Development Team - * - */ -// {{{ICINGA_LICENSE_HEADER}}} - -namespace Tests\Icinga\Application; - -require_once 'Zend/Db.php'; -require_once 'Zend/Db/Adapter/Pdo/Mysql.php'; -require_once 'Zend/Config.php'; -require_once 'Zend/Log.php'; -require_once 'Zend/Config.php'; -require_once realpath(__DIR__. '/../../../library/Icinga/Application/ZendDbMock.php'); -require_once realpath(__DIR__. '/../../../../../library/Icinga/Application/Logger.php'); -require_once realpath(__DIR__. '/../../../../../library/Icinga/Exception/ConfigurationError.php'); -require_once realpath(__DIR__. '/../../../../../library/Icinga/Exception/ProgrammingError.php'); -require_once realpath(__DIR__. '/../../../../../library/Icinga/Util/ConfigAwareFactory.php'); -require_once realpath(__DIR__. '/../../../../../library/Icinga/Application/DbAdapterFactory.php'); - -use \PDO; -use \Zend_Db; -use \Tests\Icinga\Application\ZendDbMock; -use \Icinga\Application\DbAdapterFactory; - -/* - * Unit test for the class DbAdapterFactory - */ -class DbAdapterFactoryTest extends \PHPUnit_Framework_TestCase -{ - - /** - * The resources used for this test - */ - private $resources; - - /** - * Set up the test fixture - */ - public function setUp() - { - $this->resources = array( - /* - * PostgreSQL database - */ - 'resource1' => array( - 'type' => 'db', - 'db' => 'pgsql', - 'dbname' => 'resource1', - 'host' => 'host1', - 'username' => 'username1', - 'password' => 'password1', - 'options' => array( - Zend_Db::AUTO_QUOTE_IDENTIFIERS => false, - Zend_Db::CASE_FOLDING => Zend_Db::CASE_LOWER, - Zend_Db::FETCH_MODE => Zend_Db::FETCH_OBJ - ), - 'driver_options' => array( - PDO::ATTR_TIMEOUT => 2, - PDO::ATTR_CASE => PDO::CASE_LOWER - ), - 'port' => 5432 - ), - /* - * MySQL database - */ - 'resource2' => array( - 'type' => 'db', - 'db' => 'mysql', - 'dbname' => 'resource2', - 'host' => 'host2', - 'username' => 'username2', - 'password' => 'password2', - 'options' => array( - Zend_Db::AUTO_QUOTE_IDENTIFIERS => false, - Zend_Db::CASE_FOLDING => Zend_Db::CASE_LOWER, - Zend_Db::FETCH_MODE => Zend_Db::FETCH_OBJ - ), - 'driver_options' => array( - PDO::ATTR_TIMEOUT => 2, - PDO::ATTR_CASE => PDO::CASE_LOWER, - PDO::MYSQL_ATTR_INIT_COMMAND => - 'SET SESSION SQL_MODE=\'STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,' - . 'ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,ANSI_QUOTES,PIPES_AS_CONCAT,' - . 'NO_ENGINE_SUBSTITUTION\';' - ), - 'port' => 3306 - ), - /* - * Unsupported database type - */ - 'resource3' => array( - 'type' => 'db', - 'db' => 'mssql', - 'dbname' => 'resource3', - 'host' => 'host3', - 'username' => 'username3', - 'password' => 'password3' - ), - /* - * Unsupported resource type - */ - 'resource4' => array( - 'type' => 'ldap', - ), - ); - DbAdapterFactory::setConfig( - $this->resources, - array( - 'factory' => '\Tests\Icinga\Application\ZendDbMock' - ) - ); - } - - public function testGetValidResource() - { - DbAdapterFactory::getDbAdapter('resource2'); - $this->assertEquals( - 'Pdo_Mysql', - ZendDbMock::getAdapter(), - 'The db adapter name must be Pdo_Mysql.' - ); - $this->assertEquals( - $this->getOptions($this->resources['resource2']), - ZendDbMock::getConfig(), - 'The options must match the original config file content' - ); - } - - public function testResourceExists() - { - $this->assertTrue( - DbAdapterFactory::resourceExists('resource2'), - 'resourceExists() called with an existing resource should return true' - ); - - $this->assertFalse( - DbAdapterFactory::resourceExists('not existing'), - 'resourceExists() called with an existing resource should return false' - ); - - $this->assertFalse( - DbAdapterFactory::resourceExists('resource4'), - 'resourceExists() called with an incompatible resource should return false' - ); - } - - public function testGetResources() - { - $withoutIncompatible = array_merge(array(), $this->resources); - unset($withoutIncompatible['resource4']); - $this->assertEquals( - $withoutIncompatible, - DbAdapterFactory::getResources(), - 'getResources should return an array of all existing resources that are compatible' - ); - } - - /** - * Test if an exception is thrown, when an invalid database is used. - * - * @expectedException Icinga\Exception\ConfigurationError - */ - public function testGetInvalidDatabase() - { - DbAdapterFactory::getDbAdapter('resource3'); - } - - /** - * Test if an exception is thrown, when an invalid type is used. - * - * @expectedException Icinga\Exception\ConfigurationError - */ - public function testGetInvalidType() - { - DbAdapterFactory::getDbAdapter('resource4'); - } - - /** - * Prepare the options object for assertions - * - * @param Zend_Config $config The configuration to prepare - * - * @return array The prepared options object - */ - private function getOptions($config) - { - $options = array_merge(array(), $config); - unset($options['type']); - unset($options['db']); - return $options; - } -} diff --git a/test/php/library/Icinga/Authentication/DbUserBackendTest.php b/test/php/library/Icinga/Authentication/DbUserBackendTest.php index a551b0346..22b4b9fe5 100644 --- a/test/php/library/Icinga/Authentication/DbUserBackendTest.php +++ b/test/php/library/Icinga/Authentication/DbUserBackendTest.php @@ -45,7 +45,6 @@ require_once BaseTestCase::$libDir . '/Exception/ProgrammingError.php'; require_once BaseTestCase::$libDir . '/Util/ConfigAwareFactory.php'; require_once BaseTestCase::$libDir . '/Authentication/UserBackend.php'; require_once BaseTestCase::$libDir . '/Protocol/Ldap/Exception.php'; -require_once BaseTestCase::$libDir . '/Application/DbAdapterFactory.php'; require_once BaseTestCase::$libDir . '/Application/Config.php'; require_once BaseTestCase::$libDir . '/Authentication/Credential.php'; require_once BaseTestCase::$libDir . '/Authentication/Backend/DbUserBackend.php'; @@ -132,7 +131,7 @@ class DbUserBackendTest extends BaseTestCase public function testCorrectUserLoginForPgsql($db) { $this->setupDbProvider($db); - $backend = new DbUserBackend($this->createDbBackendConfig($db)); + $backend = new DbUserBackend(null, $this->createDbBackendConfig($db)); $this->runBackendAuthentication($backend); $this->runBackendUsername($backend); } @@ -145,7 +144,7 @@ class DbUserBackendTest extends BaseTestCase public function testCorrectUserLoginForMySQL($db) { $this->setupDbProvider($db); - $backend = new DbUserBackend($this->createDbBackendConfig($db)); + $backend = new DbUserBackend(null, $this->createDbBackendConfig($db)); $this->runBackendAuthentication($backend); $this->runBackendUsername($backend); } @@ -282,7 +281,7 @@ class DbUserBackendTest extends BaseTestCase $this->setupDbProvider($db); $testName = 'test-name-123123'; - $backend = new DbUserBackend($this->createDbBackendConfig($db, $testName)); + $backend = new DbUserBackend(null, $this->createDbBackendConfig($db, $testName)); $this->assertSame($testName, $backend->getName()); } @@ -294,7 +293,7 @@ class DbUserBackendTest extends BaseTestCase { $this->setupDbProvider($db); $testName = 'test-name-123123'; - $backend = new DbUserBackend($this->createDbBackendConfig($db, $testName)); + $backend = new DbUserBackend(null, $this->createDbBackendConfig($db, $testName)); $this->assertGreaterThan(0, $backend->getUserCount()); } @@ -306,7 +305,7 @@ class DbUserBackendTest extends BaseTestCase { $this->setupDbProvider($db); $testName = 'test-name-123123'; - $backend = new DbUserBackend($this->createDbBackendConfig($db, $testName)); + $backend = new DbUserBackend(null, $this->createDbBackendConfig($db, $testName)); $this->assertGreaterThan(0, $backend->getUserCount()); } diff --git a/test/php/library/Icinga/Authentication/LdapUserBackendTest.php b/test/php/library/Icinga/Authentication/LdapUserBackendTest.php index 70b3ab3f9..0019b8749 100644 --- a/test/php/library/Icinga/Authentication/LdapUserBackendTest.php +++ b/test/php/library/Icinga/Authentication/LdapUserBackendTest.php @@ -48,6 +48,7 @@ require_once BaseTestCase::$libDir . '/Authentication/Backend/LdapUserBackend.ph use \Exception; use \Zend_Config; use Icinga\Authentication\Backend\LdapUserBackend; +use Icinga\Protocol\Ldap\Connection; /** * @@ -183,7 +184,8 @@ class LdapUserBackendTest extends BaseTestCase **/ public function testHasUsername() { - $backend = new LdapUserBackend($this->createBackendConfig()); + $config = $this->createBackendConfig(); + $backend = new LdapUserBackend(new Connection($config), $config); $this->assertTrue($backend->hasUsername(new Credential('jwoe'))); $this->assertTrue($backend->hasUsername(new Credential('rmiles'))); $this->assertFalse($backend->hasUsername(new Credential('DoesNotExist'))); @@ -194,7 +196,8 @@ class LdapUserBackendTest extends BaseTestCase */ public function testAuthenticate() { - $backend = new LdapUserBackend($this->createBackendConfig()); + $config = $this->createBackendConfig(); + $backend = new LdapUserBackend(new Connection($config), $config); $this->assertInstanceOf( '\Icinga\User', @@ -217,7 +220,8 @@ class LdapUserBackendTest extends BaseTestCase */ public function testAuthenticateUnknownUser() { - $backend = new LdapUserBackend($this->createBackendConfig()); + $config = $this->createBackendConfig(); + $backend = new LdapUserBackend(new Connection($config), $config); $this->assertFalse($backend->authenticate(new Credential('unknown123', 'passunknown123'))); } } diff --git a/test/php/library/Icinga/Authentication/ManagerTest.php b/test/php/library/Icinga/Authentication/ManagerTest.php index 90907bc63..73fc430d4 100644 --- a/test/php/library/Icinga/Authentication/ManagerTest.php +++ b/test/php/library/Icinga/Authentication/ManagerTest.php @@ -43,6 +43,7 @@ require_once BaseTestCase::$libDir . '/Application/Logger.php'; require_once BaseTestCase::$libDir . '/Authentication/Manager.php'; require_once BaseTestCase::$libDir . '/Authentication/Credential.php'; require_once BaseTestCase::$libDir . '/Exception/ConfigurationError.php'; +require_once BaseTestCase::$libDir . '/Exception/ProgrammingError.php'; require_once 'BackendMock.php'; require_once 'ErrorProneBackendMock.php'; require_once 'SessionMock.php';