cubicweb/server/test/unittest_ldapsource.py
author Sylvain Thénault <sylvain.thenault@logilab.fr>
Wed, 12 Apr 2017 17:26:27 +0200
branch3.25
changeset 12151 569dce882f60
parent 12146 d540defa0591
child 12153 0ff0aff4413d
permissions -rw-r--r--
[test] Fix option name in ldap wrong group test which wasn't actually testing what it expected (and nothing guarantee it does now, but that's another story). Fixing this will avoid failure once we properly check the configuration.
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
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    37
from cubicweb import AuthenticationError
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
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   310
11719
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   311
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
   312
    """
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   313
    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
   314
    """
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   315
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   316
    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
   317
        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
   318
            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
   319
            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
   320
        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
   321
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   322
    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
   323
        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
   324
            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
   325
            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
   326
            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
   327
36443c44b9a5 [ldapfeed] Fix crash when user's password has to be generated
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 11718
diff changeset
   328
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   329
class LDAPFeedUserDeletionTC(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   330
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   331
    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
   332
    unavailable in the LDAP database.
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   333
    """
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   334
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   335
    def test_a_filter_inactivate(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   336
        """ 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
   337
        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
   338
            source = ldapsource(cnx)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   339
            # 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
   340
            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
   341
            update_source_config(source, options)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   342
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   343
        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
   344
            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
   345
            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
   346
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   347
                              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
   348
        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
   349
            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
   350
                                         '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
   351
                             'deactivated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   352
            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
   353
                                         '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
   354
                             'activated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   355
            # 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
   356
            source = ldapsource(cnx)
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   357
            options = {'user-filter': u''}
a446124bcf3c [server] Drop update_config method of source
Denis Laxalde <denis.laxalde@logilab.fr>
parents: 12136
diff changeset
   358
            update_source_config(source, options)
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   359
            cnx.commit()
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   360
        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
   361
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   362
        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
   363
            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
   364
                                         '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
   365
                             'activated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   366
            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
   367
                                         '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
   368
                             'activated')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   369
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   370
    def test_delete(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   371
        """ delete syt, pull, check deactivation, repull,
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   372
        read syt, pull, check activation
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   373
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   374
        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
   375
        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
   376
            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
   377
            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
   378
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   379
                              source.authenticate, cnx, 'syt', 'syt')
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   380
        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
   381
            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
   382
                                         '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
   383
                             'deactivated')
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   384
        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
   385
            # check that it doesn't choke
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   386
            self.pull(cnx)
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   387
        # reinsert syt
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   388
        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
   389
                            {'objectClass': ['OpenLDAPperson', 'posixAccount', 'top',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   390
                                             'shadowAccount'],
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   391
                             'cn': 'Sylvain Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   392
                             'sn': 'Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   393
                             'gidNumber': '1004',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   394
                             'uid': 'syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   395
                             'homeDirectory': '/home/syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   396
                             'shadowFlag': '134538764',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   397
                             'uidNumber': '1004',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   398
                             'givenName': 'Sylvain',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   399
                             'telephoneNumber': '106',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   400
                             'displayName': 'sthenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   401
                             'gecos': 'Sylvain Thenault',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   402
                             '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
   403
                             'userPassword': 'syt',
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   404
                             })
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   405
        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
   406
            self.pull(cnx)
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
                             'activated')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   411
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   412
    def test_reactivate_deleted(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   413
        # 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
   414
        # 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
   415
        # 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
   416
        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
   417
        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
   418
        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
   419
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   420
        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
   421
            # 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
   422
            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
   423
            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
   424
            cnx.commit()
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   425
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   426
                              repo_source.authenticate, cnx, 'syt', 'syt')
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   427
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   428
            # 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
   429
            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
   430
            cnx.commit()
12044
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   431
            # 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
   432
            self.assertRaises(AuthenticationError,
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   433
                              repo_source.authenticate, cnx, 'syt', 'toto')
70bb46dfa87b [repo] Drop repo.new_session method
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 12042
diff changeset
   434
            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
   435
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   436
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   437
class LDAPFeedGroupTC(LDAPFeedTestBase):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   438
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   439
    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
   440
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   441
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   442
    def test_groups_exist(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   443
        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
   444
            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
   445
            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
   446
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   447
            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
   448
            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
   449
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   450
    def test_group_deleted(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   451
        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
   452
            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
   453
            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
   454
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   455
    def test_in_group(self):
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   456
        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
   457
            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
   458
            dirgroup = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   459
            self.assertEqual(set(['syt', 'adim']),
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   460
                             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
   461
            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
   462
            logilabgroup = rset.get_entity(0, 0)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   463
            self.assertEqual(set(['adim']),
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   464
                             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
   465
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   466
    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
   467
        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
   468
            self.pull(cnx)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   469
        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
   470
            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
   471
                               {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   472
            self.assertEqual(len(rset), 1)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   473
            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
   474
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   475
        try:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   476
            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
   477
                                   {('add', 'memberUid'): ['syt']})
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   478
            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
   479
                self.pull(cnx)
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   480
9793
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   481
            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
   482
                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
   483
                                   {'name': 'logilab'})
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   484
                self.assertEqual(len(rset), 2)
52647b05bda8 [tests/ldap] use the new connection api
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 9754
diff changeset
   485
                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
   486
                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
   487
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   488
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   489
            # 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
   490
            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
   491
            self.init_slapd()
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_deleted(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:
10905
adffe1308a8f [test/ldap] a bit of pep8
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10768
diff changeset
   495
            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
   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',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   504
                                   {('delete', 'memberUid'): ['adim']})
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'})
10908
f80428f94761 [server/test] display rset content on failure
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 10905
diff changeset
   511
                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
   512
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   513
            # 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
   514
            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
   515
            self.init_slapd()
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   516
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   517
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   518
if __name__ == '__main__':
10572
2d5f7780b568 [test] kill unused lgc.testlib imports
Julien Cristau <julien.cristau@logilab.fr>
parents: 9794
diff changeset
   519
    from logilab.common.testlib import unittest_main
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   520
    unittest_main()