From e437ffc31efd6dfa71b31ca6ab00dc92268e19cb Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 17:07:16 +0200 Subject: [PATCH 01/11] LDAP authentication unit testing. see #870 --- .travis.yml | 11 ++++++++++- ldap-requirements.txt | 2 ++ modoboa/core/tests.py | 30 ++++++++++++++++++++++++++++++ modoboa/lib/authbackends.py | 8 +++++++- modoboa/urls.py | 4 +--- test_data/base.ldif | 16 ++++++++++++++++ test_data/slapd.conf | 17 +++++++++++++++++ 7 files changed, 83 insertions(+), 5 deletions(-) create mode 100644 ldap-requirements.txt create mode 100644 test_data/base.ldif create mode 100644 test_data/slapd.conf diff --git a/.travis.yml b/.travis.yml index d10fde17e..40e25fa3b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,11 @@ sudo: false language: python python: - "2.7" +addons: + apt: + packages: + - ldap-utils + - slapd env: - DB="POSTGRESQL" @@ -17,6 +22,7 @@ before_install: install: - python setup.py -q develop - pip install -q psycopg2 mysqlclient + - pip install -q -r ldap-requirements.txt - pip install -q -r test-requirements.txt before_script: @@ -24,6 +30,10 @@ before_script: - mysql -e "create database IF NOT EXISTS modoboa_test;" -uroot - mysql -e "CREATE USER 'modoboa'@'localhost' IDENTIFIED BY 'modoboa'" -uroot; - mysql -e "GRANT ALL PRIVILEGES ON * . * TO 'modoboa'@'localhost';" -uroot; + - mkdir /tmp/slapd + - slapd -f test_data/slapd.conf -h ldap://localhost:3389 & + - sleep 3 + - ldapadd -h localhost:3389 -D cn=admin,dc=example,dc=com -w test -f test_data/base.ldif script: - python ./tests.py @@ -32,4 +42,3 @@ script: after_success: - codecov - diff --git a/ldap-requirements.txt b/ldap-requirements.txt new file mode 100644 index 000000000..926c4e036 --- /dev/null +++ b/ldap-requirements.txt @@ -0,0 +1,2 @@ +python-ldap +django-auth-ldap diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 236f859e1..c08c4992d 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -1,8 +1,11 @@ """Tests for core application.""" from django.core.urlresolvers import reverse +from django.test import override_settings +from modoboa.lib import parameters from modoboa.lib.tests import ModoTestCase + from . import factories from . import models @@ -36,6 +39,33 @@ class AuthenticationTestCase(ModoTestCase): self.assertTrue(response.url.endswith(reverse("admin:domain_list"))) +@override_settings(AUTHENTICATION_BACKENDS=( + 'modoboa.lib.authbackends.LDAPBackend', + 'modoboa.lib.authbackends.SimpleBackend', +)) +class LDAPAuthenticationTestCase(ModoTestCase): + + """Validate LDAP authentication scenarios.""" + + @classmethod + def setUpTestData(cls): + """Create test data.""" + super(AuthenticationTestCase, cls).setUpTestData() + parameters.save_admin( + "AUTHENTICATION_TYPE", "ldap") + parameters.save_admin("LDAP_SERVER_PORT", "3389") + + def test_searchbind_authentication(self): + """Test the bind&search method.""" + self.client.logout() + parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") + parameters.save_admin("LDAP_BIND_PASSWORD", "test") + parameters.save_admin("LDAP_SEARCH_BASE", "ou=users,dc=example,dc=com") + self.assertTrue( + self.client.login(username="testuser@example.com", password="test") + ) + + class ProfileTestCase(ModoTestCase): @classmethod diff --git a/modoboa/lib/authbackends.py b/modoboa/lib/authbackends.py index 92509fd28..956a4f314 100644 --- a/modoboa/lib/authbackends.py +++ b/modoboa/lib/authbackends.py @@ -34,6 +34,11 @@ try: class LDAPBackend(orig_LDAPBackend): + def __init__(self, *args, **kwargs): + """Load LDAP settings.""" + parameters.apply_to_django_settings() + super(LDAPBackend, self).__init__(*args, **kwargs) + def get_or_create_user(self, username, ldap_user): """ This must return a (User, created) 2-tuple for the given @@ -72,7 +77,8 @@ try: def authenticate(self, username, password): auth_type = parameters.get_admin("AUTHENTICATION_TYPE", app="core") if auth_type == "ldap": - return super(LDAPBackend, self).authenticate(username, password) + return super(LDAPBackend, self).authenticate( + username, password) return None except ImportError: diff --git a/modoboa/urls.py b/modoboa/urls.py index 30192a6f9..0d5069c95 100644 --- a/modoboa/urls.py +++ b/modoboa/urls.py @@ -2,7 +2,7 @@ from django.conf import settings from django.conf.urls import patterns, include, url from modoboa.core.extensions import exts_pool -from modoboa.lib import parameters, events +from modoboa.lib import events urlpatterns = patterns( @@ -28,8 +28,6 @@ urlpatterns += patterns( *events.raiseQueryEvent("ExtraUprefsRoutes") ) -parameters.apply_to_django_settings() - # API urls urlpatterns += patterns( "", diff --git a/test_data/base.ldif b/test_data/base.ldif new file mode 100644 index 000000000..2adf54bc9 --- /dev/null +++ b/test_data/base.ldif @@ -0,0 +1,16 @@ +dn: dc=example,dc=com +objectClass: dcObject +objectClass: organizationalUnit + +ou: users + +dn: cn=testuser,ou=users,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: testuser +givenName: Test +sn: User +mail: testuser@example.com +userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP diff --git a/test_data/slapd.conf b/test_data/slapd.conf new file mode 100644 index 000000000..c6ae7e207 --- /dev/null +++ b/test_data/slapd.conf @@ -0,0 +1,17 @@ +# See slapd.conf(5) for details on configuration options. +include /etc/ldap/schema/core.schema +include /etc/ldap/schema/cosine.schema +include /etc/ldap/schema/inetorgperson.schema +include /etc/ldap/schema/nis.schema + +pidfile /tmp/slapd/slapd.pid +argsfile /tmp/slapd/slapd.args + +modulepath /usr/lib/openldap + +database ldif +directory /tmp/slapd + +suffix "dc=example,dc=com" +rootdn "cn=admin,dc=example,dc=com" +rootpw {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP From 40bbbb7b41c9b96729eed45dc1dde13d550f8199 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 17:15:59 +0200 Subject: [PATCH 02/11] Fix LDAP data. see #870 --- test_data/base.ldif | 1 - 1 file changed, 1 deletion(-) diff --git a/test_data/base.ldif b/test_data/base.ldif index 2adf54bc9..32574944f 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -1,7 +1,6 @@ dn: dc=example,dc=com objectClass: dcObject objectClass: organizationalUnit - ou: users dn: cn=testuser,ou=users,dc=example,dc=com From 3d1b0d26b0f222067fb6da59db5e05f30f2ec372 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 17:25:33 +0200 Subject: [PATCH 03/11] Fix test data. see #870 --- modoboa/core/tests.py | 2 +- test_data/base.ldif | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index c08c4992d..13198d9e9 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -60,7 +60,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): self.client.logout() parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") parameters.save_admin("LDAP_BIND_PASSWORD", "test") - parameters.save_admin("LDAP_SEARCH_BASE", "ou=users,dc=example,dc=com") + parameters.save_admin("LDAP_SEARCH_BASE", "dc=example,dc=com") self.assertTrue( self.client.login(username="testuser@example.com", password="test") ) diff --git a/test_data/base.ldif b/test_data/base.ldif index 32574944f..aa8032bc7 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -3,7 +3,7 @@ objectClass: dcObject objectClass: organizationalUnit ou: users -dn: cn=testuser,ou=users,dc=example,dc=com +dn: cn=testuser,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person From f8f600287311dba126589ff3d38994424b7a602a Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 17:31:23 +0200 Subject: [PATCH 04/11] Fix unit test. see #870 --- modoboa/core/tests.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 13198d9e9..6019ea99d 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -50,7 +50,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): @classmethod def setUpTestData(cls): """Create test data.""" - super(AuthenticationTestCase, cls).setUpTestData() + super(LDAPAuthenticationTestCase, cls).setUpTestData() parameters.save_admin( "AUTHENTICATION_TYPE", "ldap") parameters.save_admin("LDAP_SERVER_PORT", "3389") From e20b17e962b96611474b2a66fdd7aafaf4879266 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 18:02:26 +0200 Subject: [PATCH 05/11] New test. see #870 --- codecov.yml | 22 ++++++++++++++++++++++ modoboa/core/tests.py | 25 ++++++++++++++++++++++--- test_data/base.ldif | 2 +- 3 files changed, 45 insertions(+), 4 deletions(-) create mode 100644 codecov.yml diff --git a/codecov.yml b/codecov.yml new file mode 100644 index 000000000..f064df3d1 --- /dev/null +++ b/codecov.yml @@ -0,0 +1,22 @@ +comment: + layout: header, changes, diff +coverage: + ignore: + - modoboa/core/migrations/* + - modoboa/core/tests.py + - modoboa/core/dev_settings.py + - modoboa/lib/migrations/* + - modoboa/lib/tests.py + - modoboa/admin/migrations/* + - modoboa/admin/tests/* + - modoboa/limits/migrations/* + - modoboa/limits/tests.py + - modoboa/relaydomains/migrations/* + - modoboa/relaydomains/tests.py + status: + patch: + default: + target: '70' + project: + default: + target: auto diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 6019ea99d..481c9b2fc 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -55,15 +55,34 @@ class LDAPAuthenticationTestCase(ModoTestCase): "AUTHENTICATION_TYPE", "ldap") parameters.save_admin("LDAP_SERVER_PORT", "3389") + def check_created_user(self, username, group="SimpleUsers", with_mb=True): + """Check that created user is valid.""" + user = models.User.objects.get(username=username) + self.assertEqual(user.email, username) + self.assertEqual(user.group, group) + if with_mb: + self.assertEqual(user.mailbox.domain.name, "example.com") + self.assertEqual(user.mailbox.full_address, username) + def test_searchbind_authentication(self): """Test the bind&search method.""" self.client.logout() parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") parameters.save_admin("LDAP_BIND_PASSWORD", "test") parameters.save_admin("LDAP_SEARCH_BASE", "dc=example,dc=com") - self.assertTrue( - self.client.login(username="testuser@example.com", password="test") - ) + username = "testuser@example.com" + self.assertTrue(self.client.login(username=username, password="test")) + self.check_created_user(username) + + def test_directbind_authentication(self): + """Test the directbind method.""" + self.client.logout() + parameters.save_admin("LDAP_AUTH_METHOD", "directbind") + parameters.save_admin( + "LDAP_USER_DN_TEMPLATE", "%(user)s,dc=example,dc=com") + username = "testuser@example.com" + self.assertTrue(self.client.login(username=username, password="test")) + self.check_created_user(username) class ProfileTestCase(ModoTestCase): diff --git a/test_data/base.ldif b/test_data/base.ldif index aa8032bc7..f236cebbf 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -3,7 +3,7 @@ objectClass: dcObject objectClass: organizationalUnit ou: users -dn: cn=testuser,dc=example,dc=com +dn: mail=testuser@example.com,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person From e83f172bd5a4a0489655122e5f56a592853cc674 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 18:09:08 +0200 Subject: [PATCH 06/11] Try different syntaxes. see #870 --- modoboa/core/tests.py | 2 +- test_data/base.ldif | 13 ++++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 481c9b2fc..369fad73f 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -80,7 +80,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): parameters.save_admin("LDAP_AUTH_METHOD", "directbind") parameters.save_admin( "LDAP_USER_DN_TEMPLATE", "%(user)s,dc=example,dc=com") - username = "testuser@example.com" + username = "testuser2@example.com" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) diff --git a/test_data/base.ldif b/test_data/base.ldif index f236cebbf..4cdab372b 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -3,7 +3,7 @@ objectClass: dcObject objectClass: organizationalUnit ou: users -dn: mail=testuser@example.com,dc=example,dc=com +dn: cn=testuser,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person @@ -13,3 +13,14 @@ givenName: Test sn: User mail: testuser@example.com userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP + +dn: mail=testuser2@example.com,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: testuser +givenName: Test +sn: User +mail: testuser2@example.com +userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP From 27e82443e203c6511bdde1b68f7ed1ea94aa5d7f Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 18:16:40 +0200 Subject: [PATCH 07/11] LDIF update. see #870 --- test_data/base.ldif | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/test_data/base.ldif b/test_data/base.ldif index 4cdab372b..b269ceb14 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -1,9 +1,36 @@ dn: dc=example,dc=com objectClass: dcObject objectClass: organizationalUnit +ou: test + +dn: ou=groups,dc=example,dc=com +objectClass: organizationalUnit +ou: groups + +dn: ou=users,dc=example,dc=com +objectClass: organizationalUnit ou: users -dn: cn=testuser,dc=example,dc=com +dn: cn=admins,ou=groups,dc=example,dc=com +cn: admins +gidnumber: 10001 +memberuid: mailadmin +objectclass: posixGroup +objectclass: top + +dn: cn=mailadmin,ou=users,dc=example,dc=com +objectClass: inetOrgPerson +objectClass: organizationalPerson +objectClass: person +objectClass: top +cn: mailadmin +uid: mailadmin +givenName: Mail +sn: Admin +mail: mailadmin@example.com +userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP + +dn: cn=testuser,ou=users,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person @@ -14,12 +41,11 @@ sn: User mail: testuser@example.com userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP -dn: mail=testuser2@example.com,dc=example,dc=com +dn: mail=testuser2@example.com,ou=users,dc=example,dc=com objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top -cn: testuser givenName: Test sn: User mail: testuser2@example.com From 88b472f78e9a8c67a1a2c0d3bfed203850b3ce44 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 18:26:33 +0200 Subject: [PATCH 08/11] Fix LDIF. see #870 --- test_data/base.ldif | 1 + 1 file changed, 1 insertion(+) diff --git a/test_data/base.ldif b/test_data/base.ldif index b269ceb14..4f72d7e45 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -46,6 +46,7 @@ objectClass: inetOrgPerson objectClass: organizationalPerson objectClass: person objectClass: top +cn: testuser2 givenName: Test sn: User mail: testuser2@example.com From cd496286504c17eab34463efe5a7839ec8e05207 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 19:15:38 +0200 Subject: [PATCH 09/11] Try to fix unit tests. see #870 --- modoboa/core/tests.py | 6 +++--- test_data/base.ldif | 11 ----------- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 369fad73f..20cef5a53 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -69,7 +69,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): self.client.logout() parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") parameters.save_admin("LDAP_BIND_PASSWORD", "test") - parameters.save_admin("LDAP_SEARCH_BASE", "dc=example,dc=com") + parameters.save_admin("LDAP_SEARCH_BASE", "ou=usersdc=example,dc=com") username = "testuser@example.com" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) @@ -79,8 +79,8 @@ class LDAPAuthenticationTestCase(ModoTestCase): self.client.logout() parameters.save_admin("LDAP_AUTH_METHOD", "directbind") parameters.save_admin( - "LDAP_USER_DN_TEMPLATE", "%(user)s,dc=example,dc=com") - username = "testuser2@example.com" + "LDAP_USER_DN_TEMPLATE", "%(user)s,ou=users,dc=example,dc=com") + username = "testuser" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) diff --git a/test_data/base.ldif b/test_data/base.ldif index 4f72d7e45..28bfb14c6 100644 --- a/test_data/base.ldif +++ b/test_data/base.ldif @@ -40,14 +40,3 @@ givenName: Test sn: User mail: testuser@example.com userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP - -dn: mail=testuser2@example.com,ou=users,dc=example,dc=com -objectClass: inetOrgPerson -objectClass: organizationalPerson -objectClass: person -objectClass: top -cn: testuser2 -givenName: Test -sn: User -mail: testuser2@example.com -userPassword: {SSHA}AIzygLSXlArhAMzddUriXQxf7UlkqopP From 6c6d4da316cbce3012de04e9518543ef36da0a18 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 19:26:14 +0200 Subject: [PATCH 10/11] Try to fix unit tests. see #870 --- modoboa/core/tests.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index 20cef5a53..a23c7a8d4 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -69,7 +69,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): self.client.logout() parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") parameters.save_admin("LDAP_BIND_PASSWORD", "test") - parameters.save_admin("LDAP_SEARCH_BASE", "ou=usersdc=example,dc=com") + parameters.save_admin("LDAP_SEARCH_BASE", "ou=users,dc=example,dc=com") username = "testuser@example.com" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) @@ -79,7 +79,7 @@ class LDAPAuthenticationTestCase(ModoTestCase): self.client.logout() parameters.save_admin("LDAP_AUTH_METHOD", "directbind") parameters.save_admin( - "LDAP_USER_DN_TEMPLATE", "%(user)s,ou=users,dc=example,dc=com") + "LDAP_USER_DN_TEMPLATE", "cn=%(user)s,ou=users,dc=example,dc=com") username = "testuser" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) From 17377334a7394462f867dcb6a723ef087a182bbe Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Tue, 3 May 2016 20:23:32 +0200 Subject: [PATCH 11/11] Fix unit tests. see #870 --- modoboa/core/tests.py | 32 +++++++++++++++++++++++++++----- 1 file changed, 27 insertions(+), 5 deletions(-) diff --git a/modoboa/core/tests.py b/modoboa/core/tests.py index a23c7a8d4..ca0bfedc1 100644 --- a/modoboa/core/tests.py +++ b/modoboa/core/tests.py @@ -47,10 +47,9 @@ class LDAPAuthenticationTestCase(ModoTestCase): """Validate LDAP authentication scenarios.""" - @classmethod - def setUpTestData(cls): + def setUp(self): """Create test data.""" - super(LDAPAuthenticationTestCase, cls).setUpTestData() + super(LDAPAuthenticationTestCase, self).setUp() parameters.save_admin( "AUTHENTICATION_TYPE", "ldap") parameters.save_admin("LDAP_SERVER_PORT", "3389") @@ -58,21 +57,31 @@ class LDAPAuthenticationTestCase(ModoTestCase): def check_created_user(self, username, group="SimpleUsers", with_mb=True): """Check that created user is valid.""" user = models.User.objects.get(username=username) - self.assertEqual(user.email, username) self.assertEqual(user.group, group) if with_mb: + self.assertEqual(user.email, username) self.assertEqual(user.mailbox.domain.name, "example.com") self.assertEqual(user.mailbox.full_address, username) + @override_settings(AUTH_LDAP_USER_DN_TEMPLATE=None) def test_searchbind_authentication(self): """Test the bind&search method.""" self.client.logout() + parameters.save_admin("LDAP_AUTH_METHOD", "searchbind") parameters.save_admin("LDAP_BIND_DN", "cn=admin,dc=example,dc=com") parameters.save_admin("LDAP_BIND_PASSWORD", "test") parameters.save_admin("LDAP_SEARCH_BASE", "ou=users,dc=example,dc=com") username = "testuser@example.com" self.assertTrue(self.client.login(username=username, password="test")) self.check_created_user(username) + self.client.logout() + + parameters.save_admin("LDAP_ADMIN_GROUPS", "admins") + parameters.save_admin( + "LDAP_GROUPS_SEARCH_BASE", "ou=groups,dc=example,dc=com") + username = "mailadmin@example.com" + self.assertTrue(self.client.login(username=username, password="test")) + self.check_created_user(username, "DomainAdmins") def test_directbind_authentication(self): """Test the directbind method.""" @@ -80,9 +89,22 @@ class LDAPAuthenticationTestCase(ModoTestCase): parameters.save_admin("LDAP_AUTH_METHOD", "directbind") parameters.save_admin( "LDAP_USER_DN_TEMPLATE", "cn=%(user)s,ou=users,dc=example,dc=com") + + # 1: must fail because usernames of simple users must be email + # addresses username = "testuser" + with self.assertRaises(TypeError): + self.assertTrue(self.client.login( + username=username, password="test")) + + # 1: must work because usernames of domain admins are not + # always email addresses + parameters.save_admin("LDAP_ADMIN_GROUPS", "admins") + parameters.save_admin( + "LDAP_GROUPS_SEARCH_BASE", "ou=groups,dc=example,dc=com") + username = "mailadmin" self.assertTrue(self.client.login(username=username, password="test")) - self.check_created_user(username) + self.check_created_user(username, "DomainAdmins", False) class ProfileTestCase(ModoTestCase):