File: test_ldap_authentication.py

package info (click to toggle)
tryton-modules-ldap-authentication 3.4.0-1
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 272 kB
  • ctags: 57
  • sloc: python: 330; makefile: 6
file content (99 lines) | stat: -rw-r--r-- 3,598 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#This file is part of Tryton.  The COPYRIGHT file at the top level of
#this repository contains the full copyright notices and license terms.
import unittest

from mock import patch
import ldap

import trytond.tests.test_tryton
from trytond.tests.test_tryton import test_depends
from trytond.tests.test_tryton import POOL, DB_NAME, USER, CONTEXT
from trytond.transaction import Transaction
from trytond.config import config

from trytond.modules.ldap_authentication.res import parse_ldap_url

section = 'ldap_authentication'


class LDAPAuthenticationTestCase(unittest.TestCase):
    'Test LDAPAuthentication module'

    def setUp(self):
        trytond.tests.test_tryton.install_module('ldap_authentication')
        config.add_section(section)
        config.set(section, 'uri', 'ldap://localhost/dc=tryton,dc=org')

    def tearDown(self):
        config.remove_section(section)

    def test0006depends(self):
        'Test depends'
        test_depends()

    def test_user_get_login(self):
        'Test User.get_login'
        with Transaction().start(DB_NAME, USER, context=CONTEXT):
            User = POOL.get('res.user')

            @patch.object(ldap, 'initialize')
            @patch.object(User, 'ldap_search_user')
            def get_login(login, password, find, ldap_search_user, initialize):
                con = initialize.return_value
                con.simple_bind_s.return_value = True
                if find:
                    ldap_search_user.return_value = [('dn', {})]
                else:
                    ldap_search_user.return_value = None
                return User.get_login(login, password)

            # Test existing user
            self.assertEqual(get_login('admin', 'admin', False), USER)
            self.assertEqual(get_login('admin', 'admin', True), USER)

            # Test new user
            self.assertFalse(get_login('foo', 'bar', False))
            self.assertFalse(get_login('foo', 'bar', True))

            # Test create new user
            config.set(section, 'create_user', 'True')
            user_id = get_login('foo', 'bar', True)
            foo, = User.search([('login', '=', 'foo')])
            self.assertEqual(user_id, foo.id)
            self.assertEqual(foo.name, 'foo')

    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']})


def suite():
    suite = trytond.tests.test_tryton.suite()
    suite.addTests(unittest.TestLoader().loadTestsFromTestCase(
        LDAPAuthenticationTestCase))
    return suite