Files
tryton/modules/ldap_authentication/tests/test_ldap_authentication.py
T

109 lines
4.0 KiB
Python
Raw Normal View History

2014-12-02 12:55:22 +01:00
# This file is part of Tryton. The COPYRIGHT file at the top level of
# this repository contains the full copyright notices and license terms.
2009-09-11 14:10:16 +02:00
import unittest
2018-06-26 19:11:48 +02:00
from unittest.mock import patch, ANY
2014-07-09 00:23:24 +02:00
2016-06-03 16:40:43 +02:00
import ldap3
2014-07-09 00:23:24 +02:00
2009-09-11 14:10:16 +02:00
import trytond.tests.test_tryton
2016-02-06 19:12:44 +01:00
from trytond.tests.test_tryton import ModuleTestCase, with_transaction
2014-09-20 13:58:31 +02:00
from trytond.config import config
2016-02-06 19:12:44 +01:00
from trytond.pool import Pool
2014-09-20 13:58:31 +02:00
from trytond.modules.ldap_authentication.res import parse_ldap_url
section = 'ldap_authentication'
2009-09-11 14:10:16 +02:00
2015-01-27 18:13:36 +01:00
class LDAPAuthenticationTestCase(ModuleTestCase):
2014-01-12 19:59:46 +01:00
'Test LDAPAuthentication module'
2015-01-27 18:13:36 +01:00
module = 'ldap_authentication'
2009-09-11 14:10:16 +02:00
def setUp(self):
2015-01-27 18:13:36 +01:00
super(LDAPAuthenticationTestCase, self).setUp()
methods = config.get('session', 'authentications', default='')
2016-05-31 12:55:54 +02:00
config.set('session', 'authentications', 'ldap')
self.addCleanup(config.set, 'session', 'authentications', methods)
2014-09-20 13:58:31 +02:00
config.add_section(section)
config.set(section, 'uri', 'ldap://localhost/dc=tryton,dc=org')
2016-05-31 12:55:54 +02:00
self.addCleanup(config.remove_section, section)
2009-09-11 14:10:16 +02:00
2016-02-06 19:12:44 +01:00
@with_transaction()
2014-07-09 00:23:24 +02:00
def test_user_get_login(self):
'Test User.get_login'
2016-02-06 19:12:44 +01:00
pool = Pool()
User = pool.get('res.user')
2014-07-09 00:23:24 +02:00
2016-06-03 16:40:43 +02:00
@patch.object(ldap3, 'Connection')
2016-02-06 19:12:44 +01:00
@patch.object(User, 'ldap_search_user')
2016-06-03 16:40:43 +02:00
def get_login(login, password, find, ldap_search_user, Connection):
con = Connection.return_value
con.bind.return_value = bool(find)
2016-02-06 19:12:44 +01:00
if find:
ldap_search_user.return_value = [('dn', {'uid': [find]})]
else:
ldap_search_user.return_value = None
2016-06-03 16:40:43 +02:00
user_id = User.get_login(login, {
2016-05-31 12:55:54 +02:00
'password': password,
})
2016-06-03 16:40:43 +02:00
if find:
Connection.assert_called_with(ANY, ANY, password)
return user_id
2014-07-09 00:23:24 +02:00
2016-02-06 19:12:44 +01:00
# Test existing user
user, = User.search([('login', '=', 'admin')])
self.assertEqual(get_login('admin', 'admin', 'admin'), user.id)
self.assertEqual(get_login('AdMiN', 'admin', 'admin'), user.id)
2014-07-09 00:23:24 +02:00
2016-02-06 19:12:44 +01:00
# Test new user
self.assertFalse(get_login('foo', 'bar', None))
self.assertFalse(get_login('foo', 'bar', 'foo'))
2014-07-09 00:23:24 +02:00
2016-02-06 19:12:44 +01:00
# Test create new user
config.set(section, 'create_user', 'True')
user_id = get_login('foo', 'bar', 'foo')
foo, = User.search([('login', '=', 'foo')])
self.assertEqual(user_id, foo.id)
self.assertEqual(foo.name, 'foo')
2014-07-09 00:23:24 +02:00
2016-02-06 19:12:44 +01:00
# Test create new user with different case
user_id = get_login('BaR', 'foo', 'bar')
bar, = User.search([('login', '=', 'bar')])
self.assertEqual(user_id, bar.id)
self.assertEqual(bar.name, 'bar')
2014-09-20 13:58:31 +02:00
def test_parse_ldap_url(self):
'Test parse_ldap_url'
self.assertEqual(
parse_ldap_url('ldap:///o=University%20of%20Michigan,c=US')[1],
'o=University of Michigan,c=US')
self.assertEqual(
parse_ldap_url(
'ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,c=US'
)[1],
'o=University of Michigan,c=US')
self.assertEqual(
parse_ldap_url(
'ldap://ldap.itd.umich.edu/o=University%20of%20Michigan,'
'c=US?postalAddress')[2],
'postalAddress')
self.assertEqual(
parse_ldap_url(
'ldap://host.com:6666/o=University%20of%20Michigan,'
'c=US??sub?(cn=Babs%20Jensen)')[3:5],
('sub', '(cn=Babs Jensen)'))
self.assertEqual(
parse_ldap_url(
'ldap:///??sub??bindname=cn=Manager%2co=Foo')[5],
{'bindname': ['cn=Manager,o=Foo']})
self.assertEqual(
parse_ldap_url(
'ldap:///??sub??!bindname=cn=Manager%2co=Foo')[5],
{'!bindname': ['cn=Manager,o=Foo']})
2012-04-03 20:07:06 +02:00
2009-09-11 14:10:16 +02:00
def suite():
2010-03-04 14:10:17 +01:00
suite = trytond.tests.test_tryton.suite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
LDAPAuthenticationTestCase))
return suite