6 commits - kolabd/process.py pykolab/auth pykolab/wap_client tests/functional
Jeroen van Meeuwen
vanmeeuwen at kolabsys.com
Wed Dec 26 15:06:26 CET 2012
kolabd/process.py | 8 +-
pykolab/auth/ldap/__init__.py | 35 ++++------
pykolab/wap_client/__init__.py | 25 +++++--
tests/functional/purge_imap.py | 15 ++++
tests/functional/purge_users.py | 24 -------
tests/functional/test_kolabd/test_001_user_sync.py | 27 ++------
tests/functional/test_kolabd/test_002_user_rename.py | 62 +++++++++++++++++++
tests/functional/test_kolabd/test_003_two_johns.py | 51 +++++++++++++++
8 files changed, 176 insertions(+), 71 deletions(-)
New commits:
commit 02a5f7f9eb5e62a0e1498e151c6e9dd968aec6fd
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 15:06:11 2012 +0100
Update tests for fixed web admin
diff --git a/tests/functional/test_kolabd/test_001_user_sync.py b/tests/functional/test_kolabd/test_001_user_sync.py
index e8e31bf..44858bb 100644
--- a/tests/functional/test_kolabd/test_001_user_sync.py
+++ b/tests/functional/test_kolabd/test_001_user_sync.py
@@ -36,15 +36,9 @@ class TestKolabDaemon(unittest.TestCase):
self.assertEqual(recipient, "uid=doe,ou=People,dc=example,dc=org")
- result_before = wap_client.user_info(recipient)
-
- # Ensure the synchronization is run even without a kolab daemon running.
- auth.synchronize(mode='_paged_search')
-
- result_after = wap_client.user_info(recipient)
- self.assertEqual(result_after['mail'], 'john.doe at example.org')
- self.assertEqual(result_before['alias'], ['doe at example.org', 'j.doe at example.org', 'john.doe at example.org'])
- self.assertEqual(result_after['alias'], ['doe at example.org', 'j.doe at example.org'])
+ result = wap_client.user_info(recipient)
+ self.assertEqual(result['mail'], 'john.doe at example.org')
+ self.assertEqual(result['alias'], ['doe at example.org', 'j.doe at example.org'])
def test_002_user_recipient_policy_duplicate(self):
from tests.functional.user_add import user_add
@@ -62,15 +56,10 @@ class TestKolabDaemon(unittest.TestCase):
self.assertEqual(recipient, "uid=doe2,ou=People,dc=example,dc=org")
- result_before = wap_client.user_info(recipient)
-
- # Ensure the synchronization is run even without a kolab daemon running.
- auth.synchronize(mode='_paged_search')
+ result = wap_client.user_info(recipient)
- result_after = wap_client.user_info(recipient)
- self.assertEqual(result_after['mail'], 'jane.doe at example.org')
- self.assertEqual(result_before['alias'], ['doe2 at example.org', 'j.doe2 at example.org', 'jane.doe at example.org'])
- self.assertEqual(result_after['alias'], ['doe2 at example.org', 'j.doe2 at example.org'])
+ self.assertEqual(result['mail'], 'jane.doe at example.org')
+ self.assertEqual(result['alias'], ['doe2 at example.org', 'j.doe2 at example.org'])
def test_003_user_mailbox_created(self):
time.sleep(2)
@@ -126,8 +115,8 @@ class TestKolabDaemon(unittest.TestCase):
folders = imap.lm()
self.assertTrue("INBOX" in folders)
- #folders = imap.imap.lsub()
- #self.assertTrue("Calendar" in folders)
+ folders = imap.imap.lsub()
+ self.assertTrue("Calendar" in folders)
def test_011_resource_add(self):
pass
diff --git a/tests/functional/test_kolabd/test_002_user_rename.py b/tests/functional/test_kolabd/test_002_user_rename.py
new file mode 100644
index 0000000..dff9256
--- /dev/null
+++ b/tests/functional/test_kolabd/test_002_user_rename.py
@@ -0,0 +1,62 @@
+import time
+import unittest
+
+import pykolab
+from pykolab import wap_client
+from pykolab.auth import Auth
+from pykolab.imap import IMAP
+
+conf = pykolab.getConf()
+
+class TestKolabDaemon(unittest.TestCase):
+ @classmethod
+ def setup_class(self, *args, **kw):
+ from tests.functional.purge_users import purge_users
+ purge_users()
+
+ self.user = {
+ 'local': 'john.doe',
+ 'domain': 'example.org'
+ }
+
+ from tests.functional.user_add import user_add
+ user_add("John", "Doe")
+ time.sleep(5)
+
+ @classmethod
+ def teardown_class(self, *args, **kw):
+ from tests.functional.purge_users import purge_users
+ purge_users()
+
+ def test_001_user_rename(self):
+ """
+ Rename user "Doe, John" to "Sixpack, Joe" and verify the recipient
+ policy is applied, and the IMAP INBOX folder for the user is
+ renamed.
+ """
+ imap = IMAP()
+ imap.connect()
+ folders = imap.lm('user/john.doe at example.org')
+ self.assertEqual(len(folders), 1)
+
+ auth = Auth()
+ auth.connect()
+ recipient = auth.find_recipient("%(local)s@%(domain)s" % (self.user))
+
+ user_info = wap_client.user_info(recipient)
+ user_info['sn'] = 'Sixpack'
+ user_info['givenname'] = 'Joe'
+ user_info['uid'] = 'sixpack'
+ user_edit = wap_client.user_edit(recipient, user_info)
+
+ time.sleep(5)
+
+ user_info = wap_client.user_info('uid=sixpack,ou=People,dc=example,dc=org')
+ self.assertEqual(user_info['mail'], 'joe.sixpack at example.org')
+
+ folders = imap.lm('user/john.doe at example.org')
+ self.assertEqual(len(folders), 0)
+
+ folders = imap.lm('user/joe.sixpack at example.org')
+ self.assertEqual(len(folders), 1)
+
diff --git a/tests/functional/test_kolabd/test_003_two_johns.py b/tests/functional/test_kolabd/test_003_two_johns.py
new file mode 100644
index 0000000..b2bfb46
--- /dev/null
+++ b/tests/functional/test_kolabd/test_003_two_johns.py
@@ -0,0 +1,51 @@
+import time
+import unittest
+
+import pykolab
+from pykolab import wap_client
+from pykolab.auth import Auth
+from pykolab.imap import IMAP
+
+conf = pykolab.getConf()
+
+class TestKolabDaemon(unittest.TestCase):
+ @classmethod
+ def setup_class(self, *args, **kw):
+ from tests.functional.purge_users import purge_users
+ purge_users()
+
+ @classmethod
+ def teardown_class(self, *args, **kw):
+ from tests.functional.purge_users import purge_users
+ purge_users()
+
+ def test_001_two_johns(self):
+ from tests.functional.user_add import user_add
+ user_add("John", "Doe")
+ user_add("John", "Doe")
+
+ time.sleep(3)
+
+ auth = Auth()
+ auth.connect()
+
+ max_tries = 20
+ while max_tries > 0:
+ recipient1 = auth.find_recipient('john.doe at example.org')
+ recipient2 = auth.find_recipient('john.doe2 at example.org')
+
+ if not recipient1 or not recipient2:
+ time.sleep(1)
+ max_tries -= 1
+ else:
+ break
+
+ imap = IMAP()
+ imap.connect()
+
+ folders = imap.lm('user/john.doe at example.org')
+ self.assertEqual(len(folders), 1, "No INBOX found for first John")
+
+ folders = imap.lm('user/john.doe2 at example.org')
+ self.assertEqual(len(folders), 1, "No INBOX found for second John")
+
commit 0d634bb139dcaf041ebe8192b2996e6725bd5c1c
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 15:03:53 2012 +0100
Display a traceback with the process fails
diff --git a/kolabd/process.py b/kolabd/process.py
index ddaac63..c936fdc 100644
--- a/kolabd/process.py
+++ b/kolabd/process.py
@@ -41,6 +41,8 @@ class KolabdProcess(multiprocessing.Process):
auth = Auth(domain)
auth.connect(domain)
auth.synchronize()
- except:
- log.error(_("Error in process %r, terminating") % (self.name))
- return
\ No newline at end of file
+ except Exception, errmsg:
+ log.error(_("Error in process %r, terminating:\n\t%r") % (self.name, errmsg))
+ import traceback
+ traceback.print_exc()
+ return
commit f184ecd427b7ae97acf510d7a6876f9afa28b906
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 14:39:24 2012 +0100
Apply the recipient policy to entries with existing attributes as well (so mailboxes get renamed and such).
diff --git a/pykolab/auth/ldap/__init__.py b/pykolab/auth/ldap/__init__.py
index 61ae4a8..c538083 100644
--- a/pykolab/auth/ldap/__init__.py
+++ b/pykolab/auth/ldap/__init__.py
@@ -522,12 +522,14 @@ class LDAP(pykolab.base.Base):
log.debug(_("sec. mail pol. is not empty"), level=8)
want_attrs.append(_mail_attr)
- log.debug(_("Attributes %r are not yet available for entry %r") % (
- want_attrs,
- entry_dn
- ),
- level=8
- )
+ if len(want_attrs) > 0:
+ log.debug(_("Attributes %r are not yet available for entry %r") % (
+ want_attrs,
+ entry_dn
+ ),
+ level=8
+ )
+
# Also append the preferredlanguage or 'native tongue' configured
# for the entry.
if not entry.has_key('preferredlanguage'):
@@ -551,19 +553,14 @@ class LDAP(pykolab.base.Base):
# Primary mail address
if not primary_mail == None:
- if not entry.has_key(primary_mail_attribute) or \
- entry[primary_mail_attribute] == None:
-
- primary_mail_address = conf.plugins.exec_hook(
- "set_primary_mail",
- kw={
- 'primary_mail': primary_mail,
- 'entry': entry,
- 'primary_domain': self.domain
- }
- )
- else:
- primary_mail_address = entry[primary_mail_attribute]
+ primary_mail_address = conf.plugins.exec_hook(
+ "set_primary_mail",
+ kw={
+ 'primary_mail': primary_mail,
+ 'entry': entry,
+ 'primary_domain': self.domain
+ }
+ )
i = 1
_primary_mail = primary_mail_address
commit aa3c5b4a9c00050390a5ba37a76ff769956179db
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 14:38:35 2012 +0100
Update the user_edit function
diff --git a/pykolab/wap_client/__init__.py b/pykolab/wap_client/__init__.py
index 373e636..a38953a 100644
--- a/pykolab/wap_client/__init__.py
+++ b/pykolab/wap_client/__init__.py
@@ -295,7 +295,7 @@ def user_add(params=None):
params = json.dumps(params)
- return request('POST', 'user.add', get=None, post=params)
+ return request('POST', 'user.add', post=params)
def user_delete(params=None):
if params == None:
@@ -307,17 +307,26 @@ def user_delete(params=None):
return request('POST', 'user.delete', post=post)
-def user_edit(params=None):
- if params == None:
- params = {
+def user_edit(user = None, attributes={}):
+ if user == None:
+ get = {
'user': utils.ask_question("Username for user to edit", "user")
}
+ else:
+ get = {
+ 'user': user
+ }
- get = json.dumps(params)
+ user_info = request('GET', 'user.info', get=get)
- user = request('GET', 'user.info', get=get)
+ for attribute in attributes.keys():
+ user_info[attribute] = attributes[attribute]
- return user
+ post = json.dumps(user_info)
+
+ user_edit = request('POST', 'user.edit', get=get, post=post)
+
+ return user_edit
def user_form_value_generate_cn(params=None):
if params == None:
@@ -424,7 +433,7 @@ def user_info(user=None):
if user == None:
user = utils.ask_question("User email address")
_params = { 'user': user }
- user = request('GET', 'user.info?%s' % (urllib.urlencode(_params)))
+ user = request('GET', 'user.info', get=_params)
return user
def user_types_list():
commit 844c8e9b1a4d21b79222d43f1fbef144f638cfb8
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 14:37:54 2012 +0100
It is just as easy for purge_users() to call purge_imap()
diff --git a/tests/functional/purge_users.py b/tests/functional/purge_users.py
index 1b18cb0..5bc1b82 100644
--- a/tests/functional/purge_users.py
+++ b/tests/functional/purge_users.py
@@ -13,25 +13,5 @@ def purge_users():
for user in users['list']:
wap_client.user_delete({'user': user})
- auth = Auth()
- domains = auth.list_domains()
-
- imap = IMAP()
- imap.connect()
-
- folders = []
-
- for domain,aliases in domains:
- folders.extend(imap.lm("user/%%@%s" % (domain)))
-
- for folder in folders:
- user = folder.replace('user/','')
-
- recipient = auth.find_recipient(user)
-
- if len(recipient) == 0 or recipient == []:
- try:
- imap.dm(folder)
- except:
- pass
-
+ from tests.functional.purge_imap import purge_imap
+ purge_imap()
commit 3c66afa12004edaff6e28ad9092fce2e8b6b4b58
Author: Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen at kolabsys.com>
Date: Wed Dec 26 14:36:49 2012 +0100
Add purge_imap() because sometimes you will want to end up with a clean IMAP server
diff --git a/tests/functional/purge_imap.py b/tests/functional/purge_imap.py
new file mode 100644
index 0000000..d3827a4
--- /dev/null
+++ b/tests/functional/purge_imap.py
@@ -0,0 +1,15 @@
+import pykolab
+
+from pykolab import wap_client
+from pykolab.imap import IMAP
+
+conf = pykolab.getConf()
+
+def purge_imap():
+ imap = IMAP()
+ imap.connect()
+ for folder in imap.lm():
+ try:
+ imap.dm(folder)
+ except:
+ pass
More information about the commits
mailing list