From ea0810fa8c34748c6426e4daa8c70b64d638a24d Mon Sep 17 00:00:00 2001
From: Gunnar Wrobel
Date: Thu, 22 Oct 2009 12:19:00 +0200
Subject: [PATCH] Refactored the mock driver into a mock LDAP connection to
adapt it to the new structure. Fixed the server factory. Fixed some of the
unit tests.
---
.../lib/Horde/Kolab/Server/Cleaner.php | 268 +++++++++
.../lib/Horde/Kolab/Server/Composite.php | 7 +-
.../Kolab/Server/{Ldap => Connection}/File.php | 0
.../Kolab/Server/{Ldap => Connection}/Mock.php | 606 +++++++--------------
.../Horde/Kolab/Server/Connection/Mock/Search.php | 78 +++
.../lib/Horde/Kolab/Server/Factory.php | 262 +++++----
.../Kolab_Server/lib/Horde/Kolab/Server/Ldap.php | 10 +-
.../lib/Horde/Kolab/Server/List/Base.php | 2 +-
.../Kolab_Server/lib/Horde/Kolab/Server/Logged.php | 117 ++--
.../Kolab_Server/lib/Horde/Kolab/Server/Mapped.php | 37 +-
.../Kolab_Server/lib/Horde/Kolab/Server/Object.php | 14 +-
.../lib/Horde/Kolab/Server/Object/Base.php | 1 +
.../lib/Horde/Kolab/Server/Object/Groupofnames.php | 6 +-
.../Kolab/Server/Object/Kolab/Domainmaintainer.php | 2 +-
.../lib/Horde/Kolab/Server/Object/Kolab/User.php | 2 +-
.../Kolab/Server/Object/Kolabgroupofnames.php | 2 +-
.../Kolab/Server/Object/Kolabinetorgperson.php | 8 +-
.../lib/Horde/Kolab/Server/Object/Person.php | 118 ++--
.../lib/Horde/Kolab/Server/Object/Top.php | 26 +-
.../lib/Horde/Kolab/Server/Objects/Base.php | 19 +-
.../lib/Horde/Kolab/Server/Schema/Base.php | 23 +-
.../lib/Horde/Kolab/Server/Structure/Ldap.php | 2 +-
framework/Kolab_Server/package.xml | 68 ++-
.../test/Horde/Kolab/Server/Autoload.php | 6 +-
.../Horde/Kolab/Server/Connection/MockTest.php | 235 ++++++++
.../{Object => Integration}/AddingObjectsTest.php | 6 +-
.../Server/{Object => Integration}/AdminTest.php | 6 +-
.../DistListHandlingTest.php | 6 +-
.../{Object => Integration}/GroupHandlingTest.php | 6 +-
.../Server/{Object => Integration}/GroupTest.php | 6 +-
.../{Object => Integration}/InetorgpersonTest.php | 20 +-
.../KolabgermanbankarrangementTest.php | 10 +-
.../KolabinetorgpersonTest.php | 36 +-
.../Kolabpop3accountTest.php | 10 +-
.../Server/{Server => Integration}/MockTest.php | 237 +-------
.../Server/{Object => Integration}/ObjectTest.php | 6 +-
.../{Object => Integration}/OrgPersonTest.php | 24 +-
.../Server/{Object => Integration}/PersonTest.php | 86 +--
.../Kolab/Server/{ => Integration}/Scenario.php | 23 +-
.../{Object => Integration}/UserHandlingTest.php | 6 +-
.../Server/{Object => Integration}/UserTest.php | 6 +-
.../test/Horde/Kolab/Server/LdapBase.php | 2 +-
.../Server/{Server => Objects}/ServerTest.php | 2 +-
.../test/Horde/Kolab/Server/Query/LdapTest.php | 2 +-
.../test/Horde/Kolab/Server/Result/LdapTest.php | 17 +-
.../test/Horde/Kolab/Server/Server/FactoryTest.php | 164 ++++--
.../Horde/Kolab/Server/Structure/KolabTest.php | 4 +-
.../test/Horde/Kolab/Server/Structure/LdapTest.php | 4 +-
48 files changed, 1494 insertions(+), 1114 deletions(-)
create mode 100644 framework/Kolab_Server/lib/Horde/Kolab/Server/Cleaner.php
rename framework/Kolab_Server/lib/Horde/Kolab/Server/{Ldap => Connection}/File.php (100%)
rename framework/Kolab_Server/lib/Horde/Kolab/Server/{Ldap => Connection}/Mock.php (60%)
create mode 100644 framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock/Search.php
create mode 100644 framework/Kolab_Server/test/Horde/Kolab/Server/Connection/MockTest.php
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/AddingObjectsTest.php (86%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/AdminTest.php (94%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/DistListHandlingTest.php (85%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/GroupHandlingTest.php (98%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/GroupTest.php (95%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/InetorgpersonTest.php (93%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/KolabgermanbankarrangementTest.php (94%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/KolabinetorgpersonTest.php (92%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/Kolabpop3accountTest.php (95%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Server => Integration}/MockTest.php (66%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/ObjectTest.php (97%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/OrgPersonTest.php (86%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/PersonTest.php (62%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{ => Integration}/Scenario.php (97%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/UserHandlingTest.php (99%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Object => Integration}/UserTest.php (94%)
rename framework/Kolab_Server/test/Horde/Kolab/Server/{Server => Objects}/ServerTest.php (98%)
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Cleaner.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Cleaner.php
new file mode 100644
index 000000000..adb685fd5
--- /dev/null
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Cleaner.php
@@ -0,0 +1,268 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+
+/**
+ * A cleanup decoration for Kolab Servers that allows to remove all added
+ * objects.
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package Kolab_Server
+ * @author Gunnar Wrobel
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+class Horde_Kolab_Server_Cleaner implements Horde_Kolab_Server
+{
+ /**
+ * The server we delegate to.
+ *
+ * @var Horde_Kolab_Server
+ */
+ private $_server;
+
+ /**
+ * The objects added.
+ *
+ * @var array
+ */
+ private $_added = array();
+
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Server $server The base server connection.
+ */
+ public function __construct(Horde_Kolab_Server $server)
+ {
+ $this->_server = $server;
+ }
+
+ /**
+ * Connect to the server.
+ *
+ * @param string $guid The global unique id of the user.
+ * @param string $pass The password.
+ *
+ * @return NULL.
+ *
+ * @throws Horde_Kolab_Server_Exception If the connection failed.
+ */
+ public function connectGuid($guid = null, $pass = null)
+ {
+ $this->_server->connectGuid($guid, $pass);
+ }
+
+ /**
+ * Get the current GUID
+ *
+ * @return string The GUID of the connected user.
+ */
+ public function getGuid()
+ {
+ $this->_server->getGuid();
+ }
+
+ /**
+ * Get the base GUID of this server
+ *
+ * @return string The base GUID of this server.
+ */
+ public function getBaseGuid()
+ {
+ $this->_server->getBaseGuid();
+ }
+
+ /**
+ * Low level access to reading object data.
+ *
+ * @param string $guid The object to retrieve.
+ * @param array $attrs Restrict to these attributes.
+ *
+ * @return array An array of attributes.
+ *
+ * @throws Horde_Kolab_Server_Exception If the search operation hit an error
+ * or returned no result.
+ */
+ public function read($guid, array $attrs = array())
+ {
+ return $this->_server->read($guid);
+ }
+
+ /**
+ * Low level access to reading some object attributes.
+ *
+ * @param string $guid The object to retrieve.
+ * @param string $attrs Restrict to these attributes.
+ *
+ * @return array An array of attributes.
+ *
+ * @throws Horde_Kolab_Server_Exception
+ *
+ * @see Horde_Kolab_Server::read
+ */
+ public function readAttributes($guid, array $attrs)
+ {
+ return $this->_server->readAttributes($guid, $attrs);
+ }
+
+ /**
+ * Finds object data matching a given set of criteria.
+ *
+ * @param Horde_Kolab_Server_Query_Element $criteria The criteria for the search.
+ * @param array $params Additional search parameters.
+ *
+ * @return Horde_Kolab_Server_Result The result object.
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function find(
+ Horde_Kolab_Server_Query_Element $criteria,
+ array $params = array()
+ ) {
+ return $this->_server->find($criteria, $params);
+ }
+
+ /**
+ * Finds all object data below a parent matching a given set of criteria.
+ *
+ * @param Horde_Kolab_Server_Query_Element $criteria The criteria for the search.
+ * @param string $parent The parent to search below.
+ * @param array $params Additional search parameters.
+ *
+ * @return Horde_Kolab_Server_Result The result object.
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function findBelow(
+ Horde_Kolab_Server_Query_Element $criteria,
+ $parent,
+ array $params = array()
+ ) {
+ return $this->_server->findBelow($criteria, $parent, $params);
+ }
+
+ /**
+ * Modify existing object data.
+ *
+ * @param Horde_Kolab_Server_Object $object The object to be modified.
+ * @param array $data The attributes of the object
+ * to be stored.
+ *
+ * @return NULL
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function save(Horde_Kolab_Server_Object $object, array $data)
+ {
+ $this->_server->save($object, $data);
+ }
+
+ /**
+ * Add new object data.
+ *
+ * @param Horde_Kolab_Server_Object $object The object to be added.
+ * @param array $data The attributes of the object
+ * to be added.
+ *
+ * @return NULL
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function add(Horde_Kolab_Server_Object $object, array $data)
+ {
+ $this->_server->add($object, $data);
+ $this->_added[] = $object->getGuid();
+ }
+
+ /**
+ * Delete an object.
+ *
+ * @param string $guid The GUID of the object to be deleted.
+ *
+ * @return NULL
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function delete($guid)
+ {
+ $this->_server->delete($guid);
+ if (in_array($guid, $this->_added)) {
+ $this->_added = array_diff($this->_added, array($guid));
+ }
+ }
+
+ /**
+ * Rename an object.
+ *
+ * @param string $guid The GUID of the object to be renamed.
+ * @param string $new The new GUID of the object.
+ *
+ * @return NULL
+ *
+ * @throws Horde_Kolab_Server_Exception
+ */
+ public function rename($guid, $new)
+ {
+ $this->_server->rename($guid, $new);
+ }
+
+ /**
+ * Return the ldap schema.
+ *
+ * @return Net_LDAP2_Schema The LDAP schema.
+ *
+ * @throws Horde_Kolab_Server_Exception If retrieval of the schema failed.
+ */
+ public function getSchema()
+ {
+ return $this->_server->getSchema();
+ }
+
+ /**
+ * Get the parent GUID of this object.
+ *
+ * @param string $guid The GUID of the child.
+ *
+ * @return string the parent GUID of this object.
+ */
+ public function getParentGuid($guid)
+ {
+ return $this->_server->getParentGuid($guid);
+ }
+
+ /**
+ * Cleanup the server.
+ *
+ * @return NULL
+ */
+ public function cleanup()
+ {
+ foreach ($this->_added as $guid) {
+ $this->delete($guid);
+ }
+ }
+
+ /**
+ * Destructor.
+ */
+ public function __destruct()
+ {
+ $this->cleanup();
+ }
+}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Composite.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Composite.php
index 058af2500..caeda199f 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Composite.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Composite.php
@@ -98,12 +98,11 @@ class Horde_Kolab_Server_Composite
*
* @throws Horde_Kolab_Server_Exception If the connection failed.
*/
- protected function _connect($user = null, $pass = null)
+ public function connect($user = null, $pass = null)
{
/** Bind anonymously first. */
- $this->connectUid();
+ $this->server->connectGuid();
$guid = $this->structure->getGuidForUser($user);
- $this->connectUid($guid, $pass);
- return $this->structure->getUserForUser($user);
+ $this->server->connectGuid($guid, $pass);
}
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap/File.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/File.php
similarity index 100%
rename from framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap/File.php
rename to framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/File.php
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap/Mock.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock.php
similarity index 60%
rename from framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap/Mock.php
rename to framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock.php
index ddcbc322f..3a1ecffa1 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap/Mock.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock.php
@@ -25,7 +25,8 @@
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
+class Horde_Kolab_Server_Connection_Mock
+implements Horde_Kolab_Server_Connection
{
/**
@@ -33,7 +34,7 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
*
* @var array
*/
- protected $data;
+ protected $data = array();
/**
* Indicates if we are bound.
@@ -91,17 +92,10 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
*
* @return NULL
*/
- public function setParams(array $params)
+ public function __construct(array $params)
{
- //@todo Load when connecting
- //$this->load();
-
if (isset($params['data'])) {
$this->data = $params['data'];
- } else {
- if (!isset($this->data)) {
- $this->data = array();
- }
}
if (isset($this->params['admin'])
@@ -114,65 +108,26 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
$admin->save();
}
}
-
- //@todo Load when connecting
- //$this->store();
-
- parent::setParams($params);
- }
-
- /**
- * Connect to the LDAP server.
- *
- * @param string $uid The unique id of the user.
- * @param string $pass The password.
- *
- * @return NULL.
- *
- * @throws Horde_Kolab_Server_Exception If the connection failed.
- */
- protected function _connectUid($uid = null, $pass = null)
- {
- //@todo
- }
-
- /**
- * Load the current state of the database.
- *
- * @return NULL
- */
- protected function load()
- {
- //@todo: remove the global
- if (isset($GLOBALS['KOLAB_SERVER_TEST_DATA'])) {
- $this->data = $GLOBALS['KOLAB_SERVER_TEST_DATA'];
- } else {
- $this->data = array();
- }
}
/**
- * Store the current state of the database.
+ * Get the server read connection.
*
- * @return NULL
+ * @return mixed The connection for reading data.
*/
- protected function store()
+ public function getRead()
{
- $GLOBALS['KOLAB_SERVER_TEST_DATA'] = $this->data;
+ return $this;
}
/**
- * Cleans the current state of the database.
+ * Get the server write connection.
*
- * @return NULL
+ * @return mixed The connection for writing data.
*/
- public function clean()
+ public function getWrite()
{
- $this->unbind();
-
- $GLOBALS['KOLAB_SERVER_TEST_DATA'] = array();
-
- $this->data = array();
+ return $this;
}
/**
@@ -188,8 +143,12 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
* password or anonymous binding is not
* allowed.
*/
- protected function bind($dn = false, $pw = '')
+ public function bind($dn = '', $pw = '')
{
+ if ($this->bound && empty($dn) && empty($pw)) {
+ return true;
+ }
+
if (!$dn) {
if (isset($this->params['uid'])) {
$dn = $this->params['uid'];
@@ -230,17 +189,106 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
} else {
$this->bound = true;
}
+
+ if ($this->bound) {
+ $this->load();
+ }
+
return $this->bound;
}
/**
- * Disconnect from LDAP.
+ * Get a specific entry based on the DN
+ *
+ * @param string $dn DN of the entry that should be fetched
+ * @param array $attr Array of Attributes to select. If ommitted, all attributes are fetched.
+ *
+ * @return Net_LDAP2_Entry|Net_LDAP2_Error Reference to a Net_LDAP2_Entry object or Net_LDAP2_Error object
+ * @todo Maybe check against the shema should be done to be sure the attribute type exists
+ */
+ public function getEntry($dn, $attr = array())
+ {
+ if (!is_array($attr)) {
+ $attr = array($attr);
+ }
+ $result = $this->search($dn, '(objectClass=*)',
+ array('scope' => 'base', 'attributes' => $attr));
+ if ($result->count() == 0) {
+ throw new Horde_Kolab_Server_Exception('Could not fetch entry '.$dn.': no entry found');
+ }
+ $entry = $result->shiftEntry();
+ if (false == $entry) {
+ throw new Horde_Kolab_Server_Exception('Could not fetch entry (error retrieving entry from search result)');
+ }
+ return $entry;
+ }
+
+ /**
+ * Search for object data.
*
- * @return NULL
+ * @param string $base The search base
+ * @param string $filter The LDAP search filter.
+ * @param string $params Additional search parameters.
+ *
+ * @return array The result array.
+ *
+ * @throws Horde_Kolab_Server_Exception If the search operation encountered
+ * a problem.
*/
- public function unbind()
+ public function search($base = null, $filter = null, $params = array())
{
- $this->bound = false;
+ $this->bind();
+
+ $filter = $this->parse($filter);
+ if (isset($params['attributes'])) {
+ $attributes = $params['attributes'];
+ if (!is_array($attributes)) {
+ $attributes = array($attributes);
+ }
+ } else {
+ $attributes = array();
+ }
+
+ $result = $this->doSearch($filter, $attributes);
+
+ if (empty($result)) {
+ $search = new Horde_Kolab_Server_Connection_Mock_Search(array());
+ return $search;
+ }
+
+ if (!empty($base)) {
+ $subtree = array();
+ foreach ($result as $entry) {
+ if (strpos($entry['dn'], $base)) {
+ $subtree[] = $entry;
+ }
+ }
+ $result = $subtree;
+ }
+
+ $search = new Horde_Kolab_Server_Connection_Mock_Search($this->getEntries($result));
+ return $search;
+ }
+
+ /**
+ * Return the entries of a result.
+ *
+ * @param array $result The LDAP search result.
+ *
+ * @return mixed The entries of the result or false.
+ */
+ public function getEntries($result)
+ {
+ if (is_array($result)) {
+ $data = array();
+ foreach ($result as $entry) {
+ $t = $entry['data'];
+ $t['dn'] = $entry['dn'];
+ $data[$entry['dn']] = $t;
+ }
+ return $data;
+ }
+ return false;
}
/**
@@ -323,53 +371,6 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
}
/**
- * Search for object data.
- *
- * @param string $filter The LDAP search filter.
- * @param string $params Additional search parameters.
- * @param string $base The search base
- *
- * @return array The result array.
- *
- * @throws Horde_Kolab_Server_Exception If the search operation encountered
- * a problem.
- */
- public function search($filter = null, $params = array(), $base = null)
- {
- if (!$this->bound) {
- $result = $this->bind();
- }
-
- $filter = $this->parse($filter);
- if (isset($params['attributes'])) {
- $attributes = $params['attributes'];
- if (!is_array($attributes)) {
- $attributes = array($attributes);
- }
- $this->mapKeys($attributes);
- } else {
- $attributes = array();
- }
- $result = $this->doSearch($filter, $attributes);
- if (empty($result)) {
- return array();
- }
- if ($base) {
- $subtree = array();
- foreach ($result as $entry) {
- if (strpos($entry['dn'], $base)) {
- $subtree[] = $entry;
- }
- }
- $result = $subtree;
- }
-
- $this->unmapAttributes($result);
-
- return $this->getEntries($result);
- }
-
- /**
* Perform the search.
*
* @param array $filter Filter criteria-
@@ -381,7 +382,7 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
* @throws Horde_Kolab_Server_Exception If the search operation is not
* available.
*/
- protected function doSearch($filter, $attributes = null)
+ public function doSearch($filter, $attributes = null)
{
if (isset($filter['log'])) {
$result = array();
@@ -483,153 +484,95 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
}
/**
- * Read object data.
- *
- * @param string $dn The object to retrieve.
- * @param string $attrs Restrict to these attributes
- *
- * @return array An array of attributes.
- *
- * @throws Horde_Kolab_Server_Exception If the object does not exist.
- */
- public function read($uid, array $attrs = array())
+ * Add a new entryobject to a directory.
+ *
+ * @param Net_LDAP2_Entry $entry Net_LDAP2_Entry
+ *
+ * @return Net_LDAP2_Error|true Net_LDAP2_Error object or true
+ */
+ public function add($entry)
{
- if (!$this->bound) {
- $result = $this->bind();
- }
+ $this->bind();
- if (!isset($this->data[$dn])) {
- throw new Horde_Kolab_Server_MissingObjectException(sprintf("No such object: %s",
- $dn));
- }
- if (empty($attrs)) {
- $data = $this->data[$dn]['data'];
- $this->unmapAttributes($data);
- return $data;
- } else {
- $this->mapKeys($attrs);
+ $ldap_data = $this->toStorage($entry->getValues());
- $result = array();
- $data = $this->data[$dn]['data'];
+ $guid = $entry->getDn();
- foreach ($attrs as $attr) {
- if (isset($data[$attr])) {
- $result[$attr] = $data[$attr];
- }
- }
-
- $this->unmapAttributes($result);
+ $this->data[$guid] = array(
+ 'dn' => $guid,
+ 'data' => array_merge($ldap_data,
+ array('dn' => $guid)),
+ );
- return $result;
- }
+ $this->store();
}
/**
- * Save an object.
- *
- * @param string $uid The UID of the object to be added.
- * @param array $data The attributes of the object to be added/replaced.
- * @param boolean $exists Does the object already exist on the server?
- *
- * @return NULL
- */
- public function save($uid, array $data, $exists = false)
+ * Modify an ldapentry directly on the server
+ *
+ * @param string|Net_LDAP2_Entry &$entry DN-string or Net_LDAP2_Entry
+ * @param array $parms Array of changes
+ *
+ * @access public
+ * @return Net_LDAP2_Error|true Net_LDAP2_Error object or true
+ */
+ public function modify($entry, $data = array())
{
- if (!$this->bound) {
- $result = $this->bind();
- }
-
- if ($exists === false) {
+ $this->bind();
- $ldap_data = $this->_toStorage($data['add']);
-
- $this->data[$uid] = array(
- 'dn' => $uid,
- 'data' => array_merge($ldap_data,
- array('dn' => $uid)),
- );
- } else {
+ $guid = $entry->getDn();
- if (isset($data['delete'])) {
- foreach ($data['delete'] as $k => $v) {
- if (is_int($k)) {
- $w = $this->mapField($v);
- if (isset($this->data[$uid]['data'][$w])) {
- /** Delete a complete attribute */
- unset($this->data[$uid]['data'][$w]);
+ if (isset($data['delete'])) {
+ foreach ($data['delete'] as $k => $v) {
+ if (is_int($k)) {
+ if (isset($this->data[$guid]['data'][$w])) {
+ /** Delete a complete attribute */
+ unset($this->data[$guid]['data'][$w]);
+ }
+ } else {
+ if (isset($this->data[$guid]['data'][$l])) {
+ if (!is_array($v)) {
+ $v = array($v);
}
- } else {
- $l = $this->mapField($k);
- if (isset($this->data[$uid]['data'][$l])) {
- if (!is_array($v)) {
- $v = array($v);
- }
- foreach ($v as $w) {
- $key = array_search($w, $this->data[$uid]['data'][$l]);
- if ($key !== false) {
- /** Delete a single value */
- unset($this->data[$uid]['data'][$l][$key]);
- }
+ foreach ($v as $w) {
+ $key = array_search($w, $this->data[$guid]['data'][$l]);
+ if ($key !== false) {
+ /** Delete a single value */
+ unset($this->data[$guid]['data'][$l][$key]);
}
}
}
}
}
+ }
- if (isset($data['replace'])) {
- $ldap_data = $this->_toStorage($data['replace']);
+ if (isset($data['replace'])) {
+ $ldap_data = $this->toStorage($data['replace']);
- $this->data[$uid] = array(
- 'dn' => $uid,
- 'data' => array_merge($this->data[$uid]['data'],
- $ldap_data,
- array('dn' => $uid)),
- );
- }
+ $this->data[$guid] = array(
+ 'dn' => $guid,
+ 'data' => array_merge($this->data[$guid]['data'],
+ $ldap_data,
+ array('dn' => $guid)),
+ );
+ }
- if (isset($data['add'])) {
- $ldap_data = $this->_toStorage($data['add']);
+ if (isset($data['add'])) {
+ $ldap_data = $this->toStorage($data['add']);
- foreach ($ldap_data as $k => $v) {
- if (is_array($v)) {
- foreach ($v as $w) {
- $this->data[$uid]['data'][$k][] = $w;
- }
- } else {
- $this->data[$uid]['data'][$k][] = $v;
+ foreach ($ldap_data as $k => $v) {
+ if (is_array($v)) {
+ foreach ($v as $w) {
+ $this->data[$guid]['data'][$k][] = $w;
}
- $this->data[$uid]['data'][$k] = array_values($this->data[$uid]['data'][$k]);
+ } else {
+ $this->data[$guid]['data'][$k][] = $v;
}
+ $this->data[$guid]['data'][$k] = array_values($this->data[$guid]['data'][$k]);
}
}
$this->store();
-
- if (isset($this->logger)) {
- $this->logger->debug(sprintf('The object \"%s\" has been successfully saved!',
- $uid));
- }
- }
-
- /**
- * Rewrite a data array to our internal storage format.
- *
- * @param array $data The attributes of the object to be added/replaced.
- *
- * @return array The transformed data set.
- */
- private function _toStorage($data)
- {
- $this->mapAttributes($data);
-
- $ldap_data = array();
- foreach ($data as $key => $val) {
- if (!is_array($val)) {
- $val = array($val);
- }
- $ldap_data[$key] = $val;
- }
- return $ldap_data;
}
/**
@@ -649,11 +592,8 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
throw new Horde_Kolab_Server_MissingObjectException(sprintf("No such object: %s",
$uid));
}
+
$this->store();
- if (isset($this->logger)) {
- $this->logger->debug(sprintf('The object \"%s\" has been successfully deleted!',
- $uid));
- }
}
/**
@@ -666,212 +606,88 @@ class Horde_Kolab_Server_Ldap_Mock extends Horde_Kolab_Server_Ldap_Standard
*
* @throws Horde_Kolab_Server_Exception
*/
- public function rename($uid, $new)
+ public function move($uid, $new)
{
if (isset($this->data[$uid])) {
$this->data[$new] = $this->data[$uid];
unset($this->data[$uid]);
}
- $this->store();
- if (isset($this->logger)) {
- $this->logger->debug(sprintf('The object \"%s\" has been successfully renamed to \"%s\"!',
- $uid, $new));
- }
- }
- /**
- * Return the schema for the given objectClass.
- *
- * @param string $objectclass Fetch the schema for this objectClass.
- *
- * @return array The schema for the given objectClass.
- *
- * @throws Horde_Kolab_Server_Exception If retrieval of the schema failed.
- */
- public function getObjectclassSchema($objectclass)
- {
- return array();
+ $this->store();
}
- /**
- * Return the schema for the given attribute.
- *
- * @param string $attribute Fetch the schema for this attribute.
- *
- * @return array The schema for the given attribute.
- *
- * @throws Horde_Kolab_Server_Exception If retrieval of the schema failed.
- */
- public function getAttributeSchema($attribute)
+ public function schema()
{
- return array();
+ //@todo: implement
}
/**
- * Return the current entry of a result.
+ * Cleans the current state of the database.
*
- * @return mixe The current entry of the result or false.
+ * @return NULL
*/
- protected function fetchEntry()
+ public function clean()
{
- if (is_array($this->_current_result)
- && $this->_current_index < count($this->_current_result)) {
-
- $data = array_keys($this->_current_result[$this->_current_index]['data']);
-
- $data['dn'] = array($this->_current_result[$this->_current_index]['dn']);
-
- foreach ($this->_current_result[$this->_current_index]['data']
- as $attr => $value) {
- if (!is_array($value)) {
- $value = array($value);
- }
- $data[$attr] = $value;
- }
- $this->_current_index++;
- return $data;
- }
- return false;
- }
+ $this->unbind();
- /**
- * Return the first entry of a result.
- *
- * @param array $result The LDAP search result.
- *
- * @return mixed The first entry of the result or false.
- */
- protected function firstEntry($result)
- {
- $this->_current_result = $result;
- $this->_current_index = 0;
- return $this->fetchEntry();
- }
+ $GLOBALS['KOLAB_SERVER_TEST_DATA'] = array();
- /**
- * Return the next entry of a result.
- *
- * @param resource $entry The current LDAP entry.
- *
- * @return resource The next entry of the result.
- */
- protected function nextEntry($entry)
- {
- return $this->fetchEntry();
+ $this->data = array();
}
/**
- * Return the entries of a result.
- *
- * @param array $result The LDAP search result.
+ * Disconnect from LDAP.
*
- * @return mixed The entries of the result or false.
+ * @return NULL
*/
- protected function getEntries($result)
+ public function unbind()
{
- if (is_array($result)) {
- $data = array();
- foreach ($result as $entry) {
- $t = $entry['data'];
- $t['dn'] = $entry['dn'];
- $data[$entry['dn']] = $t;
- }
- return $data;
- }
- return false;
+ $this->bound = false;
}
/**
- * Sort the entries of a result.
- *
- * @param resource &$result The LDAP search result.
- * @param string $attribute The attribute used for sorting.
+ * Load the current state of the database.
*
- * @return boolean True if sorting succeeded.
+ * @return NULL
*/
- public function sort(&$result, $attribute)
+ protected function load()
{
- if (empty($result)) {
- return $result;
+ /**
+ * @todo: remove as it does not make much sense. The file based handler
+ * can do the same thing as a decorator.
+ */
+ if (isset($GLOBALS['KOLAB_SERVER_TEST_DATA'])) {
+ $this->data = $GLOBALS['KOLAB_SERVER_TEST_DATA'];
}
-
- $this->_sort_by = $attribute;
- usort($result, array($this, 'resultSort'));
- return false;
}
/**
- * Sort two entries.
- *
- * @param array $a First entry.
- * @param array $b Second entry.
+ * Store the current state of the database.
*
- * @return int Comparison result.
+ * @return NULL
*/
- protected function resultSort($a, $b)
+ protected function store()
{
- $x = isset($a['data'][$this->_sort_by][0])?$a['data'][$this->_sort_by][0]:'';
- $y = isset($b['data'][$this->_sort_by][0])?$b['data'][$this->_sort_by][0]:'';
- return strcasecmp($x, $y);
+ $GLOBALS['KOLAB_SERVER_TEST_DATA'] = $this->data;
}
/**
- * Return the current LDAP error number.
- *
- * @return int The current LDAP error number.
- */
- protected function errno()
- {
- return $this->_errno;
- }
-
- /**
- * Return the current LDAP error description.
- *
- * @return string The current LDAP error description.
- */
- protected function error()
- {
- return $this->_error;
- }
-
- /**
- * Identify the DN of the first result entry.
- *
- * @todo Check if this could be reintegrated with the code in the LDAP handler
- * again.
- *
- * @param array $result The LDAP search result.
- * @param int $restrict A Horde_Kolab_Server::RESULT_* result restriction.
+ * Rewrite a data array to our internal storage format.
*
- * @return boolean|string|array The DN(s) or false if there was no result.
+ * @param array $data The attributes of the object to be added/replaced.
*
- * @throws Horde_Kolab_Server_Exception If the number of results did not
- * meet the expectations.
+ * @return array The transformed data set.
*/
- protected function dnFromResult($result,
- $restrict = Horde_Kolab_Server::RESULT_SINGLE)
+ protected function toStorage($data)
{
- if (empty($result)) {
- return false;
- }
- $dns = array();
- foreach ($result as $entry) {
- $dns[] = $entry['dn'];
- }
-
- switch ($restrict) {
- case self::RESULT_STRICT:
- if (count($dns) > 1) {
- throw new Horde_Kolab_Server_Exception(sprintf("Found %s results when expecting only one!",
- $count));
+ $ldap_data = array();
+ foreach ($data as $key => $val) {
+ if (!is_array($val)) {
+ $val = array($val);
}
- case self::RESULT_SINGLE:
- return $dns[0];
- case self::RESULT_MANY:
- return $dns;
+ $ldap_data[$key] = $val;
}
+ return $ldap_data;
}
-
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock/Search.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock/Search.php
new file mode 100644
index 000000000..d6a9a6c60
--- /dev/null
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Connection/Mock/Search.php
@@ -0,0 +1,78 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+
+/**
+ * A mockup class to simulate LDAP search results.
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package Kolab_Server
+ * @author Gunnar Wrobel
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+class Horde_Kolab_Server_Connection_Mock_Search
+extends Net_LDAP2_Search
+{
+ /**
+ * The search result.
+ *
+ * @var array
+ */
+ private $_result;
+
+ /**
+ * Constructor.
+ *
+ * @param array $result The search result.
+ */
+ public function __construct(array $result)
+ {
+ $this->_result = $result;
+ }
+
+ /**
+ * The number of result entries.
+ *
+ * @return int The number of elements.
+ */
+ public function count()
+ {
+ return count($this->_result);
+ }
+
+ /**
+ * Test if the last search exceeded the size limit.
+ *
+ * @return boolean True if the last search exceeded the size limit.
+ */
+ public function sizeLimitExceeded()
+ {
+ return false;
+ }
+
+ /**
+ * Return the result as an array.
+ *
+ * @return array The resulting array.
+ */
+ public function as_struct()
+ {
+ return $this->_result;
+ }
+
+}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Factory.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Factory.php
index 2d026852b..1a881c340 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Factory.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Factory.php
@@ -43,34 +43,23 @@ class Horde_Kolab_Server_Factory
*
* @return NULL
*/
- static public function setup(array $configuration, Horde_Injector $injector)
+ static public function setup(Horde_Injector $injector, array $configuration)
{
self::setupObjects($injector);
self::setupSearch($injector);
self::setupSchema($injector);
self::setupStructure(
+ $injector,
isset($configuration['structure'])
- ? $configuration['structure'] : array(),
- $injector
+ ? $configuration['structure'] : array()
);
unset($configuration['structure']);
- self::setupCache(
- $injector,
- isset($configuration['cache'])
- ? $configuration['cache'] : null
- );
- unset($configuration['cache']);
-
- self::setupLogger(
- $injector,
- isset($configuration['logger'])
- ? $configuration['logger'] : null
- );
- unset($configuration['logger']);
+ self::setupConfiguration($injector, $configuration);
- self::setupServer($configuration, $injector);
+ self::setupServer($injector);
+ self::setupComposite($injector);
}
/**
@@ -99,8 +88,8 @@ class Horde_Kolab_Server_Factory
* @return NULL
*/
static protected function setupStructure(
- array $configuration,
- Horde_Injector $injector
+ Horde_Injector $injector,
+ array $configuration
) {
if (!isset($configuration['driver'])) {
$configuration['driver'] = 'Horde_Kolab_Server_Structure_Kolab';
@@ -151,112 +140,165 @@ class Horde_Kolab_Server_Factory
}
/**
- * Provide a cache handler for Horde_Kolab_Server.
+ * Inject the server configuration.
*
- * @param Horde_Injector $injector The object providing our dependencies.
- * @param mixed $instance The cache handler or empty if it
- * should be created.
+ * @param Horde_Injector $injector The object providing our dependencies.
+ * @param array $configuration The parameters required to create
+ * the desired Horde_Kolab_Server.
*
* @return NULL
*/
- static protected function setupCache(
+ static protected function setupConfiguration(
Horde_Injector $injector,
- $instance = null
+ array $configuration
) {
- if (empty($instance)) {
- $instance = new Horde_Cache_Null();
- }
- $injector->setInstance('Horde_Kolab_Server_Cache', $instance);
+ $injector->setInstance('Horde_Kolab_Server_Config', $configuration);
}
/**
- * Provide a log handler for Horde_Kolab_Server.
+ * Setup the machinery to create a Horde_Kolab_Server.
*
- * @param Horde_Injector $injector The object providing our dependencies.
- * @param mixed $instance The log handler or empty if it
- * should be created.
+ * @param array $configuration The parameters required to create
+ * the desired Horde_Kolab_Server.
+ * @param Horde_Injector $injector The object providing our dependencies.
*
* @return NULL
*/
- static protected function setupLogger(
- Horde_Injector $injector,
- $instance = null
- ) {
- if (empty($instance)) {
- $instance = new Horde_Log_Logger(new Horde_Log_Handler_Null());
- }
- $injector->setInstance('Horde_Kolab_Server_Logger', $instance);
+ static protected function setupServer(Horde_Injector $injector) {
+ $injector->bindFactory(
+ 'Horde_Kolab_Server',
+ 'Horde_Kolab_Server_Factory',
+ 'getServer'
+ );
}
/**
- * Setup the machinery to create a Horde_Kolab_Server.
+ * Attempts to return a concrete Horde_Kolab_Server instance.
*
- * @param array $configuration The parameters required to create
- * the desired Horde_Kolab_Server.
- * @param Horde_Injector $injector The object providing our dependencies.
+ * @param Horde_Injector $injector The object providing our dependencies.
*
- * @return NULL
+ * @return Horde_Kolab_Server The newly created concrete Horde_Kolab_Server
+ * instance.
*/
- static protected function setupServer(
- array $configuration,
- Horde_Injector $injector
- ) {
+ static public function getServer(Horde_Injector $injector)
+ {
+ $configuration = $injector->getInstance('Horde_Kolab_Server_Config');
+
if (empty($configuration['driver'])) {
- $configuration['driver'] = 'Horde_Kolab_Server_Ldap';
+ $configuration['driver'] = 'Ldap';
}
-
- $config = new stdClass;
- switch (ucfirst(strtolower($configuration['driver']))) {
+ if (isset($configuration['params'])) {
+ $params = $configuration['params'];
+ } else {
+ $params = $configuration;
+ }
+
+ $driver = ucfirst(strtolower($configuration['driver']));
+ switch ($driver) {
case 'Ldap':
case 'Test':
case 'File':
- $config->driver = 'Horde_Kolab_Server_'
- . ucfirst(strtolower($configuration['driver']));
+ $server = self::getLdapServer($driver, $params);
break;
default:
- $config->driver = $configuration['driver'];
- break;
+ throw new Horde_Kolab_Server_Exception('Invalid server configuration!');
}
- $config->params = isset($configuration['params'])
- ? $configuration['params'] : array();
-
- $injector->setInstance('Horde_Kolab_Server_Config', $config);
+ if (isset($params['map'])) {
+ $server = new Horde_Kolab_Server_Mapped($server, $params['map']);
+ }
+ if (isset($configuration['logger'])) {
+ $server = new Horde_Kolab_Server_Logged($server, $configuration['logger']);
+ }
+ if (isset($configuration['cache'])) {
+ $server = new Horde_Kolab_Server_Cached($server, $configuration['cache']);
+ }
- $injector->bindFactory(
- 'Horde_Kolab_Server',
- 'Horde_Kolab_Server_Factory',
- 'getServer'
- );
+ return $server;
}
/**
- * Attempts to return a concrete Horde_Kolab_Server instance.
+ * Attempts to return a concrete Horde_Kolab_Server_Ldap instance.
*
- * @param Horde_Injector $injector The object providing our dependencies.
+ * @param array $params LDAP connection parameters.
*
- * @return Horde_Kolab_Server The newly created concrete Horde_Kolab_Server
- * instance.
+ * @return Horde_Kolab_Server_Ldap The newly created concrete
+ * Horde_Kolab_Server_Ldap instance.
*/
- static public function &getServer(Horde_Injector $injector)
+ static protected function getLdapServer($driver, array $params)
{
- $config = $injector->getInstance('Horde_Kolab_Server_Config');
- $driver = $config->driver;
- $server = new $driver(
- $injector->getInstance('Horde_Kolab_Server_Objects'),
- $injector->getInstance('Horde_Kolab_Server_Structure'),
- $injector->getInstance('Horde_Kolab_Server_Search'),
- $injector->getInstance('Horde_Kolab_Server_Schema')
- );
- $server->setParams($config->params);
- $server->setCache($injector->getInstance('Horde_Kolab_Server_Cache'));
- $server->setLogger($injector->getInstance('Horde_Kolab_Server_Logger'));
+ if (!isset($params['basedn'])) {
+ throw new Horde_Kolab_Server_Exception('The base DN is missing');
+ }
+
+ if (isset($params['server'])) {
+ $params['host'] = $params['server'];
+ unset($params['server']);
+ }
+
+ if (isset($params['phpdn'])) {
+ $params['binddn'] = $params['phpdn'];
+ unset($params['phpdn']);
+ }
+
+ if (isset($params['phppw'])) {
+ $params['bindpw'] = $params['phppw'];
+ unset($params['phppw']);
+ }
+
+ //@todo: Place this is a specific connection factory.
+ switch ($driver) {
+ case 'Ldap':
+ $ldap_read = new Net_LDAP2($params);
+ if (isset($params['host_master'])) {
+ $params['host'] = $params['host_master'];
+ $ldap_write = new Net_LDAP2($params);
+ $connection = new Horde_Kolab_Server_Connection_Splittedldap(
+ $ldap_read, $ldap_write
+ );
+ } else {
+ $connection = new Horde_Kolab_Server_Connection_Simpleldap(
+ $ldap_read
+ );
+ }
+ break;
+ case 'File':
+ case 'Test':
+ $connection = new Horde_Kolab_Server_Connection_Mock($params);
+ break;
+ }
+ if (!isset($params['filter'])) {
+ $server = new Horde_Kolab_Server_Ldap_Standard(
+ $connection,
+ $params['basedn']
+ );
+ } else {
+ $server = new Horde_Kolab_Server_Ldap_Filtered(
+ $connection,
+ $params['basedn'],
+ $params['filter']
+ );
+ }
return $server;
}
/**
+ * Setup the machinery to create a Horde_Kolab_Server_Composite server.
+ *
+ * @param Horde_Injector $injector The object providing our dependencies.
+ *
+ * @return NULL
+ */
+ static protected function setupComposite(Horde_Injector $injector)
+ {
+ /**
+ * Nothing to do here for now as class and interface name are the same.
+ */
+ }
+
+ /**
* Attempts to return a reference to a concrete Horde_Kolab_Server
* instance based on $driver. It will only create a new instance
* if no Horde_Kolab_Server instance with the same parameters currently
@@ -273,52 +315,32 @@ class Horde_Kolab_Server_Factory
*/
static public function &singleton($params = array())
{
- $signature = hash('md5', serialize(ksort($params)));
+ global $conf;
+ if (empty($params) && isset($conf['kolab']['ldap'])) {
+ $params = $conf['kolab']['ldap'];
+ }
+
+ ksort($params);
+ $signature = hash('md5', serialize($params));
if (!isset(self::$_instances[$signature])) {
- $params['cache'] = Horde_Cache::singleton(
- $GLOBALS['conf']['cache']['driver'],
- //@todo: Can we omit Horde:: here?
- Horde::getDriverConfig(
- 'cache',
- $GLOBALS['conf']['cache']['driver']
- )
- );
+ /** @todo: The caching decorator is still missing.
+/* $params['cache'] = Horde_Cache::singleton( */
+/* $GLOBALS['conf']['cache']['driver'], */
+/* //@todo: Can we omit Horde:: here? */
+/* Horde::getDriverConfig( */
+/* 'cache', */
+/* $GLOBALS['conf']['cache']['driver'] */
+/* ) */
+/* ); */
$params['logger'] = Horde::getLogger();
$injector = new Horde_Injector(new Horde_Injector_TopLevel());
- self::setup($params, $injector);
+ self::setup($injector, $params);
self::$_instances[$signature] = $injector->getInstance(
'Horde_Kolab_Server'
);
}
-/* if (empty($this->_ldap_read)) { */
-/* $this->handleError( */
-/* Net_LDAP2::checkLDAPExtension(), */
-/* Horde_Kolab_Server_Exception::MISSING_LDAP_EXTENSION */
-/* ); */
-
-/* $this->_ldap_read = new Net_LDAP2($this->params); */
-
-/* if (isset($this->params['host_master']) */
-/* && $this->params['host_master'] == $this->params['host'] */
-/* ) { */
-
-/* $params = $this->params; */
-/* $params['host'] = $this->params['host_master']; */
-
-/* $this->_ldap_write = new Net_LDAP2($params); */
-/* } else { */
-/* $this->_ldap_write = $this->_ldap_read; */
-/* } */
-/* } */
-
-/* if ($write) { */
-/* return $this->_ldap_write; */
-/* } else { */
-/* return $this->_ldap_read; */
-/* } */
-
return self::$_instances[$signature];
}
}
\ No newline at end of file
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php
index 0e76479ef..cf5d7862a 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Ldap.php
@@ -59,11 +59,15 @@ abstract class Horde_Kolab_Server_Ldap implements Horde_Kolab_Server
*/
public function __construct(
Horde_Kolab_Server_Connection $connection,
- $base_dn,
- $filter = null
+ $base_dn
) {
$this->_conn = $connection;
$this->_base_dn = $base_dn;
+
+ $this->_handleError(
+ Net_LDAP2::checkLDAPExtension(),
+ Horde_Kolab_Server_Exception::MISSING_LDAP_EXTENSION
+ );
}
/**
@@ -190,11 +194,11 @@ abstract class Horde_Kolab_Server_Ldap implements Horde_Kolab_Server
*/
public function save(Horde_Kolab_Server_Object $object, array $data)
{
+ $changes = new Horde_Kolab_Server_Ldap_Changes($object, $data);
$entry = $this->_conn->getWrite()->getEntry(
$object->getGuid(), array_keys($data)
);
$this->_handleError($entry, Horde_Kolab_Server_Exception::SYSTEM);
- $changes = new Horde_Kolab_Server_Ldap_Changes($object, $data);
$this->_handleError(
$this->_conn->getWrite()->modify($entry, $changes->getChangeset()),
Horde_Kolab_Server_Exception::SYSTEM
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/List/Base.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/List/Base.php
index 2c5785650..e70abd263 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/List/Base.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/List/Base.php
@@ -64,7 +64,7 @@ class Horde_Kolab_Server_List_Base implements Horde_Kolab_Server_List
}
if ($sort) {
- /* FIXME */
+ /* @todo: sorting */
/* $data = $result->as_sorted_struct(); */
/*$this->sort($result, $sort); */
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Logged.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Logged.php
index fdd194b32..1644b88e6 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Logged.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Logged.php
@@ -45,12 +45,11 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
* Constructor.
*
* @param Horde_Kolab_Server $server The base server connection.
- * @param Horde_Log_Logger $logger THe log handler.
+ * @param mixed $logger The log handler. The class must at
+ * least provide the info() method.
*/
- public function __construct(
- Horde_Kolab_Server $server,
- Horde_Log_Logger $logger
- ) {
+ public function __construct(Horde_Kolab_Server $server, $logger)
+ {
$this->_server = $server;
$this->_logger = $logger;
}
@@ -67,7 +66,22 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
*/
public function connectGuid($guid = null, $pass = null)
{
- $this->_server->connectGuid($guid, $pass);
+ try {
+ $this->_server->connectGuid($guid, $pass);
+ $this->_logger->info(
+ sprintf(
+ "Successfully connected to the Kolab Server as \"%s\".",
+ $guid
+ )
+ );
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->_logger->info(
+ sprintf(
+ "Failed saving object \"%s\"! Error: %s",
+ $object->getGuid(), $e->getMessage()
+ )
+ );
+ }
}
/**
@@ -172,13 +186,23 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
*/
public function save(Horde_Kolab_Server_Object $object, array $data)
{
- $this->_server->save($object, $data);
- $this->_logger->info(
- sprintf(
- "The object \"%s\" has been successfully saved!",
- $object->getGuid()
- )
- );
+ try {
+ $this->_server->save($object, $data);
+ $this->_logger->info(
+ sprintf(
+ "The object \"%s\" has been successfully saved!",
+ $object->getGuid()
+ )
+ );
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->_logger->info(
+ sprintf(
+ "Failed saving object \"%s\"! Error: %s",
+ $object->getGuid(), $e->getMessage()
+ )
+ );
+
+ }
}
/**
@@ -194,13 +218,23 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
*/
public function add(Horde_Kolab_Server_Object $object, array $data)
{
- $this->_server->add($object, $data);
- $this->_logger->info(
- sprintf(
- "The object \"%s\" has been successfully added!",
- $object->getGuid()
- )
- );
+ try {
+ $this->_server->add($object, $data);
+ $this->_logger->info(
+ sprintf(
+ "The object \"%s\" has been successfully added!",
+ $object->getGuid()
+ )
+ );
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->_logger->info(
+ sprintf(
+ "Failed adding object \"%s\"! Error: %s",
+ $object->getGuid(), $e->getMessage()
+ )
+ );
+
+ }
}
/**
@@ -214,10 +248,21 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
*/
public function delete($guid)
{
- $this->_server->delete($guid);
- $this->_logger->info(
- sprintf("The object \"%s\" has been successfully deleted!", $guid)
- );
+ try {
+ $this->_server->delete($guid);
+ $this->_logger->info(
+ sprintf("The object \"%s\" has been successfully deleted!", $guid)
+ );
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->_logger->info(
+ sprintf(
+ "Failed deleting object \"%s\"! Error: %s",
+ $object->getGuid(), $e->getMessage()
+ )
+ );
+
+ }
+
}
/**
@@ -232,13 +277,23 @@ class Horde_Kolab_Server_Logged implements Horde_Kolab_Server
*/
public function rename($guid, $new)
{
- $this->_server->rename($guid, $new);
- $this->_logger->info(
- sprintf(
- "The object \"%s\" has been successfully renamed to \"%s\"!",
- $guid, $new
- )
- );
+ try {
+ $this->_server->rename($guid, $new);
+ $this->_logger->info(
+ sprintf(
+ "The object \"%s\" has been successfully renamed to \"%s\"!",
+ $guid, $new
+ )
+ );
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->_logger->info(
+ sprintf(
+ "Failed saving object \"%s\"! Error: %s",
+ $object->getGuid(), $e->getMessage()
+ )
+ );
+
+ }
}
/**
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Mapped.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Mapped.php
index 456653edb..2bdc92a50 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Mapped.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Mapped.php
@@ -153,8 +153,10 @@ class Horde_Kolab_Server_Mapped implements Horde_Kolab_Server
*
* @throws Horde_Kolab_Server_Exception
*/
- public function find(array $criteria, array $params = array())
- {
+ public function find(
+ Horde_Kolab_Server_Query_Element $criteria,
+ array $params = array()
+ ) {
$criteria = new Horde_Kolab_Server_Query_Element_Mapped($criteria, $this);
$data = $this->_server->find($criteria, $params);
$this->unmapAttributes($data);
@@ -172,8 +174,11 @@ class Horde_Kolab_Server_Mapped implements Horde_Kolab_Server
*
* @throws Horde_Kolab_Server_Exception
*/
- public function findBelow(array $criteria, $parent, array $params = array())
- {
+ public function findBelow(
+ Horde_Kolab_Server_Query_Element $criteria,
+ $parent,
+ array $params = array()
+ ) {
$criteria = new Horde_Kolab_Server_Query_Element_Mapped($criteria, $this);
$data = $this->_server->findBelow($criteria, $parent, $params);
$this->unmapAttributes($data);
@@ -191,10 +196,12 @@ class Horde_Kolab_Server_Mapped implements Horde_Kolab_Server
*
* @throws Horde_Kolab_Server_Exception
*/
- public function save($guid, array $data)
+ public function save(Horde_Kolab_Server_Object $object, array $data)
{
+ //@todo: This will not work this way as we need to map internal
+ // attributes.
$this->mapAttributes($data);
- $this->_server->save($guid, $data);
+ $this->_server->save($object, $data);
}
/**
@@ -207,10 +214,12 @@ class Horde_Kolab_Server_Mapped implements Horde_Kolab_Server
*
* @throws Horde_Kolab_Server_Exception
*/
- public function add($guid, array $data)
+ public function add(Horde_Kolab_Server_Object $object, array $data)
{
+ //@todo: This will not work this way as we need to map internal
+ // attributes.
$this->mapAttributes($data);
- $this->_server->add($guid, $data);
+ $this->_server->add($object, $data);
}
/**
@@ -326,4 +335,16 @@ class Horde_Kolab_Server_Mapped implements Horde_Kolab_Server
}
return $field;
}
+
+ /**
+ * Get the parent GUID of this object.
+ *
+ * @param string $guid The GUID of the child.
+ *
+ * @return string the parent GUID of this object.
+ */
+ public function getParentGuid($guid)
+ {
+ return $this->_server->getParentGuid($guid);
+ }
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php
index 93248fb65..bd13a29e1 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object.php
@@ -109,13 +109,6 @@ interface Horde_Kolab_Server_Object
public function delete();
/**
- * Returns the set of actions supported by this object type.
- *
- * @return array An array of supported actions.
- */
- public function getActions();
-
- /**
* Generates an ID for the given information.
*
* @param array &$info The data of the object.
@@ -135,4 +128,11 @@ interface Horde_Kolab_Server_Object
*/
public function prepareObjectInformation(array &$info);
+ /**
+ * Returns the set of actions supported by this object type.
+ *
+ * @return array An array of supported actions.
+ */
+ public function getActions();
+
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Base.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Base.php
index e56315e52..17e6d149a 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Base.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Base.php
@@ -159,6 +159,7 @@ implements Horde_Kolab_Server_Object
$class = 'Horde_Kolab_Server_Object_Attribute_' . $attr;
if (!in_array($attr, $this->getExternalAttributes())
|| !class_exists($class)) {
+ //@todo: Consider support for external classes.
throw new Horde_Kolab_Server_Exception(
sprintf("Attribute \"%s\" not supported!", $attr)
);
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Groupofnames.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Groupofnames.php
index 588478a22..ad68cdeb6 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Groupofnames.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Groupofnames.php
@@ -127,7 +127,7 @@ class Horde_Kolab_Server_Object_Groupofnames extends Horde_Kolab_Server_Object_T
{
$members = $this->getMembers();
if (in_array($member, $members)) {
- //FIXME: As the member attribute is required we may not remove the last member
+ //@todo: As the member attribute is required we may not remove the last member
$this->_cache[self::ATTRIBUTE_MEMBER] =
array_diff($this->_cache[self::ATTRIBUTE_MEMBER],
array($member));
@@ -175,7 +175,7 @@ class Horde_Kolab_Server_Object_Groupofnames extends Horde_Kolab_Server_Object_T
}
/**
- * FIXME: This method belongs somewhere where we are aware of groups
+ * @todo: This method belongs somewhere where we are aware of groups
* Identify the GID for the first group found using the specified
* search criteria
*
@@ -187,7 +187,7 @@ class Horde_Kolab_Server_Object_Groupofnames extends Horde_Kolab_Server_Object_T
* @throws Horde_Kolab_Server_Exception
*/
static public function gidForSearch($server, $criteria,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$groups = array('field' => self::ATTRIBUTE_OC,
'op' => '=',
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/Domainmaintainer.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/Domainmaintainer.php
index 6db3c0844..e831975a1 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/Domainmaintainer.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/Domainmaintainer.php
@@ -84,7 +84,7 @@ class Horde_Kolab_Server_Object_Kolab_Domainmaintainer extends Horde_Kolab_Serve
$domain_uid = sprintf('cn=%s,cn=domain,cn=internal,%s',
$domain, $this->server->getBaseUid());
- //FIXME: This should be made easier by the group object
+ //@todo: This should be made easier by the group object
$domain_group = $this->server->fetch($domain_uid, 'Horde_Kolab_Server_Object_Kolabgroupofnames');
if ($domain_group instanceOf PEAR_Error) {
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/User.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/User.php
index cbdc7f933..344afdaa6 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/User.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolab/User.php
@@ -131,7 +131,7 @@ class Horde_Kolab_Server_Object_Kolab_User extends Horde_Kolab_Server_Object_Kol
/**
* Get the "first name" attribute of this object
*
- * FIXME: This should get refactored to be combined with the Id value.
+ * @todo: This should get refactored to be combined with the Id value.
*
* @return string the "first name" of this object
*/
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgroupofnames.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgroupofnames.php
index bfc88bfc3..d32071765 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgroupofnames.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabgroupofnames.php
@@ -180,7 +180,7 @@ class Horde_Kolab_Server_Object_Kolabgroupofnames extends Horde_Kolab_Server_Obj
* @throws Horde_Kolab_Server_Exception
*/
static public function gidForMail($server, $mail,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$criteria = array('AND' => array(array('field' => self::ATTRIBUTE_MAIL,
'op' => '=',
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabinetorgperson.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabinetorgperson.php
index 9e891a9a6..b3d03e357 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabinetorgperson.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Kolabinetorgperson.php
@@ -404,7 +404,7 @@ class Horde_Kolab_Server_Object_Kolabinetorgperson extends Horde_Kolab_Server_Ob
* @throws Horde_Kolab_Server_Exception
*/
static public function uidForSearch($server, $criteria,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$users = array('field' => self::ATTRIBUTE_OC,
'op' => '=',
@@ -429,7 +429,7 @@ class Horde_Kolab_Server_Object_Kolabinetorgperson extends Horde_Kolab_Server_Ob
* @throws Horde_Kolab_Server_Exception
*/
static public function uidForId($server, $id,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$criteria = array('AND' => array(array('field' => self::ATTRIBUTE_SID,
'op' => '=',
@@ -451,7 +451,7 @@ class Horde_Kolab_Server_Object_Kolabinetorgperson extends Horde_Kolab_Server_Ob
* @throws Horde_Kolab_Server_Exception
*/
static public function uidForMail($server, $mail,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$criteria = array('AND' => array(array('field' => self::ATTRIBUTE_MAIL,
'op' => '=',
@@ -498,7 +498,7 @@ class Horde_Kolab_Server_Object_Kolabinetorgperson extends Horde_Kolab_Server_Ob
* @throws Horde_Kolab_Server_Exception
*/
static public function uidForAlias($server, $mail,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$criteria = array('AND' => array(array('field' => self::ATTRIBUTE_ALIAS,
'op' => '=',
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Person.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Person.php
index 0344eb539..469347b00 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Person.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Person.php
@@ -27,23 +27,6 @@
*/
class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
{
- /** Define attributes specific to this object type */
-
- /** The common name */
- const ATTRIBUTE_CN = 'cn';
-
- /** The surname */
- const ATTRIBUTE_SN = 'sn';
-
- /** A password for this person */
- const ATTRIBUTE_USERPASSWORD = 'userPassword';
-
- /** A password for this person */
- const ATTRIBUTE_USERPASSWORDRAW = 'userPasswordRaw';
-
- /** A telephone number for this person */
- const ATTRIBUTE_TELNO = 'telephoneNumber';
-
/** The specific object class of this object type */
const OBJECTCLASS_PERSON = 'person';
@@ -53,36 +36,37 @@ class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
* @var array
*/
static public $init_attributes = array(
- 'defined' => array(
- self::ATTRIBUTE_CN,
- self::ATTRIBUTE_SN,
- self::ATTRIBUTE_USERPASSWORD,
- self::ATTRIBUTE_TELNO,
- ),
- 'derived' => array(
- self::ATTRIBUTE_USERPASSWORD => array(
- 'base' => array(
- self::ATTRIBUTE_USERPASSWORD
- ),
- 'method' => 'getEmpty',
- ),
- self::ATTRIBUTE_USERPASSWORDRAW => array(
- 'base' => array(
- self::ATTRIBUTE_USERPASSWORD
- ),
- 'method' => '_get',
- 'args' => array(
- self::ATTRIBUTE_USERPASSWORD,
- ),
- ),
- ),
- 'required' => array(
- self::ATTRIBUTE_CN,
- self::ATTRIBUTE_SN,
- ),
- 'object_classes' => array(
- self::OBJECTCLASS_PERSON
- ),
+ 'Cn', 'Sn', 'Userpassword', 'Userpasswordraw', 'Telephonenumber'
+/* 'defined' => array( */
+/* self::ATTRIBUTE_CN, */
+/* self::ATTRIBUTE_SN, */
+/* self::ATTRIBUTE_USERPASSWORD, */
+/* self::ATTRIBUTE_TELNO, */
+/* ), */
+/* 'derived' => array( */
+/* self::ATTRIBUTE_USERPASSWORD => array( */
+/* 'base' => array( */
+/* self::ATTRIBUTE_USERPASSWORD */
+/* ), */
+/* 'method' => 'getEmpty', */
+/* ), */
+/* self::ATTRIBUTE_USERPASSWORDRAW => array( */
+/* 'base' => array( */
+/* self::ATTRIBUTE_USERPASSWORD */
+/* ), */
+/* 'method' => '_get', */
+/* 'args' => array( */
+/* self::ATTRIBUTE_USERPASSWORD, */
+/* ), */
+/* ), */
+/* ), */
+/* 'required' => array( */
+/* self::ATTRIBUTE_CN, */
+/* self::ATTRIBUTE_SN, */
+/* ), */
+/* 'object_classes' => array( */
+/* self::OBJECTCLASS_PERSON */
+/* ), */
);
/**
@@ -165,12 +149,10 @@ class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
*/
public static function getFilter()
{
- $criteria = array('AND' => array(array('field' => self::ATTRIBUTE_OC,
- 'op' => '=',
- 'test' => self::OBJECTCLASS_PERSON),
- ),
+ return new Horde_Kolab_Server_Query_Element_Equals(
+ Horde_Kolab_Server_Object_Attribute_Objectclass::NAME,
+ self::OBJECTCLASS_PERSON
);
- return $criteria;
}
/**
@@ -184,28 +166,30 @@ class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
*/
public function generateId(array &$info)
{
+ $cn = Horde_Kolab_Server_Object_Attribute_Cn::NAME;
+ $sn = Horde_Kolab_Server_Object_Attribute_Sn::NAME;
if ($this->exists()) {
- if (!isset($info[self::ATTRIBUTE_CN])
- && !isset($info[self::ATTRIBUTE_SN])) {
- return false;
+ if (!isset($info[$cn])
+ && !isset($info[$sn])) {
+ return $this->getGuid();
}
- if (!isset($info[self::ATTRIBUTE_CN])) {
- $old = $this->get(self::ATTRIBUTE_CN);
+ if (!isset($info[$cn])) {
+ $old = $this->getInternal($cn);
if (!empty($old)) {
- return false;
+ return $this->getGuid();
}
}
}
- if (!empty($info[self::ATTRIBUTE_CN])) {
- $id = $info[self::ATTRIBUTE_CN];
+ if (!empty($info[$cn])) {
+ $id = $info[$cn];
} else {
- $id = $info[self::ATTRIBUTE_SN];
+ $id = $info[$sn];
}
if (is_array($id)) {
$id = $id[0];
}
- return self::ATTRIBUTE_CN . '=' . $this->server->structure->quoteForUid($id);
+ return $cn . '=' . $this->server->structure->quoteForUid($id);
}
/**
@@ -219,10 +203,10 @@ class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
*/
public function prepareObjectInformation(array &$info)
{
- if (!$this->exists()
- && empty($info[self::ATTRIBUTE_CN])
- && !empty($info[self::ATTRIBUTE_SN])) {
- $info[self::ATTRIBUTE_CN] = $info[self::ATTRIBUTE_SN];
+ $cn = Horde_Kolab_Server_Object_Attribute_Cn::NAME;
+ $sn = Horde_Kolab_Server_Object_Attribute_Sn::NAME;
+ if (!$this->exists() && empty($info[$cn]) && !empty($info[$sn])) {
+ $info[$cn] = $info[$sn];
}
if (!empty($info[self::ATTRIBUTE_USERPASSWORD])) {
@@ -258,7 +242,7 @@ class Horde_Kolab_Server_Object_Person extends Horde_Kolab_Server_Object_Top
* @throws Horde_Kolab_Server_Exception
*/
static public function uidForCn($server, $cn,
- $restrict = Horde_Kolab_Server_Object::RESULT_SINGLE)
+ $restrict = 0)
{
$criteria = array('AND' => array(array('field' => self::ATTRIBUTE_CN,
'op' => '=',
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Top.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Top.php
index bac365bad..21cabf950 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Top.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Object/Top.php
@@ -27,7 +27,7 @@
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_Top
+abstract class Horde_Kolab_Server_Object_Top
extends Horde_Kolab_Server_Object_Base
implements Horde_Kolab_Server_Object_Searches
{
@@ -73,30 +73,6 @@ implements Horde_Kolab_Server_Object_Searches
}
/**
- * Generates an ID for the given information.
- *
- * @param array &$info The data of the object.
- *
- * @return string The ID.
- */
- public function generateId(array &$info)
- {
- if ($this->exists() && empty($info['Id'])) {
- return false;
- }
-
- if (!empty($info['Id'])) {
- if (is_array($info['Id'])) {
- $id = $info['Id'][0];
- } else {
- $id = $info['Id'];
- }
- return $this->_composite->server->quoteForGuid($id);
- }
- return $this->composite->server->quoteForGuid(hash('sha256', uniqid(mt_rand(), true)));
- }
-
- /**
* Distill the server side object information to save.
*
* @param array &$info The information about the object.
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Objects/Base.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Objects/Base.php
index d2edfca77..36a242367 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Objects/Base.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Objects/Base.php
@@ -29,20 +29,23 @@
class Horde_Kolab_Server_Objects_Base implements Horde_Kolab_Server_Objects
{
/**
- * A link to the server handler.
+ * A link to the composite server handler.
*
- * @var Horde_Kolab_Server
+ * @var Horde_Kolab_Server_Composite
*/
- protected $server;
+ protected $composite;
/**
- * Set the server reference for this object.
+ * Set the composite server reference for this object.
*
- * @param Horde_Kolab_Server &$server A link to the server handler.
+ * @param Horde_Kolab_Server_Composite $composite A link to the composite
+ * server handler.
+ *
+ * @return NULL
*/
- public function setServer($server)
+ public function setComposite(Horde_Kolab_Server_Composite $composite)
{
- $this->server = $server;
+ $this->composite = $composite;
}
/**
@@ -204,7 +207,7 @@ class Horde_Kolab_Server_Objects_Base implements Horde_Kolab_Server_Objects
}
if ($sort) {
- /* FIXME */
+ /* @todo: sorting */
/* $data = $result->as_sorted_struct(); */
/*$this->sort($result, $sort); */
}
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Schema/Base.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Schema/Base.php
index 9ed27a7f4..4193e93c9 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Schema/Base.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Schema/Base.php
@@ -39,20 +39,23 @@ class Horde_Kolab_Server_Schema_Base implements Horde_Kolab_Server_Schema
protected $attributes;
/**
- * A link to the server handler.
+ * A link to the composite server handler.
*
- * @var Horde_Kolab_Server
+ * @var Horde_Kolab_Server_Composite
*/
- protected $server;
+ protected $composite;
/**
- * Set the server reference for this object.
+ * Set the composite server reference for this object.
*
- * @param Horde_Kolab_Server &$server A link to the server handler.
+ * @param Horde_Kolab_Server_Composite $composite A link to the composite
+ * server handler.
+ *
+ * @return NULL
*/
- public function setServer($server)
+ public function setComposite(Horde_Kolab_Server_Composite $composite)
{
- $this->server = $server;
+ $this->composite = $composite;
}
/**
@@ -104,7 +107,7 @@ class Horde_Kolab_Server_Schema_Base implements Horde_Kolab_Server_Schema
*
* @throws Horde_Kolab_Server_Exception If the schema analysis fails.
*/
- public function &getAttributes($class)
+ public function getExternalAttributes($class)
{
if (!isset($this->attributes)) {
if (isset($this->cache)) {
@@ -253,6 +256,10 @@ class Horde_Kolab_Server_Schema_Base implements Horde_Kolab_Server_Schema
return $this->attributes[$class];
}
+ public function getInternalAttributes($class)
+ {
+ }
+
/**
* Stores the attribute definitions in the cache.
*
diff --git a/framework/Kolab_Server/lib/Horde/Kolab/Server/Structure/Ldap.php b/framework/Kolab_Server/lib/Horde/Kolab/Server/Structure/Ldap.php
index f3c0499e8..3e1639eb4 100644
--- a/framework/Kolab_Server/lib/Horde/Kolab/Server/Structure/Ldap.php
+++ b/framework/Kolab_Server/lib/Horde/Kolab/Server/Structure/Ldap.php
@@ -72,7 +72,7 @@ class Horde_Kolab_Server_Structure_Ldap extends Horde_Kolab_Server_Structure_Bas
foreach ($ocs as $oc) {
try {
$class_name = 'Horde_Kolab_Server_Object_' . ucfirst(strtolower($oc));
- Horde_Kolab_Server_Object::loadClass($class_name);
+ Horde_Kolab_Server_Object_Factory::loadClass($class_name);
return $class_name;
} catch (Horde_Kolab_Server_Exception $e) {
}
diff --git a/framework/Kolab_Server/package.xml b/framework/Kolab_Server/package.xml
index 3ad9d2802..2c3f1345d 100644
--- a/framework/Kolab_Server/package.xml
+++ b/framework/Kolab_Server/package.xml
@@ -64,6 +64,11 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
+
+
+
+
@@ -75,12 +80,11 @@ http://pear.php.net/dtd/package-2.0.xsd">
-
-
+
@@ -104,6 +108,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
@@ -183,14 +188,13 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
-
-
+
-
@@ -198,12 +202,21 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
+
+
+
+
+
+
+
+
@@ -211,7 +224,6 @@ http://pear.php.net/dtd/package-2.0.xsd">
-
@@ -220,8 +232,6 @@ http://pear.php.net/dtd/package-2.0.xsd">
-
-
@@ -266,6 +276,9 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
+
+
@@ -273,11 +286,10 @@ http://pear.php.net/dtd/package-2.0.xsd">
-
-
+
@@ -298,6 +310,7 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
@@ -349,35 +362,36 @@ http://pear.php.net/dtd/package-2.0.xsd">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
-
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Autoload.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Autoload.php
index b1d01ba36..780b43c8c 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Autoload.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Autoload.php
@@ -18,10 +18,8 @@ if (!spl_autoload_functions()) {
'$filename = str_replace(array(\'::\', \'_\'), \'/\', $class);'
. '$err_mask = E_ALL ^ E_WARNING;'
. '$oldErrorReporting = error_reporting($err_mask);'
- . '$included = include "$filename.php";'
+ . 'include "$filename.php";'
. 'error_reporting($oldErrorReporting);'
)
);
-}
-
-require_once dirname(__FILE__) . '/Scenario.php';
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Connection/MockTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Connection/MockTest.php
new file mode 100644
index 000000000..6801ca533
--- /dev/null
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Connection/MockTest.php
@@ -0,0 +1,235 @@
+
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+
+/**
+ * Require our basic test case definition
+ */
+require_once dirname(__FILE__) . '/../LdapBase.php';
+
+/**
+ * Test the test backend.
+ *
+ * Copyright 2008-2009 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package Kolab_Server
+ * @author Gunnar Wrobel
+ * @license http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link http://pear.horde.org/index.php?package=Kolab_Server
+ */
+class Horde_Kolab_Server_Connection_MockTest extends Horde_Kolab_Server_LdapBase
+{
+
+ /**
+ * Test parsing of LDAP filters.
+ *
+ * @return NULL
+ */
+ public function testFilterParse()
+ {
+ $conn = new Horde_Kolab_Server_Connection_Mock(array());
+
+ $a = $conn->parse('(a=b)');
+ $this->assertEquals(array('att' => 'a', 'log' => '=', 'val' => 'b'),
+ $a);
+
+ $a = $conn->parse('(&(a=b)(c=d))');
+ $this->assertEquals(array('op' => '&', 'sub' => array(
+ array('att' => 'a', 'log' => '=', 'val' => 'b'),
+ array('att' => 'c', 'log' => '=', 'val' => 'd'),
+ )), $a);
+
+ $a = $conn->parse('(&(a=1)(|(b=2)(c=3)))');
+ $this->assertEquals(array('op' => '&', 'sub' => array(
+ array('att' => 'a', 'log' => '=', 'val' => '1'),
+ array('op' => '|', 'sub' =>
+ array(
+ array('att' => 'b', 'log' => '=', 'val' => '2'),
+ array('att' => 'c', 'log' => '=', 'val' => '3'),
+ )))), $a);
+
+ $a = $conn->parseSub('(!(x=2))(b=1)');
+ $this->assertEquals(array(array('op' => '!', 'sub' =>
+ array(
+ array('att' => 'x', 'log' => '=', 'val' => '2'),
+ )
+ ),
+ array('att' => 'b', 'log' => '=', 'val' => '1'),
+ ), $a);
+
+ $a = $conn->parse('(&(!(x=2))(b=1))');
+ $this->assertEquals(array('op' => '&', 'sub' => array(
+ array('op' => '!', 'sub' =>
+ array(
+ array('att' => 'x', 'log' => '=', 'val' => '2'),
+ )
+ ),
+ array('att' => 'b', 'log' => '=', 'val' => '1'),
+ )), $a);
+
+ }
+
+ /**
+ * Test searching in the simulated LDAP data.
+ *
+ * @return NULL
+ */
+ public function testSearch()
+ {
+ $conn = new Horde_Kolab_Server_Connection_Mock(
+ array(
+ 'data' =>
+ array(
+ 'cn=a' => array(
+ 'dn' => 'cn=a',
+ 'data' => array(
+ 'a' => '1',
+ 'b' => '1',
+ 'c' => '1',
+ )
+ ),
+ 'cn=b' => array(
+ 'dn' => 'cn=b',
+ 'data' => array(
+ 'a' => '1',
+ 'b' => '2',
+ 'c' => '2',
+ )
+ ),
+ 'cn=c' => array(
+ 'dn' => 'cn=c',
+ 'data' => array(
+ 'a' => '1',
+ 'b' => '2',
+ 'c' => '3',
+ )
+ ),
+ 'cn=d' => array(
+ 'dn' => 'cn=d',
+ 'data' => array(
+ 'a' => '2',
+ 'b' => '2',
+ 'c' => '1',
+ )
+ ),
+ )
+ )
+ );
+
+ $a = $conn->search(null, '(c=1)');
+ $this->assertEquals(
+ array(
+ 'cn=a' => array(
+ 'a' => '1',
+ 'b' => '1',
+ 'c' => '1',
+ 'dn' => 'cn=a',
+ ),
+ 'cn=d' => array(
+ 'a' => '2',
+ 'b' => '2',
+ 'c' => '1',
+ 'dn' => 'cn=d',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(c=3)');
+ $this->assertEquals(
+ array(
+ 'cn=c' => array(
+ 'a' => '1',
+ 'b' => '2',
+ 'c' => '3',
+ 'dn' => 'cn=c',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(c=3)', array('attributes' => array('a')));
+ $this->assertEquals(
+ array(
+ 'cn=c' => array(
+ 'a' => '1',
+ 'dn' => 'cn=c',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(&(a=1)(b=2))', array('attributes' => array('a', 'b')));
+ $this->assertEquals(
+ array(
+ 'cn=b' => array(
+ 'a' => '1',
+ 'b' => '2',
+ 'dn' => 'cn=b',
+ ),
+ 'cn=c' => array(
+ 'a' => '1',
+ 'b' => '2',
+ 'dn' => 'cn=c',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(&(b=2))', array('attributes' => array('b')));
+ $this->assertEquals(
+ array(
+ 'cn=b' => array(
+ 'b' => '2',
+ 'dn' => 'cn=b',
+ ),
+ 'cn=c' => array(
+ 'b' => '2',
+ 'dn' => 'cn=c',
+ ),
+ 'cn=d' => array(
+ 'b' => '2',
+ 'dn' => 'cn=d',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(!(b=2))', array('attributes' => array('a', 'b')));
+ $this->assertEquals(
+ array(
+ 'cn=a' => array(
+ 'a' => '1',
+ 'b' => '1',
+ 'dn' => 'cn=a',
+ ),
+ ),
+ $a->as_struct()
+ );
+
+ $a = $conn->search(null, '(&(!(x=2))(b=1))', array('attributes' => array('b')));
+ $this->assertEquals(
+ array(
+ 'cn=a' => array(
+ 'b' => '1',
+ 'dn' => 'cn=a',
+ ),
+ ),
+ $a->as_struct()
+ );
+ }
+
+}
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/AddingObjectsTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AddingObjectsTest.php
similarity index 86%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/AddingObjectsTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AddingObjectsTest.php
index d0cfe0786..da7370250 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/AddingObjectsTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AddingObjectsTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Adding objects to the server.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_AddingObjectsTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_AddingObjectsTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Test adding valid users.
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/AdminTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AdminTest.php
similarity index 94%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/AdminTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AdminTest.php
index 1503cfb3a..1f4ab274e 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/AdminTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/AdminTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the admin object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_AdminTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_AdminTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/DistListHandlingTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/DistListHandlingTest.php
similarity index 85%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/DistListHandlingTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/DistListHandlingTest.php
index dbc4693e5..3a1bb87ee 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/DistListHandlingTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/DistListHandlingTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Handling distribution lists.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_DistListHandlingTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_DistListHandlingTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupHandlingTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupHandlingTest.php
similarity index 98%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupHandlingTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupHandlingTest.php
index 1dd05c8a5..460f7d359 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupHandlingTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupHandlingTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Handling groups.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_GroupHandlingTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_GroupHandlingTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Test listing groups if there are no groups.
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupTest.php
similarity index 95%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupTest.php
index 698257ebc..bf0fdb0de 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/GroupTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/GroupTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the group object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_GroupTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_GroupTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/InetorgpersonTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/InetorgpersonTest.php
similarity index 93%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/InetorgpersonTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/InetorgpersonTest.php
index 157238bb4..1fb72f61e 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/InetorgpersonTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/InetorgpersonTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the inetOrgPerson object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_InetorgpersonTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_InetorgpersonTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Objects used within this test
@@ -42,22 +42,22 @@ class Horde_Kolab_Server_Object_InetorgpersonTest extends Horde_Kolab_Server_Sce
array(
'type' => 'Horde_Kolab_Server_Object_Inetorgperson',
Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
- Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_SN => 'Mustermann',
- Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Mustermann',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Invalid person (no sn) */
array(
'type' => 'Horde_Kolab_Server_Object_Inetorgperson',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_OrgPersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Cn' => 'Kolab_Server_OrgPersonTest_123',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Person with middle names */
array(
'type' => 'Horde_Kolab_Server_Object_Inetorgperson',
Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_MIDDLENAMES => 'Günter Eloic',
- Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_SN => 'Mustermann',
- Horde_Kolab_Server_Object_Inetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Mustermann',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
);
@@ -192,7 +192,7 @@ class Horde_Kolab_Server_Object_InetorgpersonTest extends Horde_Kolab_Server_Sce
*/
public function testHandlingHomePostalAddress()
{
- //FIXME
+ //@todo
}
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabgermanbankarrangementTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabgermanbankarrangementTest.php
similarity index 94%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabgermanbankarrangementTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabgermanbankarrangementTest.php
index 3cf9637d2..39fc2a0a4 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabgermanbankarrangementTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabgermanbankarrangementTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the kolabGermanBankArrangement object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_KolabgermanbankarrangementTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_KolabgermanbankarrangementTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Objects used within this test
@@ -42,8 +42,8 @@ class Horde_Kolab_Server_Object_KolabgermanbankarrangementTest extends Horde_Kol
array(
'type' => 'Horde_Kolab_Server_Object_Kolabinetorgperson',
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN => 'Mustermann',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Mustermann',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Default account */
array(
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabinetorgpersonTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabinetorgpersonTest.php
similarity index 92%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabinetorgpersonTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabinetorgpersonTest.php
index 54584220b..6a3a0a969 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/KolabinetorgpersonTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/KolabinetorgpersonTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the kolabInetOrgPerson object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_KolabinetorgpersonTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Objects used within this test
@@ -42,14 +42,14 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
array(
'type' => 'Horde_Kolab_Server_Object_Kolabinetorgperson',
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN => 'Mustermann',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Mustermann',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Invalid person (no sn) */
array(
'type' => 'Horde_Kolab_Server_Object_Kolabinetorgperson',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_OrgPersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Cn' => 'Kolab_Server_OrgPersonTest_123',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
);
@@ -171,7 +171,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_COUNTRYCITIZENSHIP => array(
'DE',
'SE',
- //FIXME: "null" does not work. Why?
+ //@todo: "null" does not work. Why?
//null,
'DE',
),
@@ -181,7 +181,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
null,
'Freelancer',
),
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_REGISTEREDCAPITAL => array( */
/* '1212121211', */
/* '0', */
@@ -189,7 +189,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* '' */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_BYLAWURI => array( */
/* 'something', */
/* 'somewhere', */
@@ -198,12 +198,12 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* '', */
/* ), */
- //FIXME: Alias support
+ //@todo: Alias support
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_DATEOFINCORPORATION => array( */
/* '199911220707Z', */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_LEGALREPRESENTATIONPOLICY => array( */
/* 'something', */
/* 'somewhere', */
@@ -219,7 +219,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
array('a', 'b'),
),
- //FIXME: Undefined
+ //@todo: Undefined
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_OTHERLEGAL => array( */
/* 'something', */
/* 'somewhere', */
@@ -227,7 +227,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* array('a', 'b'), */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_INLIQUIDATION => array( */
/* 'TRUE', */
/* 'FALSE', */
@@ -235,7 +235,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* array('TRUE', 'FALSE'), */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_TRTYPE => array( */
/* 'something', */
/* 'somewhere', */
@@ -257,7 +257,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
'somewhere',
),
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_TRURI => array( */
/* 'something', */
/* 'somewhere', */
@@ -265,7 +265,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* array('a', 'b'), */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_TRLASTCHANGED => array( */
/* 'something', */
/* 'somewhere', */
@@ -273,7 +273,7 @@ class Horde_Kolab_Server_Object_KolabinetorgpersonTest extends Horde_Kolab_Serve
/* array('a', 'b'), */
/* ), */
- // FIXME: Undefined in object class
+ // @todo: Undefined in object class
/* Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_DC => array( */
/* 'something', */
/* 'somewhere', */
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/Kolabpop3accountTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Kolabpop3accountTest.php
similarity index 95%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/Kolabpop3accountTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Kolabpop3accountTest.php
index 6aa372653..084d6a138 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/Kolabpop3accountTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Kolabpop3accountTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the kolabExternalPop3Account object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_Kolabpop3accountTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_Kolabpop3accountTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Objects used within this test
@@ -42,8 +42,8 @@ class Horde_Kolab_Server_Object_Kolabpop3accountTest extends Horde_Kolab_Server_
array(
'type' => 'Horde_Kolab_Server_Object_Kolabinetorgperson',
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_GIVENNAME => 'Frank',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN => 'Mustermann',
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Mustermann',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Default account */
array(
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/MockTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/MockTest.php
similarity index 66%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Server/MockTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/MockTest.php
index 78bb162e6..7433cdb6e 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/MockTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/MockTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the test backend.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Server_MockTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_MockTest extends Horde_Kolab_Server_Integration_Scenario
{
/** The file based mock environment */
@@ -77,10 +77,25 @@ class Horde_Kolab_Server_Server_MockTest extends Horde_Kolab_Server_Scenario
*
* @return NULL
*/
- protected function setUp()
+ public function setUp()
{
parent::setUp();
+ if (!extension_loaded('ldap') && !@dl('ldap.' . PHP_SHLIB_SUFFIX)) {
+ $this->markTestSuiteSkipped('Ldap extension is missing!');
+ };
+
+ /** Hide strict errors from the Net_LDAP2 library */
+ $error_reporting = error_reporting();
+ error_reporting($error_reporting & ~E_STRICT);
+
+ if (!class_exists('Net_LDAP2')) {
+ $this->markTestSuiteSkipped('PEAR package Net_LDAP2 is not installed!');
+ }
+
+ /** Reactivate original error reporting */
+ error_reporting($error_reporting);
+
$this->markTestIncomplete('Needs to be fixed');
$this->initializeEnvironments();
@@ -150,14 +165,14 @@ class Horde_Kolab_Server_Server_MockTest extends Horde_Kolab_Server_Scenario
foreach ($this->servers as $server) {
$filter = '(&(objectClass=kolabInetOrgPerson)(uid=*)(mail=*)(sn=*))';
$attributes = array(
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN,
- Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_CN,
+ 'Sn',
+ 'Cn',
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_UID,
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_MAIL,
Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_DELETED,
);
- $sort = Horde_Kolab_Server_Object_Kolabinetorgperson::ATTRIBUTE_SN;
+ $sort = 'Sn';
$result = $server->search($filter);
$this->assertEquals(2, count($result));
@@ -417,212 +432,4 @@ class Horde_Kolab_Server_Server_MockTest extends Horde_Kolab_Server_Scenario
}
}
- /**
- * Test parsing of LDAP filters.
- *
- * @return NULL
- */
- public function testFilterParse()
- {
- $db = $this->getKolabMockServer();
-
- $a = $db->parse('(a=b)');
- $this->assertEquals(array('att' => 'a', 'log' => '=', 'val' => 'b'),
- $a);
-
- $a = $db->parse('(&(a=b)(c=d))');
- $this->assertEquals(array('op' => '&', 'sub' => array(
- array('att' => 'a', 'log' => '=', 'val' => 'b'),
- array('att' => 'c', 'log' => '=', 'val' => 'd'),
- )), $a);
-
- $a = $db->parse('(&(a=1)(|(b=2)(c=3)))');
- $this->assertEquals(array('op' => '&', 'sub' => array(
- array('att' => 'a', 'log' => '=', 'val' => '1'),
- array('op' => '|', 'sub' =>
- array(
- array('att' => 'b', 'log' => '=', 'val' => '2'),
- array('att' => 'c', 'log' => '=', 'val' => '3'),
- )))), $a);
-
- $a = $db->parseSub('(!(x=2))(b=1)');
- $this->assertEquals(array(array('op' => '!', 'sub' =>
- array(
- array('att' => 'x', 'log' => '=', 'val' => '2'),
- )
- ),
- array('att' => 'b', 'log' => '=', 'val' => '1'),
- ), $a);
-
- $a = $db->parse('(&(!(x=2))(b=1))');
- $this->assertEquals(array('op' => '&', 'sub' => array(
- array('op' => '!', 'sub' =>
- array(
- array('att' => 'x', 'log' => '=', 'val' => '2'),
- )
- ),
- array('att' => 'b', 'log' => '=', 'val' => '1'),
- )), $a);
-
- }
-
- /**
- * Test searching in the simulated LDAP data.
- *
- * @return NULL
- */
- public function testSearch()
- {
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- $config = new stdClass;
- $config->driver = 'test';
- $config->params = array(
- 'data' =>
- array(
- 'cn=a' => array(
- 'dn' => 'cn=a',
- 'data' => array(
- 'a' => '1',
- 'b' => '1',
- 'c' => '1',
- )
- ),
- 'cn=b' => array(
- 'dn' => 'cn=b',
- 'data' => array(
- 'a' => '1',
- 'b' => '2',
- 'c' => '2',
- )
- ),
- 'cn=c' => array(
- 'dn' => 'cn=c',
- 'data' => array(
- 'a' => '1',
- 'b' => '2',
- 'c' => '3',
- )
- ),
- 'cn=d' => array(
- 'dn' => 'cn=d',
- 'data' => array(
- 'a' => '2',
- 'b' => '2',
- 'c' => '1',
- )
- ),
- )
- );
- $injector->setInstance('Horde_Kolab_Server_Config', $config);
- $injector->bindFactory('Horde_Kolab_Server_Structure',
- 'Horde_Kolab_Server_Factory',
- 'getStructure');
- $injector->bindFactory('Horde_Kolab_Server',
- 'Horde_Kolab_Server_Factory',
- 'getServer');
- $db = $injector->getInstance('Horde_Kolab_Server');
-
- $a = $db->search('(c=1)');
- $this->assertEquals(
- array(
- 'cn=a' => array(
- 'a' => '1',
- 'b' => '1',
- 'c' => '1',
- 'dn' => 'cn=a',
- ),
- 'cn=d' => array(
- 'a' => '2',
- 'b' => '2',
- 'c' => '1',
- 'dn' => 'cn=d',
- ),
- ),
- $a
- );
-
- $a = $db->search('(c=3)');
- $this->assertEquals(
- array(
- 'cn=c' => array(
- 'a' => '1',
- 'b' => '2',
- 'c' => '3',
- 'dn' => 'cn=c',
- ),
- ),
- $a
- );
-
- $a = $db->search('(c=3)', array('attributes' => array('a')));
- $this->assertEquals(
- array(
- 'cn=c' => array(
- 'a' => '1',
- 'dn' => 'cn=c',
- ),
- ),
- $a
- );
-
- $a = $db->search('(&(a=1)(b=2))', array('attributes' => array('a', 'b')));
- $this->assertEquals(
- array(
- 'cn=b' => array(
- 'a' => '1',
- 'b' => '2',
- 'dn' => 'cn=b',
- ),
- 'cn=c' => array(
- 'a' => '1',
- 'b' => '2',
- 'dn' => 'cn=c',
- ),
- ),
- $a
- );
-
- $a = $db->search('(&(b=2))', array('attributes' => array('b')));
- $this->assertEquals(
- array(
- 'cn=b' => array(
- 'b' => '2',
- 'dn' => 'cn=b',
- ),
- 'cn=c' => array(
- 'b' => '2',
- 'dn' => 'cn=c',
- ),
- 'cn=d' => array(
- 'b' => '2',
- 'dn' => 'cn=d',
- ),
- ),
- $a
- );
-
- $a = $db->search('(!(b=2))', array('attributes' => array('a', 'b')));
- $this->assertEquals(
- array(
- 'cn=a' => array(
- 'a' => '1',
- 'b' => '1',
- 'dn' => 'cn=a',
- ),
- ),
- $a
- );
-
- $a = $db->search('(&(!(x=2))(b=1))', array('attributes' => array('b')));
- $this->assertEquals(
- array(
- 'cn=a' => array(
- 'b' => '1',
- 'dn' => 'cn=a',
- ),
- ),
- $a
- );
- }
-
}
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/ObjectTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/ObjectTest.php
similarity index 97%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/ObjectTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/ObjectTest.php
index f34fa6a0f..187b34ffe 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/ObjectTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/ObjectTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* The the handling of objects.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_ObjectTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_ObjectTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/OrgPersonTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/OrgPersonTest.php
similarity index 86%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/OrgPersonTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/OrgPersonTest.php
index 9ff4ce96f..f46ff75aa 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/OrgPersonTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/OrgPersonTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the organizationalPerson object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_OrgPersonTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_OrgPersonTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
* Objects used within this test
@@ -41,15 +41,15 @@ class Horde_Kolab_Server_Object_OrgPersonTest extends Horde_Kolab_Server_Scenari
/* Default organizationalPerson */
array(
'type' => 'Horde_Kolab_Server_Object_Organizationalperson',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_OrgPersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_OrgPersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Cn' => 'Kolab_Server_OrgPersonTest_123',
+ 'Sn' => 'Kolab_Server_OrgPersonTest_123',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
/* Invalid person (no sn) */
array(
'type' => 'Horde_Kolab_Server_Object_Organizationalperson',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_OrgPersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_OrgPersonTest_123',
+ 'Cn' => 'Kolab_Server_OrgPersonTest_123',
+ 'Userpassword' => 'Kolab_Server_OrgPersonTest_123',
),
);
@@ -120,11 +120,11 @@ class Horde_Kolab_Server_Object_OrgPersonTest extends Horde_Kolab_Server_Scenari
array(Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTALADDRESS => 'Kolab_Server_OrgPersonTest_123$$ '));
$this->assertStoreFetch($person, $server,
- array(Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_SN => 'Kolab_Server_OrgPersonTest_456'),
+ array('Sn' => 'Kolab_Server_OrgPersonTest_456'),
array(Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTALADDRESS => array('Kolab_Server_OrgPersonTest_456$$ ')));
$this->assertStoreFetch($person, $server,
- array(Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_SN => 'Kolab_Server_OrgPersonTest_123',
+ array('Sn' => 'Kolab_Server_OrgPersonTest_123',
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_STREET => 'Street 1',
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTALCODE => '12345',
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_CITY => 'Nowhere'),
@@ -137,7 +137,7 @@ class Horde_Kolab_Server_Object_OrgPersonTest extends Horde_Kolab_Server_Scenari
$this->assertStoreFetch($person, $server,
array(Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_STREET => null,
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTALCODE => null,
- //FIXME: Why does this need a string?
+ //@todo: Why does this need a string?
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTALADDRESS => '',
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_POSTOFFICEBOX => null,
Horde_Kolab_Server_Object_Organizationalperson::ATTRIBUTE_CITY => null),
@@ -171,7 +171,7 @@ class Horde_Kolab_Server_Object_OrgPersonTest extends Horde_Kolab_Server_Scenari
'+1234567890',
array('1', '2'),
'0',
- //FIXME: How to delete?
+ //@todo: How to delete?
//null
)
)
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/PersonTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/PersonTest.php
similarity index 62%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/PersonTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/PersonTest.php
index cfdc297b2..3dd2fa2d2 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/PersonTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/PersonTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the person object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_PersonTest extends Horde_Kolab_Server_Integration_Scenario
{
public $cn = 'Kolab_Server_PersonTest';
@@ -44,65 +44,65 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
/* Default dummy person */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123',
+ 'Cn' => 'Kolab_Server_PersonTest_123',
+ 'Sn' => 'Kolab_Server_PersonTest_123',
+ 'Userpassword' => 'Kolab_Server_PersonTest_123',
),
/* Invalid person (no sn) */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123',
+ 'Cn' => 'Kolab_Server_PersonTest_123',
+ 'Userpassword' => 'Kolab_Server_PersonTest_123',
),
/* Person with problematic characters */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_!"$%&()=?',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_!"$%&()=?',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_!"$%&()=?',
+ 'Cn' => 'Kolab_Server_PersonTest_!"$%&()=?',
+ 'Sn' => 'Kolab_Server_PersonTest_!"$%&()=?',
+ 'Userpassword' => 'Kolab_Server_PersonTest_!"$%&()=?',
),
/* Person with difficult encoding */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_ügöräç',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_ügöräç',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_ügöräç',
+ 'Cn' => 'Kolab_Server_PersonTest_ügöräç',
+ 'Sn' => 'Kolab_Server_PersonTest_ügöräç',
+ 'Userpassword' => 'Kolab_Server_PersonTest_ügöräç',
),
/* Person with forward slash */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_/',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_/',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_/',
+ 'Cn' => 'Kolab_Server_PersonTest_/',
+ 'Sn' => 'Kolab_Server_PersonTest_/',
+ 'Userpassword' => 'Kolab_Server_PersonTest_/',
),
/* Person with double cn */
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => array('Kolab_Server_PersonTest_cn1',
+ 'Cn' => array('Kolab_Server_PersonTest_cn1',
'Kolab_Server_PersonTest_cn2'),
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_cncn',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_cncn',
+ 'Sn' => 'Kolab_Server_PersonTest_cncn',
+ 'Userpassword' => 'Kolab_Server_PersonTest_cncn',
),
/* Person with name suffix*/
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123',
+ 'Cn' => 'Kolab_Server_PersonTest_123',
+ 'Sn' => 'Kolab_Server_PersonTest_123',
+ 'Userpassword' => 'Kolab_Server_PersonTest_123',
),
/* Person for telephone number handling*/
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_123456',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123456',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123456',
+ 'Cn' => 'Kolab_Server_PersonTest_123456',
+ 'Sn' => 'Kolab_Server_PersonTest_123456',
+ 'Userpassword' => 'Kolab_Server_PersonTest_123456',
),
/* Person with a creation date*/
array(
'type' => 'Horde_Kolab_Server_Object_Person',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_123456',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123456',
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123456',
+ 'Cn' => 'Kolab_Server_PersonTest_123456',
+ 'Sn' => 'Kolab_Server_PersonTest_123456',
+ 'Userpassword' => 'Kolab_Server_PersonTest_123456',
'Creationdate' => '191008030000Z',
),
);
@@ -129,7 +129,7 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
{
foreach ($this->servers as $server) {
$a = new Horde_Kolab_Server_Object_Person($server, null, $this->objects[0]);
- $this->assertContains(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN . '=' . $this->objects[0][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN],
+ $this->assertContains('Cn' . '=' . $this->objects[0]['Cn'],
$a->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_UID));
}
}
@@ -158,23 +158,23 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
foreach ($adds as $add) {
$result = $server->add($this->objects[$add]);
$this->assertNoError($result);
- $cn_result = $server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
+ $cn_result = $server->uidForCn($this->objects[$add]['Cn']);
$this->assertNoError($cn_result);
$dn_parts = Net_LDAP2_Util::ldap_explode_dn($cn_result, array('casefold' => 'lower'));
$dnpart = Net_LDAP2_Util::unescape_dn_value($dn_parts[0]);
/**
- * FIXME: I currently do not really understand why the forward slash
+ * @todo: I currently do not really understand why the forward slash
* is not correctly converted back but I lack the time to analyse it
* in detail. The server entry looks okay.
*/
$dnpart = str_replace('\/', '/', $dnpart);
- $this->assertContains(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN . '=' . $this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN],
+ $this->assertContains('Cn' . '=' . $this->objects[$add]['Cn'],
$dnpart[0]);
$result = $server->delete($cn_result);
$this->assertNoError($result);
- $cn_result = $server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
+ $cn_result = $server->uidForCn($this->objects[$add]['Cn']);
$this->assertNoError($cn_result);
- $this->assertFalse($server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+ $this->assertFalse($server->uidForCn($this->objects[$add]['Cn']));
}
}
}
@@ -188,9 +188,9 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
{
foreach ($this->servers as $server) {
$person = $this->assertAdd($server, $this->objects[2],
- array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => $this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+ array('Cn' => $this->objects[2]['Cn']));
$this->assertSimpleSequence($person, $server,
- Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN,
+ 'Sn',
array('modified', 'modified_again'), true);
}
}
@@ -209,13 +209,13 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
$person = $server->fetch($person->getUid());
- $this->assertEquals($this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN],
- $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN));
+ $this->assertEquals($this->objects[2]['Cn'],
+ $person->get('Cn'));
- $result = $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_äö'));
+ $result = $person->save(array('Cn' => 'Kolab_Server_PersonTest_äö'));
$cn_result = $server->uidForCn('Kolab_Server_PersonTest_äö');
$person = $server->fetch($cn_result);
- $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN),
+ $this->assertEquals($person->get('Cn'),
'Kolab_Server_PersonTest_äö');
$result = $server->delete($cn_result);
$this->assertNoError($result);
@@ -236,11 +236,11 @@ class Horde_Kolab_Server_Object_PersonTest extends Horde_Kolab_Server_Scenario
$person = $this->assertAdd($server, $this->objects[5],
array());
- $cn_result = $server->uidForCn($this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN][0]);
+ $cn_result = $server->uidForCn($this->objects[5]['Cn'][0]);
$this->assertNoError($cn_result);
$dn_parts = Net_LDAP2_Util::ldap_explode_dn($cn_result, array('casefold' => 'lower'));
$dnpart = Net_LDAP2_Util::unescape_dn_value($dn_parts[0]);
- $this->assertContains(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN . '=' . $this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN][0],
+ $this->assertContains('Cn' . '=' . $this->objects[5]['Cn'][0],
$dnpart[0]);
}
}
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Scenario.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Scenario.php
similarity index 97%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Scenario.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Scenario.php
index 9248f8fff..e89160f82 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Scenario.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/Scenario.php
@@ -12,6 +12,11 @@
*/
/**
+ * Require our basic test case definition
+ */
+require_once dirname(__FILE__) . '/../Autoload.php';
+
+/**
* Base for PHPUnit scenarios.
*
* Copyright 2008-2009 The Horde Project (http://www.horde.org/)
@@ -25,7 +30,7 @@
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Share
*/
-class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
+class Horde_Kolab_Server_Integration_Scenario extends PHPUnit_Extensions_Story_TestCase
{
/** The mock environment */
const ENVIRONMENT_MOCK = 'mock';
@@ -573,7 +578,7 @@ class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
{
return array('type' => 'Horde_Kolab_Server_Object_Kolab_Address',
Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_GIVENNAME => 'Test',
- Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_SN => 'Address',
+ 'Sn' => 'Address',
Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_MAIL => 'address@example.org',
);
}
@@ -587,9 +592,9 @@ class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
{
return array('type' => 'Horde_Kolab_Server_Object_Kolab_Administrator',
Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_GIVENNAME => 'The',
- Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_SN => 'Administrator',
+ 'Sn' => 'Administrator',
Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_SID => 'admin',
- Horde_Kolab_Server_Object_Kolab_Administrator::ATTRIBUTE_USERPASSWORD => 'none',
+ 'Userpassword' => 'none',
);
}
@@ -602,9 +607,9 @@ class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
{
return array('type' => 'Horde_Kolab_Server_Object_Kolab_Maintainer',
Horde_Kolab_Server_Object_Kolab_Maintainer::ATTRIBUTE_GIVENNAME => 'Main',
- Horde_Kolab_Server_Object_Kolab_Maintainer::ATTRIBUTE_SN => 'Tainer',
+ 'Sn' => 'Tainer',
Horde_Kolab_Server_Object_Kolab_Maintainer::ATTRIBUTE_SID => 'maintainer',
- Horde_Kolab_Server_Object_Kolab_Maintainer::ATTRIBUTE_USERPASSWORD => 'none',
+ 'Userpassword' => 'none',
);
}
@@ -617,9 +622,9 @@ class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
{
return array('type' => 'Horde_Kolab_Server_Object_Kolab_Domainmaintainer',
Horde_Kolab_Server_Object_Kolab_Domainmaintainer::ATTRIBUTE_GIVENNAME => 'Domain',
- Horde_Kolab_Server_Object_Kolab_Domainmaintainer::ATTRIBUTE_SN => 'Maintainer',
+ 'Sn' => 'Maintainer',
Horde_Kolab_Server_Object_Kolab_Domainmaintainer::ATTRIBUTE_SID => 'domainmaintainer',
- Horde_Kolab_Server_Object_Kolab_Domainmaintainer::ATTRIBUTE_USERPASSWORD => 'none',
+ 'Userpassword' => 'none',
Horde_Kolab_Server_Object_Kolab_Domainmaintainer::ATTRIBUTE_DOMAIN => array('example.com'),
);
@@ -775,7 +780,7 @@ class Horde_Kolab_Server_Scenario extends PHPUnit_Extensions_Story_TestCase
);
}
- /** FIXME: Prefix the stuff below with provide...() */
+ /** @todo: Prefix the stuff below with provide...() */
public function validUsers()
{
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserHandlingTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserHandlingTest.php
similarity index 99%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserHandlingTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserHandlingTest.php
index a12e306b2..28078c35b 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserHandlingTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserHandlingTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Handling users.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_UserHandlingTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_UserHandlingTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserTest.php
similarity index 94%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserTest.php
index 8acceaf6d..423f86067 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Object/UserTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Integration/UserTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/Scenario.php';
/**
* Test the user object.
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Object_UserTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Integration_UserTest extends Horde_Kolab_Server_Integration_Scenario
{
/**
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/LdapBase.php b/framework/Kolab_Server/test/Horde/Kolab/Server/LdapBase.php
index 6580c3fea..c7026d9f5 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/LdapBase.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/LdapBase.php
@@ -40,7 +40,7 @@ class Horde_Kolab_Server_LdapBase extends PHPUnit_Framework_TestCase
/** Hide strict errors from the Net_LDAP2 library */
$error_reporting = error_reporting();
- error_reporting($error_reporting ^ E_STRICT);
+ error_reporting($error_reporting & ~E_STRICT);
if (!class_exists('Net_LDAP2')) {
$this->markTestSuiteSkipped('PEAR package Net_LDAP2 is not installed!');
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/ServerTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Objects/ServerTest.php
similarity index 98%
rename from framework/Kolab_Server/test/Horde/Kolab/Server/Server/ServerTest.php
rename to framework/Kolab_Server/test/Horde/Kolab/Server/Objects/ServerTest.php
index ee7c12aa6..415540e08 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/ServerTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Objects/ServerTest.php
@@ -30,7 +30,7 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Server_ServerTest extends PHPUnit_Framework_TestCase
+class Horde_Kolab_Server_Objects_ServerTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Query/LdapTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Query/LdapTest.php
index f01a7944f..2f6eef172 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Query/LdapTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Query/LdapTest.php
@@ -174,7 +174,7 @@ class Horde_Kolab_Server_Query_LdapTest extends Horde_Kolab_Server_LdapBase
/** Hide strict errors from the Net_LDAP2 library */
$error_reporting = error_reporting();
- error_reporting($error_reporting ^ E_STRICT);
+ error_reporting($error_reporting & ~E_STRICT);
try {
$query->convertOr($or)->asString();
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Result/LdapTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Result/LdapTest.php
index 4da773a7b..668a68e4f 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Result/LdapTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Result/LdapTest.php
@@ -12,9 +12,9 @@
*/
/**
- * Prepare the test setup.
+ * Require our basic test case definition
*/
-require_once dirname(__FILE__) . '/../Autoload.php';
+require_once dirname(__FILE__) . '/../LdapBase.php';
/**
* Test the LDAP result handler.
@@ -30,19 +30,8 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Result_LdapTest extends PHPUnit_Framework_TestCase
+class Horde_Kolab_Server_Result_LdapTest extends Horde_Kolab_Server_LdapBase
{
- public function setUp()
- {
- if (!extension_loaded('ldap') && !@dl('ldap.' . PHP_SHLIB_SUFFIX)) {
- $this->markTestSuiteSkipped('Ldap extension is missing!');
- };
-
- if (!class_exists('Net_LDAP2')) {
- $this->markTestSuiteSkipped('PEAR package Net_LDAP2 is not installed!');
- }
- }
-
public function testMethodConstructHasParameterNetldap2searchSearchResult()
{
$search = $this->getMock(
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/FactoryTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Server/FactoryTest.php
index b9b043319..99faf2c66 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Server/FactoryTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Server/FactoryTest.php
@@ -30,96 +30,198 @@ require_once dirname(__FILE__) . '/../Autoload.php';
* @license http://www.fsf.org/copyleft/lgpl.html LGPL
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
-class Horde_Kolab_Server_Server_FactoryTest extends Horde_Kolab_Server_Scenario
+class Horde_Kolab_Server_Server_FactoryTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
- $this->markTestIncomplete('Needs to be fixed');
+ $this->injector = new Horde_Injector(new Horde_Injector_TopLevel());
}
public function testMethodSetupHasPostconditionThatAObjectHandlerOfTypeBaseIsBoundToObjects()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- Horde_Kolab_Server_Factory::setup(array(), $injector);
+ Horde_Kolab_Server_Factory::setup($this->injector, array());
$this->assertType(
'Horde_Kolab_Server_Objects_Base',
- $injector->getInstance('Horde_Kolab_Server_Objects')
+ $this->injector->getInstance('Horde_Kolab_Server_Objects')
);
}
public function testMethodSetupHasPostconditionThatASchemaHandlerOfTypeBaseIsBoundToSchema()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- Horde_Kolab_Server_Factory::setup(array(), $injector);
+ Horde_Kolab_Server_Factory::setup($this->injector, array());
$this->assertType(
'Horde_Kolab_Server_Schema_Base',
- $injector->getInstance('Horde_Kolab_Server_Schema')
+ $this->injector->getInstance('Horde_Kolab_Server_Schema')
);
}
public function testMethodSetupHasPostconditionThatASearchHandlerOfTypeBaseIsBoundToSearch()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- Horde_Kolab_Server_Factory::setup(array(), $injector);
+ Horde_Kolab_Server_Factory::setup($this->injector, array());
$this->assertType(
'Horde_Kolab_Server_Search_Base',
- $injector->getInstance('Horde_Kolab_Server_Search')
+ $this->injector->getInstance('Horde_Kolab_Server_Search')
);
}
- public function testMethodSetupHasPostconditionThatAStructureOfTypeBaseIsBoundToStructure()
+ public function testMethodSetupHasPostconditionThatAStructureOfTypeKolabIsBoundToStructure()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- Horde_Kolab_Server_Factory::setup(array(), $injector);
+ Horde_Kolab_Server_Factory::setup($this->injector, array());
$this->assertType(
'Horde_Kolab_Server_Structure_Kolab',
- $injector->getInstance('Horde_Kolab_Server_Structure')
+ $this->injector->getInstance('Horde_Kolab_Server_Structure')
);
}
public function testMethodSetupHasPostconditionThatAStructureHandlerOfTypeLdapIsBoundToStructureIfConfiguredThatWay()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
Horde_Kolab_Server_Factory::setup(
- array('structure' => array('driver' => 'ldap')),
- $injector
+ $this->injector,
+ array('structure' => array('driver' => 'ldap'))
);
$this->assertType(
'Horde_Kolab_Server_Structure_Ldap',
- $injector->getInstance('Horde_Kolab_Server_Structure')
+ $this->injector->getInstance('Horde_Kolab_Server_Structure')
);
}
public function testMethodSetupHasPostconditionThatAServerOfTypeLdapIsBoundToServer()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
- Horde_Kolab_Server_Factory::setup(array(), $injector);
+ Horde_Kolab_Server_Factory::setup($this->injector, array('basedn' => 'dc=example,dc=com'));
$this->assertType(
- 'Horde_Kolab_Server_Ldap',
- $injector->getInstance('Horde_Kolab_Server')
+ 'Horde_Kolab_Server_Ldap_Standard',
+ $this->injector->getInstance('Horde_Kolab_Server')
);
}
- public function testMethodSetupHasPostconditionThatAServerOfTypeLdapIsBoundToServerIfConfiguredThatWay()
+ public function testMethodSetupHasPostconditionThatAServerOfTypeFileIsBoundToServerIfConfiguredThatWay()
{
- $injector = new Horde_Injector(new Horde_Injector_TopLevel());
Horde_Kolab_Server_Factory::setup(
- array('driver' => 'file', 'params' => array('file' => '/tmp/nix')),
- $injector
+ $this->injector,
+ array('driver' => 'file', 'params' => array('basedn' => '', 'file' => '/tmp/nix'))
);
$this->assertType(
- 'Horde_Kolab_Server_File',
- $injector->getInstance('Horde_Kolab_Server')
+ 'Horde_Kolab_Server_Ldap_Standard',
+ $this->injector->getInstance('Horde_Kolab_Server')
);
}
+ public function testMethodSetupHasPostconditionThatAServerOfTypeFilteredLdapIsBoundToServerIfAFilterHasBeenProvided()
+ {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array('basedn' => 'dc=example,dc=com', 'filter' => 'test')
+ );
+ $this->assertType(
+ 'Horde_Kolab_Server_Ldap_Filtered',
+ $this->injector->getInstance('Horde_Kolab_Server')
+ );
+ }
+
+ public function testMethodSetupHasPostconditionThatAMappedServerIsBoundToServerIfAMapHasBeenProvided()
+ {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array(
+ 'basedn' => 'dc=example,dc=com',
+ 'map' => array('a' => 'b'),
+ )
+ );
+ $this->assertType(
+ 'Horde_Kolab_Server_Mapped',
+ $this->injector->getInstance('Horde_Kolab_Server')
+ );
+ }
+
+ public function testMethodSetupHasPostconditionThatALoggedServerIsBoundToServerIfALoggerHasBeenProvided()
+ {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array(
+ 'basedn' => 'dc=example,dc=com',
+ 'logger' => $this->getMock('Horde_Log_Logger'),
+ )
+ );
+ $this->assertType(
+ 'Horde_Kolab_Server_Logged',
+ $this->injector->getInstance('Horde_Kolab_Server')
+ );
+ }
+
+ public function testMethodGetserverHasPostconditionThatTheConnectionParametersGetRewrittenIfNecessary()
+ {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array(
+ 'server' => 'localhost',
+ 'phpdn' => 'a',
+ 'phppw' => 'a',
+ 'basedn' => 'dc=example,dc=com'
+ )
+ );
+ $this->injector->getInstance('Horde_Kolab_Server');
+ /**@todo: Actually not testable as we can't read the configuration again */
+ }
+
+ public function testMethodGetserverHasPostconditionThatTheConnectionIsSplittedIfRequired()
+ {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array(
+ 'host' => 'localhost',
+ 'host_master' => 'writehost',
+ 'basedn' => 'dc=example,dc=com'
+ )
+ );
+ $this->injector->getInstance('Horde_Kolab_Server');
+ /**@todo: Actually not testable as we can't read the configuration again */
+ }
+
+ public function testMethodGetserverThrowsExceptionIfTheBasednIsMissing()
+ {
+ try {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array('dummy')
+ );
+ $this->injector->getInstance('Horde_Kolab_Server');
+ $this->fail('No exception!');
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->assertEquals(
+ 'The base DN is missing', $e->getMessage()
+ );
+ }
+ }
+
+ public function testMethodGetserverThrowsExceptionIfTheDriverIsUnknown()
+ {
+ try {
+ Horde_Kolab_Server_Factory::setup(
+ $this->injector,
+ array('driver' => 'unknown')
+ );
+ $this->injector->getInstance('Horde_Kolab_Server');
+ $this->fail('No exception!');
+ } catch (Horde_Kolab_Server_Exception $e) {
+ $this->assertEquals(
+ 'Invalid server configuration!', $e->getMessage()
+ );
+ }
+ }
+
public function testMethodSingletonReturnsTheSameInstanceWithTheSameParameters()
{
- Horde_Kolab_Server_Factory::singleton();
+ $result1 = Horde_Kolab_Server_Factory::singleton(array('basedn' => 'dc=example,dc=com'));
+ $result2 = Horde_Kolab_Server_Factory::singleton(array('basedn' => 'dc=example,dc=com'));
+ $this->assertSame($result1, $result2);
}
public function testMethodSingletonReturnsDifferentInstancesWithDifferentParameters()
{
- Horde_Kolab_Server_Factory::singleton();
+ global $conf;
+ $conf['kolab']['ldap']['basedn'] = 'test';
+ $result1 = Horde_Kolab_Server_Factory::singleton(array('basedn' => 'dc=example,dc=com'));
+ $result2 = Horde_Kolab_Server_Factory::singleton();
+ $this->assertTrue($result1 !== $result2);
}
}
\ No newline at end of file
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/KolabTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/KolabTest.php
index fa72c920a..2ff1ff110 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/KolabTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/KolabTest.php
@@ -34,8 +34,6 @@ class Horde_Kolab_Server_Structure_KolabTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
- $this->markTestIncomplete('Needs to be fixed');
-
$server = $this->getMock('Horde_Kolab_Server');
$this->composite = new Horde_Kolab_Server_Composite(
$server,
@@ -84,7 +82,7 @@ class Horde_Kolab_Server_Structure_KolabTest extends PHPUnit_Framework_TestCase
->method('read')
->with('guid')
->will($this->returnValue(array('objectClass' => array('top'))));
- $this->assertEquals('Horde_Kolab_Server_Object', $this->composite->structure->determineType('guid'));
+ $this->assertEquals('Horde_Kolab_Server_Object_Top', $this->composite->structure->determineType('guid'));
}
public function testMethodDeterminetypeHasResultStringTheObjectclassOfTheGivenGuid5()
diff --git a/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/LdapTest.php b/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/LdapTest.php
index 7c9630e40..95ed217be 100644
--- a/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/LdapTest.php
+++ b/framework/Kolab_Server/test/Horde/Kolab/Server/Structure/LdapTest.php
@@ -34,8 +34,6 @@ class Horde_Kolab_Server_Structure_LdapTest extends PHPUnit_Framework_TestCase
{
public function setUp()
{
- $this->markTestIncomplete('Needs to be fixed');
-
$server = $this->getMock('Horde_Kolab_Server');
$this->composite = new Horde_Kolab_Server_Composite(
$server,
@@ -66,7 +64,7 @@ class Horde_Kolab_Server_Structure_LdapTest extends PHPUnit_Framework_TestCase
->method('read')
->with('guid')
->will($this->returnValue(array('objectClass' => array('TOP'))));
- $this->assertEquals('Horde_Kolab_Server_Object', $this->composite->structure->determineType('guid'));
+ $this->assertEquals('Horde_Kolab_Server_Object_Top', $this->composite->structure->determineType('guid'));
}
public function testMethodDeterminetypeHasResultStringTheObjectclassOfTheGivenGuid2()
--
2.11.0