cubicweb/server/test/unittest_ldapsource.py
author Denis Laxalde <denis.laxalde@logilab.fr>
Mon, 19 Jun 2017 18:15:28 +0200
changeset 12188 fea018b2e056
parent 12153 0ff0aff4413d
child 12222 52f395015ff9
permissions -rw-r--r--
[web] Set response status to 400 when appropriate in ajax controller When this is clearly a client error, set status to 400. Otherwise, keep the default value for RemoteCallFailed (status=500).
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11764
diff changeset
     1
# copyright 2003-2016 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     2
# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     3
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     4
# This file is part of CubicWeb.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     5
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     6
# CubicWeb is free software: you can redistribute it and/or modify it under the
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     7
# terms of the GNU Lesser General Public License as published by the Free
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     8
# Software Foundation, either version 2.1 of the License, or (at your option)
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
     9
# any later version.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    10
#
5424
8ecbcbff9777 replace logilab-common by CubicWeb in disclaimer
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5421
diff changeset
    11
# CubicWeb is distributed in the hope that it will be useful, but WITHOUT
5421
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    12
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    13
# FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License for more
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    14
# details.
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    15
#
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    16
# You should have received a copy of the GNU Lesser General Public License along
8167de96c523 proper licensing information (LGPL-2.1). Hope I get it right this time.
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
    17
# with CubicWeb.  If not, see <http://www.gnu.org/licenses/>.
10911
cff2dbc33eff [server/test] document expected packages to run ldap tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10908
diff changeset
    18
"""cubicweb.server.sources.ldapfeed unit and functional tests
cff2dbc33eff [server/test] document expected packages to run ldap tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10908
diff changeset
    19
cff2dbc33eff [server/test] document expected packages to run ldap tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10908
diff changeset
    20
Those tests expect to have slapd, python-ldap3 and ldapscripts packages installed.
cff2dbc33eff [server/test] document expected packages to run ldap tests
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10908
diff changeset
    21
"""
11767
432f87a63057 flake8 and all
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11764
diff changeset
    22
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 9794
diff changeset
    23
from __future__ import print_function
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    24
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    25
import os
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    26
import sys
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    27
import shutil
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    28
import time
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    29
import subprocess
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
    30
import tempfile
10950
282880f81311 [test] Skip ldap source tests if slapd is not available
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 10912
diff changeset
    31
import unittest
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    32
from os.path import join
3855
dbd37c10f865 try to update ldap tests to make them work from the DMZ (eg using another ldap directory)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
    33
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10609
diff changeset
    34
from six import string_types
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10589
diff changeset
    35
from six.moves import range
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10589
diff changeset
    36
12153
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
    37
from cubicweb import AuthenticationError, ValidationError
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
    38
from cubicweb.devtools.testlib import CubicWebTC
6986
18343456ee49 [ldap test] use get_available_port from cw.devtools.httptest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6985
diff changeset
    39
from cubicweb.devtools.httptest import get_available_port
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    40
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    41
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    42
CONFIG_LDAPFEED = u'''
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    43
user-base-dn=ou=People,dc=cubicweb,dc=test
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    44
group-base-dn=ou=Group,dc=cubicweb,dc=test
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    45
user-attrs-map=uid=login,mail=email,userPassword=upassword
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    46
group-attrs-map=cn=name,memberUid=member
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    47
'''
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
    48
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    49
URL = None
3855
dbd37c10f865 try to update ldap tests to make them work from the DMZ (eg using another ldap directory)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3587
diff changeset
    50
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    51
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    52
def create_slapd_configuration(cls):
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    53
    global URL
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
    54
    slapddir = tempfile.mkdtemp('cw-unittest-ldap')
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    55
    config = cls.config
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    56
    slapdconf = join(config.apphome, "slapd.conf")
10614
57dfde80df11 [py3k] file → open
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
    57
    confin = open(join(config.apphome, "slapd.conf.in")).read()
57dfde80df11 [py3k] file → open
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10612
diff changeset
    58
    confstream = open(slapdconf, 'w')
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
    59
    confstream.write(confin % {'apphome': config.apphome, 'testdir': slapddir})
6985
dda970c8a315 [test] generate slapd.conf to be cwd independant
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6888
diff changeset
    60
    confstream.close()
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    61
    # fill ldap server with some data
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    62
    ldiffile = join(config.apphome, "ldap_test.ldif")
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    63
    config.info('Initing ldap database')
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    64
    cmdline = ['/usr/sbin/slapadd', '-f', slapdconf, '-l', ldiffile, '-c']
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    65
    PIPE = subprocess.PIPE
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    66
    slapproc = subprocess.Popen(cmdline, stdout=PIPE, stderr=PIPE)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    67
    stdout, stderr = slapproc.communicate()
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    68
    if slapproc.returncode:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 9794
diff changeset
    69
        print('slapadd returned with status: %s'
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 9794
diff changeset
    70
              % slapproc.returncode, file=sys.stderr)
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    71
        sys.stdout.write(stdout)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    72
        sys.stderr.write(stderr)
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    73
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    74
    # ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f')
10609
e2d8e81bfe68 [py3k] import range using six.moves
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10589
diff changeset
    75
    port = get_available_port(range(9000, 9100))
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    76
    host = 'localhost:%s' % port
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    77
    ldapuri = 'ldap://%s' % host
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    78
    cmdline = ["/usr/sbin/slapd", "-f", slapdconf, "-h", ldapuri, "-d", "0"]
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    79
    config.info('Starting slapd:', ' '.join(cmdline))
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    80
    PIPE = subprocess.PIPE
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    81
    cls.slapd_process = subprocess.Popen(cmdline, stdout=PIPE, stderr=PIPE)
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    82
    time.sleep(0.2)
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    83
    if cls.slapd_process.poll() is None:
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
    84
        config.info('slapd started with pid %s', cls.slapd_process.pid)
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    85
    else:
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    86
        raise EnvironmentError('Cannot start slapd with cmdline="%s" (from directory "%s")' %
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    87
                               (" ".join(cmdline), os.getcwd()))
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    88
    URL = u'ldap://%s' % host
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
    89
    return slapddir
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    90
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    91
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    92
def terminate_slapd(cls):
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    93
    config = cls.config
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    94
    if cls.slapd_process and cls.slapd_process.returncode is None:
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    95
        config.info('terminating slapd')
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    96
        if hasattr(cls.slapd_process, 'terminate'):
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
    97
            cls.slapd_process.terminate()
6986
18343456ee49 [ldap test] use get_available_port from cw.devtools.httptest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6985
diff changeset
    98
        else:
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
    99
            import signal
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
   100
            os.kill(cls.slapd_process.pid, signal.SIGTERM)
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   101
        stdout, stderr = cls.slapd_process.communicate()
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   102
        if cls.slapd_process.returncode:
10589
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 9794
diff changeset
   103
            print('slapd returned with status: %s'
7c23b7de2b8d [py3k] print function
Samuel Trégouët <samuel.tregouet@logilab.fr>
parents: 9794
diff changeset
   104
                  % cls.slapd_process.returncode, file=sys.stderr)
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   105
            sys.stdout.write(stdout)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   106
            sys.stderr.write(stderr)
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   107
        config.info('DONE')
11270
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   108
    try:
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   109
        shutil.rmtree(cls._tmpdir)
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   110
    except:
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   111
        pass
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   112
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   113
12136
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   114
def ldapsource(cnx):
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   115
    return cnx.find('CWSource', type=u'ldapfeed').one()
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   116
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   117
12143
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   118
def update_source_config(source, options):
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   119
    config = source.dictconfig
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   120
    config.update(options)
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   121
    source.cw_set(config=u'\n'.join('%s=%s' % x for x in config.items()))
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   122
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   123
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   124
class LDAPFeedTestBase(CubicWebTC):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   125
    test_db_id = 'ldap-feed'
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   126
    loglevel = 'ERROR'
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   127
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   128
    @classmethod
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   129
    def setUpClass(cls):
11270
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   130
        super(LDAPFeedTestBase, cls).setUpClass()
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   131
        cls.init_slapd()
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   132
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   133
    @classmethod
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   134
    def tearDownClass(cls):
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   135
        cls.terminate_slapd()
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   136
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   137
    @classmethod
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   138
    def init_slapd(cls):
11073
d7e8912549cd [test] Skip LDAP tests if any of the underlying programs is not found
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   139
        for path in ('/usr/sbin/slapd',
d7e8912549cd [test] Skip LDAP tests if any of the underlying programs is not found
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   140
                     '/usr/sbin/slapadd',
d7e8912549cd [test] Skip LDAP tests if any of the underlying programs is not found
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   141
                     '/usr/bin/ldapmodify'):
d7e8912549cd [test] Skip LDAP tests if any of the underlying programs is not found
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   142
            if not os.path.exists(path):
d7e8912549cd [test] Skip LDAP tests if any of the underlying programs is not found
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 11057
diff changeset
   143
                raise unittest.SkipTest('%s not found' % path)
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   144
        from cubicweb.cwctl import init_cmdline_log_threshold
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   145
        init_cmdline_log_threshold(cls.config, cls.loglevel)
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
   146
        cls._tmpdir = create_slapd_configuration(cls)
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   147
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   148
    @classmethod
11270
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   149
    def terminate_slapd(cls):
8434
39c5bb4dcc59 [ldapfeed] do not crash on ldap user deletion + pull + already deactivated users, cleanups (closes #2392933)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8430
diff changeset
   150
        terminate_slapd(cls)
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   151
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   152
    @classmethod
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   153
    def pre_setup_database(cls, cnx, config):
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   154
        cnx.create_entity('CWSource', name=u'ldap', type=u'ldapfeed', parser=u'ldapfeed',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   155
                          url=URL, config=CONFIG_LDAPFEED)
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   156
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   157
        cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   158
        return cls.pull(cnx)
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   159
12132
be2c14ea2736 [server/test] Turn "pull" method of LDAPFeedTestBase into a staticmethod
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12058
diff changeset
   160
    @staticmethod
be2c14ea2736 [server/test] Turn "pull" method of LDAPFeedTestBase into a staticmethod
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12058
diff changeset
   161
    def pull(cnx):
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   162
        lfsource = cnx.repo.source_by_uri('ldap')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   163
        stats = lfsource.pull_data(cnx, force=True, raise_on_error=True)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   164
        cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   165
        return stats
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   166
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   167
    def setup_database(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   168
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   169
            cnx.execute('DELETE Any E WHERE E cw_source S, S name "ldap"')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   170
            cnx.execute('SET S config %(conf)s, S url %(url)s '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   171
                        'WHERE S is CWSource, S name "ldap"',
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   172
                        {"conf": CONFIG_LDAPFEED, 'url': URL})
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   173
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   174
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   175
            self.pull(cnx)
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   176
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   177
    def add_ldap_entry(self, dn, mods):
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   178
        """
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   179
        add an LDAP entity
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   180
        """
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   181
        modcmd = ['dn: %s' % dn, 'changetype: add']
10662
10942ed172de [py3k] dict.iteritems → dict.items
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10651
diff changeset
   182
        for key, values in mods.items():
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10609
diff changeset
   183
            if isinstance(values, string_types):
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   184
                values = [values]
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   185
            for value in values:
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   186
                modcmd.append('%s: %s' % (key, value))
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   187
        self._ldapmodify(modcmd)
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   188
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   189
    def delete_ldap_entry(self, dn):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   190
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   191
        delete an LDAP entity
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   192
        """
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   193
        modcmd = ['dn: %s' % dn, 'changetype: delete']
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   194
        self._ldapmodify(modcmd)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   195
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   196
    def update_ldap_entry(self, dn, mods):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   197
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   198
        modify one or more attributes of an LDAP entity
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   199
        """
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   200
        modcmd = ['dn: %s' % dn, 'changetype: modify']
10662
10942ed172de [py3k] dict.iteritems → dict.items
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10651
diff changeset
   201
        for (kind, key), values in mods.items():
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   202
            modcmd.append('%s: %s' % (kind, key))
10612
84468b90e9c1 [py3k] basestring → six.string_types
Rémi Cardona <remi.cardona@logilab.fr>
parents: 10609
diff changeset
   203
            if isinstance(values, string_types):
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   204
                values = [values]
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   205
            for value in values:
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   206
                modcmd.append('%s: %s' % (key, value))
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   207
            modcmd.append('-')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   208
        self._ldapmodify(modcmd)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   209
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   210
    def _ldapmodify(self, modcmd):
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   211
        uri = self.repo.source_by_uri('ldap').urls[0]
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   212
        updatecmd = ['ldapmodify', '-H', uri, '-v', '-x', '-D',
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   213
                     'cn=admin,dc=cubicweb,dc=test', '-w', 'cw']
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   214
        PIPE = subprocess.PIPE
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   215
        p = subprocess.Popen(updatecmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
10768
99689a5862ea [py3k] make ldapfeed tests pass
Julien Cristau <julien.cristau@logilab.fr>
parents: 10662
diff changeset
   216
        p.stdin.write('\n'.join(modcmd).encode('ascii'))
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   217
        p.stdin.close()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   218
        if p.wait():
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   219
            raise RuntimeError("ldap update failed: %s" % ('\n'.join(p.stderr.readlines())))
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   220
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   221
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   222
class CheckWrongGroup(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   223
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   224
    A testcase for situations where the default group for CWUser
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   225
    created from LDAP is wrongly configured.
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   226
    """
8679
cf4dacc80976 [ldapfeed] don't crash if one specify an unexisting group in the configuration. Closes #2538399
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8639
diff changeset
   227
cf4dacc80976 [ldapfeed] don't crash if one specify an unexisting group in the configuration. Closes #2538399
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8639
diff changeset
   228
    def test_wrong_group(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   229
        with self.admin_access.repo_cnx() as cnx:
12136
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   230
            source = ldapsource(cnx)
8679
cf4dacc80976 [ldapfeed] don't crash if one specify an unexisting group in the configuration. Closes #2538399
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8639
diff changeset
   231
            # inject a bogus group here, along with at least a valid one
12151
569dce882f60 [test] Fix option name in ldap wrong group test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12146
diff changeset
   232
            options = {'user-default-group': 'thisgroupdoesnotexists,users'}
12143
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   233
            update_source_config(source, options)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   234
            cnx.commit()
8679
cf4dacc80976 [ldapfeed] don't crash if one specify an unexisting group in the configuration. Closes #2538399
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8639
diff changeset
   235
            # here we emitted an error log entry
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   236
            source.repo_source.pull_data(cnx, force=True, raise_on_error=True)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   237
            cnx.commit()
8679
cf4dacc80976 [ldapfeed] don't crash if one specify an unexisting group in the configuration. Closes #2538399
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8639
diff changeset
   238
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   239
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   240
class LDAPFeedUserTC(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   241
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   242
    A testcase for CWUser support in ldapfeed (basic tests and authentication).
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   243
    """
8684
6c7c2a02c9a0 [ldap test] fix bad merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8683
diff changeset
   244
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   245
    def assertMetadata(self, entity):
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   246
        self.assertTrue(entity.creation_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   247
        self.assertTrue(entity.modification_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   248
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   249
    def test_authenticate(self):
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   250
        source = self.repo.source_by_uri('ldap')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   251
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   252
            # ensure we won't be logged against
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   253
            self.assertRaises(AuthenticationError,
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   254
                              source.authenticate, cnx, 'toto', 'toto')
11262
25f9a76ddf50 [test] add a test to ensure we get an AuthenticationError with ldapfeed
David Douard <david.douard@logilab.fr>
parents: 10950
diff changeset
   255
            self.assertRaises(AuthenticationError,
25f9a76ddf50 [test] add a test to ensure we get an AuthenticationError with ldapfeed
David Douard <david.douard@logilab.fr>
parents: 10950
diff changeset
   256
                              source.authenticate, cnx, 'syt', 'toto')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   257
            self.assertTrue(source.authenticate(cnx, 'syt', 'syt'))
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   258
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   259
    def test_base(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   260
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   261
            # check a known one
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   262
            rset = cnx.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   263
            e = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   264
            self.assertEqual(e.login, 'syt')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   265
            e.complete()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   266
            self.assertMetadata(e)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   267
            self.assertEqual(e.firstname, None)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   268
            self.assertEqual(e.surname, None)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   269
            self.assertIn('users', set(g.name for g in e.in_group))
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   270
            self.assertEqual(e.owned_by[0].login, 'syt')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   271
            self.assertEqual(e.created_by, ())
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   272
            addresses = [pe.address for pe in e.use_email]
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   273
            addresses.sort()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   274
            self.assertEqual(['sylvain.thenault@logilab.fr', 'syt@logilab.fr'],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   275
                             addresses)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   276
            self.assertIn(e.primary_email[0].address, ['sylvain.thenault@logilab.fr',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   277
                                                       'syt@logilab.fr'])
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   278
            # email content should be indexed on the user
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   279
            rset = cnx.execute('CWUser X WHERE X has_text "thenault"')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   280
            self.assertEqual(rset.rows, [[e.eid]])
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   281
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   282
    def test_copy_to_system_source(self):
8921
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   283
        "make sure we can 'convert' an LDAP user into a system one"
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   284
        with self.admin_access.repo_cnx() as cnx:
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   285
            source = self.repo.source_by_uri('ldap')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   286
            eid = cnx.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   287
            cnx.execute('SET X cw_source S WHERE X eid %(x)s, S name "system"', {'x': eid})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   288
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   289
            rset = cnx.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   290
            self.assertEqual(len(rset), 1)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   291
            e = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   292
            self.assertEqual(e.eid, eid)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   293
            self.assertEqual(e.cw_source[0].name, 'system')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   294
            self.assertTrue(e.creation_date)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   295
            self.assertTrue(e.modification_date)
11755
96ced95e4002 [ldap] Stop using entities table in ldap source authentication and parser
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11719
diff changeset
   296
            source.pull_data(cnx, raise_on_error=True)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   297
            rset = cnx.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   298
            self.assertEqual(len(rset), 1)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   299
            self.assertTrue(self.repo.system_source.authenticate(cnx, 'syt', password='syt'))
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   300
            # make sure the pull from ldap have not "reverted" user as a ldap-feed user
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   301
            # and that the password stored in the system source is not empty or so
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   302
            user = cnx.execute('CWUser U WHERE U login "syt"').get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   303
            user.cw_clear_all_caches()
11764
6ab14a1afb65 [entity] Reimplement and deprecate entity.cw_metainformation
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11762
diff changeset
   304
            self.assertEqual(user.cw_source[0].name, 'system')
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   305
            cu = cnx.system_sql("SELECT cw_upassword FROM cw_cwuser WHERE cw_login='syt';")
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   306
            pwd = cu.fetchall()[0][0]
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   307
            self.assertIsNotNone(pwd)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   308
            self.assertTrue(str(pwd))
8921
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   309
12153
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   310
    def test_bad_config(self):
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   311
        with self.admin_access.cnx() as cnx:
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   312
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   313
            with self.assertRaises(ValidationError) as cm:
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   314
                cnx.create_entity(
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   315
                    'CWSource', name=u'erroneous', type=u'ldapfeed', parser=u'ldapfeed',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   316
                    url=u'ldap.com', config=CONFIG_LDAPFEED)
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   317
            self.assertIn('badly formatted url',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   318
                          str(cm.exception))
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   319
            cnx.rollback()
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   320
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   321
            with self.assertRaises(ValidationError) as cm:
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   322
                cnx.create_entity(
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   323
                    'CWSource', name=u'erroneous', type=u'ldapfeed', parser=u'ldapfeed',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   324
                    url=u'http://ldap.com', config=CONFIG_LDAPFEED)
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   325
            self.assertIn('unsupported protocol',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   326
                          str(cm.exception))
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   327
            cnx.rollback()
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   328
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   329
            with self.assertRaises(ValidationError) as cm:
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   330
                cnx.create_entity(
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   331
                    'CWSource', name=u'erroneous', type=u'ldapfeed', parser=u'ldapfeed',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   332
                    url=u'ldap://host1\nldap://host2', config=CONFIG_LDAPFEED)
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   333
            self.assertIn('can only have one url',
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   334
                          str(cm.exception))
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   335
            cnx.rollback()
0ff0aff4413d [sources] Check source's url attribute value on creation/modification
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12151
diff changeset
   336
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   337
11719
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   338
class LDAPGeneratePwdTC(LDAPFeedTestBase):
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   339
    """
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   340
    A testcase for password generation on CWUser when none is imported
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   341
    """
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   342
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   343
    def setup_database(self):
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   344
        with self.admin_access.repo_cnx() as cnx:
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   345
            lfsource = cnx.repo.source_by_uri('ldap')
11719
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   346
            del lfsource.user_attrs['userPassword']
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   347
        super(LDAPGeneratePwdTC, self).setup_database()
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   348
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   349
    def test_no_password(self):
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   350
        with self.admin_access.repo_cnx() as cnx:
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   351
            cu = cnx.system_sql("SELECT cw_upassword FROM cw_cwuser WHERE cw_login='syt';")
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   352
            pwd = cu.fetchall()[0][0]
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   353
            self.assertTrue(pwd)
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   354
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   355
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   356
class LDAPFeedUserDeletionTC(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   357
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   358
    A testcase for situations where users are deleted from or
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   359
    unavailable in the LDAP database.
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   360
    """
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   361
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   362
    def test_a_filter_inactivate(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   363
        """ filtered out people should be deactivated, unable to authenticate """
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   364
        with self.admin_access.repo_cnx() as cnx:
12136
6069ee7d4824 [server/test] Extract a "ldapsource" function in unittest_ldapsource.py
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12132
diff changeset
   365
            source = ldapsource(cnx)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   366
            # filter with adim's phone number
12143
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   367
            options = {'user-filter': '(%s=%s)' % ('telephonenumber', '109')}
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   368
            update_source_config(source, options)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   369
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   370
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   371
            self.pull(cnx)
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   372
            repo_source = self.repo.source_by_uri('ldap')
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   373
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   374
                              repo_source.authenticate, cnx, 'syt', 'syt')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   375
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   376
            self.assertEqual(cnx.execute('Any N WHERE U login "syt", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   377
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   378
                             'deactivated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   379
            self.assertEqual(cnx.execute('Any N WHERE U login "adim", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   380
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   381
                             'activated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   382
            # unfilter, syt should be activated again
12143
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   383
            source = ldapsource(cnx)
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   384
            options = {'user-filter': u''}
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   385
            update_source_config(source, options)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   386
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   387
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   388
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   389
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   390
            self.assertEqual(cnx.execute('Any N WHERE U login "syt", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   391
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   392
                             'activated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   393
            self.assertEqual(cnx.execute('Any N WHERE U login "adim", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   394
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   395
                             'activated')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   396
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   397
    def test_delete(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   398
        """ delete syt, pull, check deactivation, repull,
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   399
        read syt, pull, check activation
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   400
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   401
        self.delete_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   402
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   403
            self.pull(cnx)
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   404
            source = self.repo.source_by_uri('ldap')
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   405
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   406
                              source.authenticate, cnx, 'syt', 'syt')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   407
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   408
            self.assertEqual(cnx.execute('Any N WHERE U login "syt", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   409
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   410
                             'deactivated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   411
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   412
            # check that it doesn't choke
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   413
            self.pull(cnx)
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   414
        # reinsert syt
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   415
        self.add_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test',
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   416
                            {'objectClass': ['OpenLDAPperson', 'posixAccount', 'top',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   417
                                             'shadowAccount'],
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   418
                             'cn': 'Sylvain Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   419
                             'sn': 'Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   420
                             'gidNumber': '1004',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   421
                             'uid': 'syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   422
                             'homeDirectory': '/home/syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   423
                             'shadowFlag': '134538764',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   424
                             'uidNumber': '1004',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   425
                             'givenName': 'Sylvain',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   426
                             'telephoneNumber': '106',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   427
                             'displayName': 'sthenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   428
                             'gecos': 'Sylvain Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   429
                             'mail': ['sylvain.thenault@logilab.fr', 'syt@logilab.fr'],
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   430
                             'userPassword': 'syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   431
                             })
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   432
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   433
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   434
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   435
            self.assertEqual(cnx.execute('Any N WHERE U login "syt", '
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   436
                                         'U in_state S, S name N').rows[0][0],
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   437
                             'activated')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   438
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   439
    def test_reactivate_deleted(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   440
        # test reactivating BY HAND the user isn't enough to
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   441
        # authenticate, as the native source refuse to authenticate
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   442
        # user from other sources
12146
d540defa0591 [server] Add source_by_eid and source_by_uri methods to repository
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12143
diff changeset
   443
        repo_source = self.repo.source_by_uri('ldap')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   444
        self.delete_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   445
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   446
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   447
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   448
            # reactivate user (which source is still ldap-feed)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   449
            user = cnx.execute('CWUser U WHERE U login "syt"').get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   450
            user.cw_adapt_to('IWorkflowable').fire_transition('activate')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   451
            cnx.commit()
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   452
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   453
                              repo_source.authenticate, cnx, 'syt', 'syt')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   454
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   455
            # ok now let's try to make it a system user
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   456
            cnx.execute('SET X cw_source S WHERE X eid %(x)s, S name "system"', {'x': user.eid})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   457
            cnx.commit()
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   458
            # and that we can now authenticate again
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   459
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   460
                              repo_source.authenticate, cnx, 'syt', 'toto')
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   461
            self.assertTrue(self.repo.authenticate_user(cnx, 'syt', password='syt'))
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   462
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   463
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   464
class LDAPFeedGroupTC(LDAPFeedTestBase):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   465
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   466
    A testcase for group support in ldapfeed.
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   467
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   468
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   469
    def test_groups_exist(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   470
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   471
            rset = cnx.execute('CWGroup X WHERE X name "dir"')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   472
            self.assertEqual(len(rset), 1)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   473
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   474
            rset = cnx.execute('CWGroup X WHERE X cw_source S, S name "ldap"')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   475
            self.assertEqual(len(rset), 2)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   476
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   477
    def test_group_deleted(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   478
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   479
            rset = cnx.execute('CWGroup X WHERE X name "dir"')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   480
            self.assertEqual(len(rset), 1)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   481
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   482
    def test_in_group(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   483
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   484
            rset = cnx.execute('CWGroup X WHERE X name %(name)s', {'name': 'dir'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   485
            dirgroup = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   486
            self.assertEqual(set(['syt', 'adim']),
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   487
                             set([u.login for u in dirgroup.reverse_in_group]))
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   488
            rset = cnx.execute('CWGroup X WHERE X name %(name)s', {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   489
            logilabgroup = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   490
            self.assertEqual(set(['adim']),
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   491
                             set([u.login for u in logilabgroup.reverse_in_group]))
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   492
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   493
    def test_group_member_added(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   494
        with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   495
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   496
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   497
            rset = cnx.execute('Any L WHERE U in_group G, G name %(name)s, U login L',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   498
                               {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   499
            self.assertEqual(len(rset), 1)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   500
            self.assertEqual(rset[0][0], 'adim')
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   501
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   502
        try:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   503
            self.update_ldap_entry('cn=logilab,ou=Group,dc=cubicweb,dc=test',
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   504
                                   {('add', 'memberUid'): ['syt']})
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   505
            with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   506
                self.pull(cnx)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   507
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   508
            with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   509
                rset = cnx.execute('Any L WHERE U in_group G, G name %(name)s, U login L',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   510
                                   {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   511
                self.assertEqual(len(rset), 2)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   512
                members = set([u[0] for u in rset])
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   513
                self.assertEqual(set(['adim', 'syt']), members)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   514
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   515
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   516
            # back to normal ldap setup
11270
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   517
            self.terminate_slapd()
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   518
            self.init_slapd()
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   519
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   520
    def test_group_member_deleted(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   521
        with self.repo.internal_cnx() as cnx:
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   522
            self.pull(cnx)  # ensure we are sync'ed
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   523
        with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   524
            rset = cnx.execute('Any L WHERE U in_group G, G name %(name)s, U login L',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   525
                               {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   526
            self.assertEqual(len(rset), 1)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   527
            self.assertEqual(rset[0][0], 'adim')
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   528
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   529
        try:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   530
            self.update_ldap_entry('cn=logilab,ou=Group,dc=cubicweb,dc=test',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   531
                                   {('delete', 'memberUid'): ['adim']})
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   532
            with self.repo.internal_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   533
                self.pull(cnx)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   534
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   535
            with self.admin_access.repo_cnx() as cnx:
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   536
                rset = cnx.execute('Any L WHERE U in_group G, G name %(name)s, U login L',
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   537
                                   {'name': 'logilab'})
10908
f80428f94761 [server/test] display rset content on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10905
diff changeset
   538
                self.assertEqual(len(rset), 0, rset.rows)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   539
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   540
            # back to normal ldap setup
11270
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   541
            self.terminate_slapd()
a9dc97b87ced [devtools] set .config in setUpClass instead of using a cache in a classproperty
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11195
diff changeset
   542
            self.init_slapd()
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   543
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   544
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   545
if __name__ == '__main__':
10572
2d5f7780b568 [test] kill unused lgc.testlib imports
Julien Cristau <julien.cristau@logilab.fr>
parents: 9794
diff changeset
   546
    from logilab.common.testlib import unittest_main
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   547
    unittest_main()