Merge branch 'master' of ssh://git.icinga.org/icinga2-web into feature/host-overview--4179

This commit is contained in:
Jannis Moßhammer 2013-07-12 16:02:00 +02:00
commit 820ed8f7a8
26 changed files with 314 additions and 238 deletions

4
Vagrantfile vendored
View File

@ -48,6 +48,8 @@ Vagrant::Config.run do |config|
# an identifier, the second is the path on the guest to mount the
# folder, and the third is the path on the host to the actual folder.
# # config.vm.share_folder "v-icinga2-web-pub", "/var/www/html/icinga2-web", "./pub"
config.vm.share_folder "v-test", "/vagrant/config", "./config", :owner => 'vagrant', :group => 'apache', :extra => 'dmode=775,fmode=775'
config.vm.customize ["setextradata", :id, "VBoxInternal2/SharedFoldersEnableSymlinksCreate/v-test", "1"]
# Enable provisioning with Puppet stand alone. Puppet manifests
# are contained in a directory path relative to this Vagrantfile.
@ -56,7 +58,7 @@ Vagrant::Config.run do |config|
config.vm.provision :puppet do |puppet|
puppet.module_path = ".vagrant-puppet/modules"
puppet.manifests_path = ".vagrant-puppet/manifests"
#puppet.options = "-v -d"
# # puppet.options = "-v -d"
end
# The npm module jquery won't install via puppet because of an mysterious error

View File

@ -4,21 +4,21 @@
/**
* Icinga 2 Web - Head for multiple monitoring frontends
* Copyright (C) 2013 Icinga Development Team
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @author Icinga Development Team <info@icinga.org>
*/
@ -58,16 +58,15 @@ class ModulesController extends ActionController
public function overviewAction()
{
$this->indexAction();
}
public function enableAction()
{
$this->manager->enableModule($this->_getParam('name'));
$this->manager->loadModule($this->_getParam('name'));
$this->getResponse()->setHeader('X-Icinga-Enable-Module', $this->_getParam('name'));
$this->replaceLayout = true;
$this->indexAction();
$this->getResponse()->setHeader('X-Icinga-Enable-Module', $this->_getParam('name'));
$this->redirectNow('index?_render=body');
}

View File

@ -3,7 +3,7 @@
$url = Zend_Controller_Front::getInstance()->getRequest()->getRequestUri();
$currentKey = isset($this->navkey) ? $this->navkey : $url;
$item = $this->navigation->listAll("menu");
$item = $this->navigation->keys("menu");
?>
<?php if ($this->auth()->isAuthenticated()): ?>
<ul class="nav nav-tabs icinga-navigation" >

View File

@ -2,8 +2,8 @@
[localdb]
type = ido
host = localhost
user = "icinga"
pass = "icinga"
user = "icinga-idoutils"
pass = "***"
db = "icinga"

24
doc/CONFIG.md Normal file
View File

@ -0,0 +1,24 @@
# Application and Module Configuration
The \Icinga\Application\Config class is a general purpose service to help you find, load and save
configuration data. It is used both by the Icinga 2 Web modules and the framework itself. With
INI files as source it enables you to store configuration in a familiar format. Icinga 2 Web
defines some configuration files for its own purposes. Please note that both modules and framework
keep their main configuration in the INI file called config.ini. Here's some example code:
<?php
use \Icinga\Application\Config as IcingaConfig;
// Retrieve the default timezone using 'Europe/Berlin' in case it is not set
IcingaConfig::app()->global->get('defaultTimezone', 'Europe/Berlin');
// If you don't pass a configuration name to IcingaConfig::app it tries to load values from the
// application's config.ini. For using other files you have to pass this parameter though.
// The following example loads a section from the application's authentication.ini:
IcingaConfig::app('authentication')->get('ldap-authentication');
// If you don't pass a configuration name to IcingaConfig::module it tries to load values from
// the module's config.ini. For using other files you have to pass this parameter though.
// The following example loads values from the example module's extra.ini:
IcingaConfig::module('example', 'extra')->logging->get('enabled', true);

View File

@ -44,7 +44,7 @@ abstract class ApplicationBootstrap
protected $loader;
protected $libdir;
protected $config;
protected $configFile;
protected $configDir;
protected $appdir;
protected $moduleManager;
protected $isCli = false;
@ -57,7 +57,7 @@ abstract class ApplicationBootstrap
*
* @return void
*/
protected function __construct($configFile = null)
protected function __construct($configDir)
{
$this->checkPrerequisites();
$this->libdir = realpath(dirname(dirname(dirname(__FILE__))));
@ -88,10 +88,7 @@ abstract class ApplicationBootstrap
)
);
if ($configFile === null) {
$configFile = dirname($this->libdir) . '/config/icinga.ini';
}
$this->configFile = $configFile;
$this->configDir = $configDir;
require_once dirname(__FILE__) . '/functions.php';
}
@ -100,7 +97,7 @@ abstract class ApplicationBootstrap
public function moduleManager()
{
if ($this->moduleManager === null) {
$this->moduleManager = new ModuleManager($this, $this->config->global->moduleFolder);
$this->moduleManager = new ModuleManager($this, $this->configDir . '/enabledModules');
}
return $this->moduleManager;
}
@ -155,10 +152,10 @@ abstract class ApplicationBootstrap
return $this->config;
}
public static function start($config = null)
public static function start($configDir)
{
$class = get_called_class();
$obj = new $class();
$obj = new $class($configDir);
$obj->bootstrap();
return $obj;
}
@ -217,11 +214,8 @@ abstract class ApplicationBootstrap
*/
protected function loadConfig()
{
// TODO: add an absolutely failsafe config loader
if (! @is_readable($this->configFile)) {
throw new \Exception('Cannot read config file: ' . $this->configFile);
}
$this->config = Config::getInstance($this->configFile);
Config::$configDir = $this->configDir;
$this->config = Config::app();
return $this;
}
@ -247,7 +241,7 @@ abstract class ApplicationBootstrap
*/
protected function configureErrorHandling()
{
if ($this->config->global->environment == 'development') {
if ($this->config->get('global', 'environment') == 'development') {
error_reporting(E_ALL | E_NOTICE);
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
@ -264,7 +258,7 @@ abstract class ApplicationBootstrap
protected function setTimezone()
{
date_default_timezone_set(
$this->config->{'global'}->get('timezone', 'UTC')
$this->config->global->get('timezone', 'UTC')
);
return $this;
}

View File

@ -1,79 +1,115 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Application;
use Icinga\Application\Modules\Module;
use Icinga\Protocol\Ldap\Exception;
use Zend_Config_Ini;
use Zend_Config;
/**
* Global registry of application and module configuration.
*/
class Config extends Zend_Config_Ini
{
protected $data;
protected static $instance;
protected $configDir;
/**
* Configuration directory where ALL (application and module) configuration is located
* @var string
*/
public static $configDir;
public function listAll($what)
/**
* The INI file this configuration has been loaded from
* @var string
*/
protected $configFile;
/**
* Application config instances per file
* @var array
*/
protected static $app = array();
/**
* Module config instances per file
* @var array
*/
protected static $modules = array();
/**
* Load configuration from the config file $filename
*
* @see Zend_Config_Ini::__construct
*
* @param string $filename
* @throws Exception
*/
public function __construct($filename)
{
if ($this->$what === null) {
if (!@is_readable($filename)) {
throw new Exception('Cannot read config file: ' . $filename);
};
$this->configFile = $filename;
$section = null;
$options = array(
'allowModifications' => true
);
parent::__construct($filename, $section, $options);
}
/**
* Retrieve a application config instance
*
* @param string $configname
* @return mixed
*/
public static function app($configname = 'config')
{
if (!isset(self::$app[$configname])) {
$filename = self::$configDir . '/' . $configname . '.ini';
self::$app[$configname] = new Config(realpath($filename));
}
return self::$app[$configname];
}
/**
* Retrieve a module config instance
*
* @param string $modulename
* @param string $configname
* @return Config
*/
public static function module($modulename, $configname = 'config')
{
if (!isset(self::$modules[$modulename])) {
self::$modules[$modulename] = array();
}
$moduleConfigs = self::$modules[$modulename];
if (!isset($moduleConfigs[$configname])) {
$filename = self::$configDir . '/modules/' . $modulename . '/' . $configname . '.ini';
if (file_exists($filename)) {
$moduleConfigs[$configname] = new Config(realpath($filename));
} else {
$moduleConfigs[$configname] = null;
}
}
return $moduleConfigs[$configname];
}
/**
* Retrieve names of accessible sections or properties
*
* @param $name
* @return array
*/
public function keys($name = null)
{
if ($name === null) {
return array_keys($this->toArray());
} elseif ($this->$name === null) {
return array();
} else {
return array_keys($this->$what->toArray());
return array_keys($this->$name->toArray());
}
}
public function getConfigDir()
{
return $this->configDir;
}
public function __construct($filename, $section = null, $options = false)
{
$options['allowModifications'] = true;
$this->configDir = dirname($filename);
return parent::__construct($filename, $section, $options);
}
public static function module($name, $file = null)
{
if ($file === null) {
$file = $name . '.ini'; // TODO: default should be module/config.ini
}
$filename = Module::get($name)->getConfigDir() . '/' . $file;
if (file_exists($filename)) {
$config = new Config($filename);
// Compat: $config->$module->$whatever
self::getInstance()->$name = $config;
return $config;
}
return null;
}
public function __get($key)
{
$res = parent::__get($key);
if ($res === null) {
$app = Icinga::app();
if ($app->hasModule($key)) {
$filename = $app->getModule($key)->getConfigDir() . "/$key.ini";
} else {
$filename = $this->configDir . '/' . $key . '.ini';
}
if (file_exists($filename)) {
$res = $this->$key = new Config($filename);
}
}
return $res;
}
public static function getInstance($configFile = null)
{
if (self::$instance === null) {
if ($configFile === null) {
$configFile = dirname(dirname(dirname(dirname(__FILE__))))
. '/config/icinga.ini';
}
self::$instance = new Config($configFile);
}
return self::$instance;
}
}

View File

@ -113,14 +113,16 @@ class Module
}
$this->registerLocales()
->registerRoutes();
// ->registerMenuEntries();
->registerRoutes()
->registerMenuEntries();
return $this;
}
protected function registerMenuEntries()
{
$cfg = $this->getConfig('menu.ini');
$cfg = $this->app
->getConfig()
->module($this->name, 'menu');
$view = $this->app->getView();
if ($cfg) {
$view->view->navigation = $cfg->merge($view->view->navigation);

View File

@ -181,7 +181,7 @@ class Web extends ApplicationBootstrap
$this->config->{'global'}->get('project', 'Icinga')
);
$view->view->headTitle()->setSeparator(' :: ');
$view->view->navigation = $this->config->menu;
$view->view->navigation = $this->config->app('menu');
$this->view = $view;
return $this;

View File

@ -3,21 +3,21 @@
/**
* Icinga 2 Web - Head for multiple monitoring frontends
* Copyright (C) 2013 Icinga Development Team
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @author Icinga Development Team <info@icinga.org>
*/
@ -33,7 +33,7 @@ use Icinga\Application\Config as IcingaConfig;
/**
* User authentication backend (@see Icinga\Authentication\UserBackend) for
* authentication of users via LDAP. The attributes and location of the
* authentication of users via LDAP. The attributes and location of the
* user is configurable via the application.ini
*
* See the UserBackend class (@see Icinga\Authentication\UserBackend) for
@ -45,9 +45,9 @@ class LdapUserBackend implements UserBackend
* @var Ldap\Connection
**/
protected $connection;
/**
* Creates a new Authentication backend using the
* Creates a new Authentication backend using the
* connection information provided in $config
*
* @param object $config The ldap connection information
@ -69,7 +69,7 @@ class LdapUserBackend implements UserBackend
/**
* Removes the '*' characted from $string
*
*
* @param String $string
*
* @return String
@ -81,19 +81,19 @@ class LdapUserBackend implements UserBackend
/**
* Tries to fetch the username given in $username from
* the ldap connection, using the configuration parameters
* the ldap connection, using the configuration parameters
* given in the Authentication configuration
*
* @param String $username The username to select
*
* @return object $result
* @return object $result
**/
protected function selectUsername($username)
{
return $this->connection->select()
->from(IcingaConfig::getInstance()->authentication->users->user_class,
array(IcingaConfig::getInstance()->authentication->users->user_name_attribute))
->where(IcingaConfig::getInstance()->authentication->users->user_name_attribute,
->from(IcingaConfig::app('authentication')->users->user_class,
array(IcingaConfig::app('authentication')->users->user_name_attribute))
->where(IcingaConfig::app('authentication')->users->user_name_attribute,
$this->stripAsterisks($username));
}

View File

@ -3,21 +3,21 @@
/**
* Icinga 2 Web - Head for multiple monitoring frontends
* Copyright (C) 2013 Icinga Development Team
*
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @author Icinga Development Team <info@icinga.org>
*/
@ -25,31 +25,31 @@
namespace Icinga\Authentication;
use Icinga\Application\Logger as Logger;
use Icinga\Application\Config as Config;
use Icinga\Application\Logger;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Exception\ConfigurationError as ConfigError;
/**
* The authentication manager allows to identify users and
* to persist authentication information in a session.
*
*
* Direct instanciation is not permitted, the Authencation manager
* must be created using the getInstance method. Subsequent getInstance
* must be created using the getInstance method. Subsequent getInstance
* calls return the same object and ignore any additional configuration
*
* When creating the Authentication manager with standard PHP Sessions,
* you have to decide whether you want to modify the session on the first
* initialization and provide the 'writeSession' option if so, otherwise
* initialization and provide the 'writeSession' option if so, otherwise
* session changes won't be written to disk. This is done to prevent PHP
* from blockung concurrent requests
*
* @TODO: Group support is not implemented yet
* @TODO: Group support is not implemented yet
**/
class Manager
{
const BACKEND_TYPE_USER = "User";
const BACKEND_TYPE_GROUP = "Group";
/**
* @var Manager
**/
@ -60,7 +60,7 @@ class Manager
**/
private $user = null;
private $groups = array();
/**
* @var UserBackend
**/
@ -70,32 +70,32 @@ class Manager
* @var GroupBackend
**/
private $groupBackend = null;
/**
* @var Session
**/
private $session = null;
/**
* Creates a new authentication manager using the provided config (or the
* configuration provided in the authentication.ini if no config is given)
* and with the given options.
* and with the given options.
*
* @param Icinga\Config $config The configuration to use for authentication
* @param IcingaConfig $config The configuration to use for authentication
* instead of the authentication.ini
* @param Array $options Additional options that affect the managers behaviour.
* Supported values:
* * writeSession : Whether the session should be writable
* * userBackendClass : Allows to provide an own user backend class
* * writeSession : Whether the session should be writable
* * userBackendClass : Allows to provide an own user backend class
* (used for testing)
* * groupBackendClass : Allows to provide an own group backend class
* * groupBackendClass : Allows to provide an own group backend class
* (used for testing)
* * sessionClass : Allows to provide a different session implementation)
**/
private function __construct($config = null, array $options = array())
{
if ($config === null) {
$config = Config::getInstance()->authentication;
$config = IcingaConfig::app('authentication');
}
if (isset($options["userBackendClass"])) {
$this->userBackend = $options["userBackendClass"];
@ -141,14 +141,14 @@ class Manager
}
/**
* Creates a backend for the the given authenticationTarget (User or Group) and the
* Authenticaiton source.
* Creates a backend for the the given authenticationTarget (User or Group) and the
* Authenticaiton source.
*
* initBackend("User", "Ldap") would create a UserLdapBackend,
* initBackend("Group", "MySource") would create a GroupMySourceBackend,
*
* initBackend("User", "Ldap") would create a UserLdapBackend,
* initBackend("Group", "MySource") would create a GroupMySourceBackend,
*
* Supported backends can be found in the Authentication\Backend folder
*
*
* @param String $authenticationTarget "User" or "Group", depending on what
* authentication information the backend should
* provide
@ -169,9 +169,9 @@ class Manager
}
/**
* Tries to authenticate the current user with the Credentials (@see Credentials).
* Tries to authenticate the current user with the Credentials (@see Credentials).
*
* @param Credentials $credentials The credentials to use for authentication
* @param Credentials $credentials The credentials to use for authentication
* @param Boolean $persist Whether to persist the authentication result
* in the current session
*
@ -214,9 +214,9 @@ class Manager
{
$this->session->set("user", $this->user);
}
/**
* Tries to authenticate the user with the current session
* Tries to authenticate the user with the current session
**/
public function authenticateFromSession()
{
@ -225,10 +225,10 @@ class Manager
/**
* Returns true when the user is currently authenticated
*
*
* @param Boolean $ignoreSession Set to true to prevent authentication by session
*
* @param Boolean
* @param Boolean
**/
public function isAuthenticated($ignoreSession = false)
{
@ -240,7 +240,7 @@ class Manager
/**
* Purges the current authorisation information and deletes the session
*
*
**/
public function removeAuthorization()
{
@ -250,7 +250,7 @@ class Manager
/**
* Returns the current user or null if no user is authenticated
*
*
* @return User
**/
public function getUser()

View File

@ -2,7 +2,7 @@
namespace Icinga;
use Icinga\Application\Config;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Authentication\Manager as AuthManager;
class Backend
@ -14,15 +14,15 @@ class Backend
public static function getInstance($name = null)
{
if (! array_key_exists($name, self::$instances)) {
$config = Config::getInstance()->backends;
$backends = IcingaConfig::app('backends');
if ($name === null) {
$name = AuthManager::getInstance()->getSession()->get('backend');
}
if ($name === null) {
$name = array_shift(array_keys($config->toArray()));
$name = array_shift(array_keys($backends->toArray()));
}
if (isset($config->backends->$name)) {
$config = $config->backends->$name;
if (isset($backends->$name)) {
$config = $backends->$name;
$type = $config->type;
$type[0] = strtoupper($type[0]);
$class = '\\Icinga\\Backend\\' . $type;

View File

@ -1,5 +1,26 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
/**
* Icinga 2 Web - Head for multiple monitoring frontends
* Copyright (C) 2013 Icinga Development Team
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*
* @copyright 2013 Icinga Development Team <info@icinga.org>
* @author Icinga Development Team <info@icinga.org>
*/
// {{{ICINGA_LICENSE_HEADER}}}
namespace Icinga\Web;
@ -114,7 +135,7 @@ class ActionController extends ZfController
*/
protected function loadConfig()
{
$this->config = Config::getInstance();
$this->config = Config::app();
}
/**

View File

@ -5,7 +5,7 @@
*/
namespace Icinga\Web;
use Icinga\Application\Config;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Application\Icinga;
/**
@ -64,7 +64,7 @@ class ModuleActionController extends ActionController
*/
protected function loadConfig()
{
$this->config = Config::module($this->module_name);
$this->config = IcingaConfig::module($this->module_name);
}
/**

View File

@ -2,7 +2,7 @@
namespace Icinga\Monitoring;
use Icinga\Application\Config;
use Icinga\Application\Config as IcingaConfig;
use Icinga\Authentication\Manager as AuthManager;
use Exception;
@ -36,8 +36,7 @@ class Backend
public function getBackendConfigs()
{
if (self::$backendConfigs === null) {
$config = Config::getInstance()->backends;
$backends = $config->backends;
$backends = IcingaConfig::app('backends');
foreach ($backends as $name => $config) {
// TODO: Check if access to this backend is allowed
self::$backendConfigs[$name] = $config;

View File

@ -3,7 +3,7 @@
use Icinga\Application\EmbeddedWeb;
require_once dirname(__FILE__) . '/../library/Icinga/Application/EmbeddedWeb.php';
$app = EmbeddedWeb::start();
$app = EmbeddedWeb::start(dirname(__FILE__) . '/../config/');
require_once 'vendor/lessphp/lessc.inc.php';
header('Content-type: text/css');
$less = new lessc;

View File

@ -7,4 +7,4 @@ require_once dirname(__FILE__). '/../library/Icinga/Application/Web.php';
use Icinga\Application\Web;
Web::start()->dispatch();
Web::start(dirname(__FILE__) . '/../config/')->dispatch();

View File

@ -0,0 +1,7 @@
[logging]
enable = 1
[backend]
db.user = 'user'
db.password = 'password'
disable = 1

View File

@ -0,0 +1,2 @@
[meta]
version = 1

View File

@ -0,0 +1,2 @@
[menu]
breadcrumb = 1

View File

@ -0,0 +1,2 @@
[ldap]
user.ldap_object_class = inetOrgPerson

View File

@ -1,50 +1,86 @@
<?php
// {{{ICINGA_LICENSE_HEADER}}}
// {{{ICINGA_LICENSE_HEADER}}}
namespace Tests\Icinga\Application;
/**
*
* Test class for Config
* Created Thu, 07 Feb 2013 10:07:13 +0000
*
**/
require_once 'Zend/Config/Ini.php';
require_once dirname(__FILE__) . '/../../../../../library/Icinga/Application/Config.php';
use Icinga\Application\Config as IcingaConfig;
class ConfigTest extends \PHPUnit_Framework_TestCase
{
/**
* Test for Config::ListAll()
*
**/
public function testListAll()
public function setUp()
{
$this->markTestIncomplete('testListAll is not implemented yet');
IcingaConfig::$configDir = dirname(__FILE__) . '/Config/files';
}
/**
* Test for Config::GetConfigDir()
*
**/
public function testGetConfigDir()
public function testAppConfig()
{
$this->markTestIncomplete('testGetConfigDir is not implemented yet');
$config = IcingaConfig::app();
$this->assertEquals(1, $config->logging->enable);
// Test non-existent property where null is the default value
$this->assertEquals(null, $config->logging->get('disable'));
// Test non-existent property using zero as the default value
$this->assertEquals(0, $config->logging->get('disable', 0));
// Test retrieve full section
$this->assertEquals(
array(
'disable' => 1,
'db' => array(
'user' => 'user',
'password' => 'password'
)
),
$config->backend->toArray()
);
// Test non-existent section using 'default' as default value
$this->assertEquals('default', $config->get('magic', 'default'));
// Test sub-properties
$this->assertEquals('user', $config->backend->db->user);
// Test non-existent sub-property using 'UTF-8' as the default value
$this->assertEquals('UTF-8', $config->backend->db->get('encoding', 'UTF-8'));
// Test invalid property names using false as default value
$this->assertEquals(false, $config->backend->get('.', false));
$this->assertEquals(false, $config->backend->get('db.', false));
$this->assertEquals(false, $config->backend->get('.user', false));
// Test retrieve array of sub-properties
$this->assertEquals(
array(
'user' => 'user',
'password' => 'password'
),
$config->backend->db->toArray()
);
// Test singleton
$this->assertEquals($config, IcingaConfig::app());
$this->assertEquals(array('logging', 'backend'), $config->keys());
$this->assertEquals(array('enable'), $config->keys('logging'));
}
/**
* Test for Config::__get()
*
**/
public function test__get()
public function testAppExtraConfig()
{
$this->markTestIncomplete('test__get is not implemented yet');
$extraConfig = IcingaConfig::app('extra');
$this->assertEquals(1, $extraConfig->meta->version);
$this->assertEquals($extraConfig, IcingaConfig::app('extra'));
}
/**
* Test for Config::GetInstance()
* Note: This method is static!
*
**/
public function testGetInstance()
public function testModuleConfig()
{
$this->markTestIncomplete('testGetInstance is not implemented yet');
$moduleConfig = IcingaConfig::module('amodule');
$this->assertEquals(1, $moduleConfig->menu->get('breadcrumb'));
$this->assertEquals($moduleConfig, IcingaConfig::module('amodule'));
}
public function testModuleExtraConfig()
{
$moduleExtraConfig = IcingaConfig::module('amodule', 'extra');
$this->assertEquals(
'inetOrgPerson',
$moduleExtraConfig->ldap->user->get('ldap_object_class')
);
$this->assertEquals($moduleExtraConfig, IcingaConfig::module('amodule', 'extra'));
}
}

View File

@ -1,50 +0,0 @@
<?php
namespace Tests\Icinga;
/**
*
* Test class for Config
* Created Wed, 16 Jan 2013 15:15:16 +0000
*
**/
class ConfigTest extends \PHPUnit_Framework_TestCase
{
/**
* Test for Config::Get()
*
**/
public function testGet()
{
$this->markTestIncomplete('testGet is not implemented yet');
}
/**
* Test for Config::__get()
*
**/
public function test__get()
{
$this->markTestIncomplete('test__get is not implemented yet');
}
/**
* Test for Config::__set()
*
**/
public function test__set()
{
$this->markTestIncomplete('test__set is not implemented yet');
}
/**
* Test for Config::Create()
* Note: This method is static!
*
**/
public function testCreate()
{
$this->markTestIncomplete('testCreate is not implemented yet');
}
}