server/test/unittest_ldapsource.py
author David Douard <david.douard@logilab.fr>
Mon, 29 Jul 2013 14:22:40 +0200
branchstable
changeset 9193 eaa58d1c7d5f
parent 9142 41fb930dc751
child 9146 9b58a6406a64
child 9282 1709dd30387c
permissions -rw-r--r--
[pkg] python-central has been removed from Debian
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8684
6c7c2a02c9a0 [ldap test] fix bad merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8683
diff changeset
     1
# copyright 2003-2012 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/>.
6434
d99b742a9c49 [test] fix ldap test when executed from certain hosts
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
    18
"""cubicweb.server.sources.ldapusers unit and functional tests"""
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    19
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    20
import os
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    21
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
    22
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
    23
import time
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
    24
from os.path import join, exists
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 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
    26
import tempfile
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
    27
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
    28
from logilab.common.testlib import TestCase, unittest_main, mock_object, Tags
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    29
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    30
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
    31
from cubicweb.devtools.testlib import CubicWebTC
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    32
from cubicweb.devtools.repotest import RQLGeneratorTC
6986
18343456ee49 [ldap test] use get_available_port from cw.devtools.httptest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6985
diff changeset
    33
from cubicweb.devtools.httptest import get_available_port
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
    34
from cubicweb.devtools import get_test_db_handler
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    35
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
    36
from cubicweb.server.sources.ldapuser import GlobTrFunc, UnknownEid, RQL2LDAPFilter
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
    37
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    38
CONFIG_LDAPFEED = u'''
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    39
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
    40
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
    41
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
    42
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
    43
'''
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
    44
CONFIG_LDAPUSER = u'''
8917
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
    45
user-base-dn=ou=People,dc=cubicweb,dc=test
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
    46
user-attrs-map=uid=login,mail=email,userPassword=upassword
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
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
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
    51
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
    52
    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
    53
    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
    54
    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
    55
    slapdconf = join(config.apphome, "slapd.conf")
6985
dda970c8a315 [test] generate slapd.conf to be cwd independant
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6888
diff changeset
    56
    confin = file(join(config.apphome, "slapd.conf.in")).read()
dda970c8a315 [test] generate slapd.conf to be cwd independant
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6888
diff changeset
    57
    confstream = file(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
    58
    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
    59
    confstream.close()
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
    60
    # 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
    61
    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
    62
    config.info('Initing ldap database')
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    63
    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
    64
    PIPE = subprocess.PIPE
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    65
    slapproc = subprocess.Popen(cmdline, stdout=PIPE, stderr=PIPE)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    66
    stdout, stderr = slapproc.communicate()
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    67
    if slapproc.returncode:
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    68
        print >> sys.stderr, ('slapadd returned with status: %s'
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    69
                              % slapproc.returncode)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    70
        sys.stdout.write(stdout)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    71
        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
    72
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    73
    #ldapuri = 'ldapi://' + join(basedir, "ldapi").replace('/', '%2f')
6986
18343456ee49 [ldap test] use get_available_port from cw.devtools.httptest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6985
diff changeset
    74
    port = get_available_port(xrange(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
    75
    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
    76
    ldapuri = 'ldap://%s' % host
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    77
    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
    78
    config.info('Starting slapd:', ' '.join(cmdline))
8902
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    79
    PIPE = subprocess.PIPE
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
    80
    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
    81
    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
    82
    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
    83
        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
    84
    else:
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
    85
        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
    86
                               (" ".join(cmdline), os.getcwd()))
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
    87
    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
    88
    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
    89
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
    90
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
    91
    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
    92
    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
    93
        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
    94
        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
    95
            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
    96
        else:
18343456ee49 [ldap test] use get_available_port from cw.devtools.httptest
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6985
diff changeset
    97
            import os, 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
    98
            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
    99
        stdout, stderr = cls.slapd_process.communicate()
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   100
        if cls.slapd_process.returncode:
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   101
            print >> sys.stderr, ('slapd returned with status: %s'
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   102
                                  % cls.slapd_process.returncode)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   103
            sys.stdout.write(stdout)
9edfa3660bf4 [ldap] quieter tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8901
diff changeset
   104
            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
   105
        config.info('DONE')
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   106
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   107
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   108
class LDAPFeedTestBase(CubicWebTC):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   109
    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
   110
    loglevel = 'ERROR'
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   111
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   112
    @classmethod
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   113
    def setUpClass(cls):
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   114
        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
   115
        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
   116
        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
   117
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   118
    @classmethod
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   119
    def tearDownClass(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
   120
        terminate_slapd(cls)
8681
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
   121
        try:
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
   122
            shutil.rmtree(cls._tmpdir)
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
   123
        except:
48731a0d3df8 [ldap test] move the slapd database directory to a tempdir (closes #2583993)
David Douard <david.douard@logilab.fr>
parents: 8680
diff changeset
   124
            pass
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   125
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   126
    @classmethod
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   127
    def pre_setup_database(cls, session, config):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   128
        session.create_entity('CWSource', name=u'ldap', type=u'ldapfeed', parser=u'ldapfeed',
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   129
                              url=URL, config=CONFIG_LDAPFEED)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   130
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   131
        session.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   132
        return cls._pull(session)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   133
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   134
    @classmethod
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   135
    def _pull(cls, session):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   136
        with session.repo.internal_session() as isession:
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   137
            lfsource = isession.repo.sources_by_uri['ldap']
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   138
            stats = lfsource.pull_data(isession, force=True, raise_on_error=True)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   139
            isession.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   140
            return stats
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   141
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   142
    def pull(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   143
        return self._pull(self.session)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   144
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   145
    def setup_database(self):
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   146
        with self.session.repo.internal_session(safe=True) as session:
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   147
            session.execute('DELETE Any E WHERE E cw_source S, S name "ldap"')
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   148
            session.execute('SET S config %(conf)s, S url %(url)s '
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   149
                            'WHERE S is CWSource, S name "ldap"',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   150
                            {"conf": CONFIG_LDAPFEED, 'url': URL} )
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   151
            session.commit()
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   152
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   153
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   154
    def add_ldap_entry(self, dn, mods):
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   155
        """
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   156
        add an LDAP entity
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   157
        """
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   158
        modcmd = ['dn: %s'%dn, 'changetype: add']
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   159
        for key, values in mods.iteritems():
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   160
            if isinstance(values, basestring):
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   161
                values = [values]
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   162
            for value in values:
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   163
                modcmd.append('%s: %s'%(key, value))
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   164
        self._ldapmodify(modcmd)
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   165
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   166
    def delete_ldap_entry(self, dn):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   167
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   168
        delete an LDAP entity
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   169
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   170
        modcmd = ['dn: %s'%dn, 'changetype: delete']
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   171
        self._ldapmodify(modcmd)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   172
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   173
    def update_ldap_entry(self, dn, mods):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   174
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   175
        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
   176
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   177
        modcmd = ['dn: %s'%dn, 'changetype: modify']
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   178
        for (kind, key), values in mods.iteritems():
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   179
            modcmd.append('%s: %s' % (kind, key))
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   180
            if isinstance(values, basestring):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   181
                values = [values]
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   182
            for value in values:
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   183
                modcmd.append('%s: %s'%(key, value))
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   184
            modcmd.append('-')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   185
        self._ldapmodify(modcmd)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   186
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   187
    def _ldapmodify(self, modcmd):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   188
        uri = self.repo.sources_by_uri['ldap'].urls[0]
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   189
        updatecmd = ['ldapmodify', '-H', uri, '-v', '-x', '-D',
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   190
                     '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
   191
        PIPE = subprocess.PIPE
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   192
        p = subprocess.Popen(updatecmd, stdin=PIPE, stdout=PIPE, stderr=PIPE)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   193
        p.stdin.write('\n'.join(modcmd))
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   194
        p.stdin.close()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   195
        if p.wait():
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   196
            raise RuntimeError("ldap update failed: %s"%('\n'.join(p.stderr.readlines())))
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
class CheckWrongGroup(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   199
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   200
    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
   201
    created from LDAP is wrongly configured.
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   202
    """
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
   203
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
   204
    def test_wrong_group(self):
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
   205
        with self.session.repo.internal_session(safe=True) as session:
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
   206
            source = self.session.execute('CWSource S WHERE S type="ldapfeed"').get_entity(0,0)
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
   207
            config = source.repo_source.check_config(source)
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
   208
            # inject a bogus group here, along with at least a valid one
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
   209
            config['user-default-group'] = ('thisgroupdoesnotexists','users')
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
   210
            source.repo_source.update_config(source, config)
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
   211
            session.commit(free_cnxset=False)
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
   212
            # here we emitted an error log entry
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
   213
            stats = source.repo_source.pull_data(session, force=True, raise_on_error=True)
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
   214
            session.commit()
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
   215
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   216
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   217
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   218
class LDAPFeedUserTC(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   219
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   220
    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
   221
    """
8684
6c7c2a02c9a0 [ldap test] fix bad merge
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8683
diff changeset
   222
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   223
    def assertMetadata(self, entity):
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   224
        self.assertTrue(entity.creation_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   225
        self.assertTrue(entity.modification_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   226
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   227
    def test_authenticate(self):
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   228
        source = self.repo.sources_by_uri['ldap']
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   229
        self.session.set_cnxset()
8229
b7bc631816f7 [ldapfeed] make authentication actually working
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8188
diff changeset
   230
        # ensure we won't be logged against
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   231
        self.assertRaises(AuthenticationError,
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   232
                          source.authenticate, self.session, 'toto', 'toto')
8229
b7bc631816f7 [ldapfeed] make authentication actually working
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8188
diff changeset
   233
        self.assertTrue(source.authenticate(self.session, 'syt', 'syt'))
b7bc631816f7 [ldapfeed] make authentication actually working
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8188
diff changeset
   234
        self.assertTrue(self.repo.connect('syt', password='syt'))
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   235
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   236
    def test_base(self):
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   237
        # check a known one
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   238
        rset = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   239
        e = rset.get_entity(0, 0)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   240
        self.assertEqual(e.login, 'syt')
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   241
        e.complete()
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   242
        self.assertMetadata(e)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   243
        self.assertEqual(e.firstname, None)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   244
        self.assertEqual(e.surname, None)
8921
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   245
        self.assertTrue('users' in [g.name for g in e.in_group])
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   246
        self.assertEqual(e.owned_by[0].login, 'syt')
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   247
        self.assertEqual(e.created_by, ())
8917
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   248
        addresses = [pe.address for pe in e.use_email]
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   249
        addresses.sort()
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   250
        self.assertEqual(['sylvain.thenault@logilab.fr', 'syt@logilab.fr'],
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   251
                         addresses)
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   252
        self.assertIn(e.primary_email[0].address, ['sylvain.thenault@logilab.fr',
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   253
                                                   'syt@logilab.fr'])
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   254
        # email content should be indexed on the user
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   255
        rset = self.sexecute('CWUser X WHERE X has_text "thenault"')
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   256
        self.assertEqual(rset.rows, [[e.eid]])
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   257
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   258
    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
   259
        "make sure we can 'convert' an LDAP user into a system one"
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   260
        source = self.repo.sources_by_uri['ldap']
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   261
        eid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   262
        self.sexecute('SET X cw_source S WHERE X eid %(x)s, S name "system"', {'x': eid})
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   263
        self.commit()
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   264
        source.reset_caches()
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   265
        rset = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   266
        self.assertEqual(len(rset), 1)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   267
        e = rset.get_entity(0, 0)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   268
        self.assertEqual(e.eid, eid)
8430
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   269
        self.assertEqual(e.cw_metainformation(), {'source': {'type': u'native',
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   270
                                                             'uri': u'system',
5bee87a14bb1 fix ldap removal handling in ldapfeed (closes #2376625 and #2385133)
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 8387
diff changeset
   271
                                                             'use-cwuri-as-url': False},
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   272
                                                  'type': 'CWUser',
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   273
                                                  'extid': None})
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   274
        self.assertEqual(e.cw_source[0].name, 'system')
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   275
        self.assertTrue(e.creation_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   276
        self.assertTrue(e.modification_date)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   277
        source.pull_data(self.session)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   278
        rset = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   279
        self.assertEqual(len(rset), 1)
8387
b59af20a868d [ldap] we may actually get back password from ldap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8386
diff changeset
   280
        self.assertTrue(self.repo.system_source.authenticate(
b59af20a868d [ldap] we may actually get back password from ldap
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8386
diff changeset
   281
                self.session, 'syt', password='syt'))
8921
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   282
        # make sure the pull from ldap have not "reverted" user as a ldap-feed user
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   283
        self.assertEqual(e.cw_metainformation(), {'source': {'type': u'native',
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   284
                                                             'uri': u'system',
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   285
                                                             'use-cwuri-as-url': False},
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   286
                                                  'type': 'CWUser',
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   287
                                                  'extid': None})
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   288
        # and that the password stored in the system source is not empty or so
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   289
        user = self.execute('CWUser U WHERE U login "syt"').get_entity(0, 0)
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   290
        user.cw_clear_all_caches()
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   291
        pwd = self.session.system_sql("SELECT cw_upassword FROM cw_cwuser WHERE cw_login='syt';").fetchall()[0][0]
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   292
        self.assertIsNotNone(pwd)
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   293
        self.assertTrue(str(pwd))
da46624a0880 [test/ldap] small improvement to ldapfeed unit tests
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8917
diff changeset
   294
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   295
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   296
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   297
class LDAPFeedUserDeletionTC(LDAPFeedTestBase):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   298
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   299
    A testcase for situations where users are deleted from or
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   300
    unavailabe in the LDAP database.
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   301
    """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   302
    def test_a_filter_inactivate(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   303
        """ filtered out people should be deactivated, unable to authenticate """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   304
        source = self.session.execute('CWSource S WHERE S type="ldapfeed"').get_entity(0,0)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   305
        config = source.repo_source.check_config(source)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   306
        # filter with adim's phone number
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   307
        config['user-filter'] = u'(%s=%s)' % ('telephoneNumber', '109')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   308
        source.repo_source.update_config(source, config)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   309
        self.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   310
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   311
        self.assertRaises(AuthenticationError, self.repo.connect, 'syt', password='syt')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   312
        self.assertEqual(self.execute('Any N WHERE U login "syt", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   313
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   314
                         'deactivated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   315
        self.assertEqual(self.execute('Any N WHERE U login "adim", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   316
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   317
                         'activated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   318
        # unfilter, syt should be activated again
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   319
        config['user-filter'] = u''
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   320
        source.repo_source.update_config(source, config)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   321
        self.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   322
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   323
        self.assertEqual(self.execute('Any N WHERE U login "syt", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   324
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   325
                         'activated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   326
        self.assertEqual(self.execute('Any N WHERE U login "adim", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   327
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   328
                         'activated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   329
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   330
    def test_delete(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   331
        """ delete syt, pull, check deactivation, repull,
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   332
        read syt, pull, check activation
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   333
        """
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   334
        self.delete_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   335
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   336
        self.assertRaises(AuthenticationError, self.repo.connect, 'syt', password='syt')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   337
        self.assertEqual(self.execute('Any N WHERE U login "syt", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   338
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   339
                         'deactivated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   340
        # check that it doesn't choke
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   341
        self.pull()
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   342
        # reinsert syt
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   343
        self.add_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   344
                            { 'objectClass': ['OpenLDAPperson','posixAccount','top','shadowAccount'],
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   345
                              'cn': 'Sylvain Thenault',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   346
                              'sn': 'Thenault',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   347
                              'gidNumber': '1004',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   348
                              'uid': 'syt',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   349
                              'homeDirectory': '/home/syt',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   350
                              'shadowFlag': '134538764',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   351
                              'uidNumber': '1004',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   352
                              'givenName': 'Sylvain',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   353
                              'telephoneNumber': '106',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   354
                              'displayName': 'sthenault',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   355
                              'gecos': 'Sylvain Thenault',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   356
                              'mail': ['sylvain.thenault@logilab.fr','syt@logilab.fr'],
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   357
                              'userPassword': 'syt',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   358
                             })
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   359
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   360
        self.assertEqual(self.execute('Any N WHERE U login "syt", '
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   361
                                      'U in_state S, S name N').rows[0][0],
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   362
                         'activated')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   363
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   364
    def test_reactivate_deleted(self):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   365
        # 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
   366
        # 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
   367
        # user from other sources
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   368
        self.delete_ldap_entry('uid=syt,ou=People,dc=cubicweb,dc=test')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   369
        self.pull()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   370
        # reactivate user (which source is still ldap-feed)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   371
        user = self.execute('CWUser U WHERE U login "syt"').get_entity(0, 0)
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   372
        user.cw_adapt_to('IWorkflowable').fire_transition('activate')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   373
        self.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   374
        with self.assertRaises(AuthenticationError):
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   375
            self.repo.connect('syt', password='syt')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   376
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   377
        # ok now let's try to make it a system user
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   378
        self.sexecute('SET X cw_source S WHERE X eid %(x)s, S name "system"', {'x': user.eid})
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   379
        self.commit()
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   380
        # and that we can now authenticate again
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   381
        self.assertRaises(AuthenticationError, self.repo.connect, 'syt', password='toto')
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   382
        self.assertTrue(self.repo.connect('syt', password='syt'))
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   383
8922
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   384
class LDAPFeedGroupTC(LDAPFeedTestBase):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   385
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   386
    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
   387
    """
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   388
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   389
    def test_groups_exist(self):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   390
        rset = self.sexecute('CWGroup X WHERE X name "dir"')
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   391
        self.assertEqual(len(rset), 1)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   392
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   393
        rset = self.sexecute('CWGroup X WHERE X cw_source S, S name "ldap"')
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   394
        self.assertEqual(len(rset), 2)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   395
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   396
    def test_group_deleted(self):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   397
        rset = self.sexecute('CWGroup X WHERE X name "dir"')
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   398
        self.assertEqual(len(rset), 1)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   399
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   400
    def test_in_group(self):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   401
        rset = self.sexecute('CWGroup X WHERE X name %(name)s', {'name': 'dir'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   402
        dirgroup = rset.get_entity(0, 0)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   403
        self.assertEqual(set(['syt', 'adim']),
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   404
                         set([u.login for u in dirgroup.reverse_in_group]))
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   405
        rset = self.sexecute('CWGroup X WHERE X name %(name)s', {'name': 'logilab'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   406
        logilabgroup = rset.get_entity(0, 0)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   407
        self.assertEqual(set(['adim']),
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   408
                         set([u.login for u in logilabgroup.reverse_in_group]))
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   409
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   410
    def test_group_member_added(self):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   411
        self.pull()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   412
        rset = self.sexecute('Any L WHERE U in_group G, G name %(name)s, U login L',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   413
                             {'name': 'logilab'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   414
        self.assertEqual(len(rset), 1)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   415
        self.assertEqual(rset[0][0], 'adim')
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   416
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   417
        try:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   418
            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
   419
                                   {('add', 'memberUid'): ['syt']})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   420
            time.sleep(1.1) # timestamps precision is 1s
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   421
            self.pull()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   422
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   423
            rset = self.sexecute('Any L WHERE U in_group G, G name %(name)s, U login L',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   424
                                 {'name': 'logilab'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   425
            self.assertEqual(len(rset), 2)
8959
69a78922114b [test/ldap] do not assume order
David Douard <david.douard@logilab.fr>
parents: 8922
diff changeset
   426
            members = set([u[0] for u in rset])
69a78922114b [test/ldap] do not assume order
David Douard <david.douard@logilab.fr>
parents: 8922
diff changeset
   427
            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
   428
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   429
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   430
            # back to normal ldap setup
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   431
            self.tearDownClass()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   432
            self.setUpClass()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   433
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   434
    def test_group_member_deleted(self):
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   435
        self.pull() # ensure we are sync'ed
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   436
        rset = self.sexecute('Any L WHERE U in_group G, G name %(name)s, U login L',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   437
                             {'name': 'logilab'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   438
        self.assertEqual(len(rset), 1)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   439
        self.assertEqual(rset[0][0], 'adim')
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
        try:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   442
            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
   443
                                   {('delete', 'memberUid'): ['adim']})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   444
            time.sleep(1.1) # timestamps precision is 1s
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   445
            self.pull()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   446
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   447
            rset = self.sexecute('Any L WHERE U in_group G, G name %(name)s, U login L',
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   448
                                 {'name': 'logilab'})
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   449
            self.assertEqual(len(rset), 0)
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   450
        finally:
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   451
            # back to normal ldap setup
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   452
            self.tearDownClass()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   453
            self.setUpClass()
715b9eec6da9 [ldapfeed] Add support for LDAP groups (closes #2528116)
David Douard <david.douard@logilab.fr>
parents: 8921
diff changeset
   454
8904
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   455
030463e2b620 [ldap] Major test refactoring
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8903
diff changeset
   456
class LDAPUserSourceTC(LDAPFeedTestBase):
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   457
    test_db_id = 'ldap-user'
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   458
    tags = CubicWebTC.tags | Tags(('ldap'))
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   459
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   460
    @classmethod
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   461
    def pre_setup_database(cls, session, config):
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   462
        session.create_entity('CWSource', name=u'ldap', type=u'ldapuser',
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   463
                              url=URL, config=CONFIG_LDAPUSER)
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   464
        session.commit()
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   465
        # XXX keep it there
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   466
        session.execute('CWUser U')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   467
9142
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   468
    def setup_database(self):
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   469
        # XXX a traceback may appear in the logs of the test due to
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   470
        # the _init_repo method that may fail to connect to the ldap
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   471
        # source if its URI has changed (from what is stored in the
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   472
        # database). This TB is NOT a failure or so.
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   473
        with self.session.repo.internal_session(safe=True) as session:
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   474
            session.execute('SET S url %(url)s, S config %(conf)s '
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   475
                            'WHERE S is CWSource, S name "ldap"',
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   476
                            {"conf": CONFIG_LDAPUSER, 'url': URL} )
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   477
            session.commit()
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   478
        self.pull()
41fb930dc751 [test/ldap] fix ldap tests
David Douard <david.douard@logilab.fr>
parents: 8959
diff changeset
   479
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   480
    def assertMetadata(self, entity):
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   481
        self.assertEqual(entity.creation_date, None)
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   482
        self.assertEqual(entity.modification_date, None)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   483
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   484
    def test_synchronize(self):
8901
661b6aaac240 [test/ldap source] better source naming, some cleanups (prepares #2528116)
Jérôme Roy
parents: 8885
diff changeset
   485
        source = self.repo.sources_by_uri['ldap']
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   486
        source.synchronize()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   487
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   488
    def test_base(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   489
        # check a known one
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   490
        rset = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
6887
72d7feeb071e [tests] make ldap source test run its own local (Open)LDAP server
David Douard <david.douard@logilab.fr>
parents: 6781
diff changeset
   491
        e = rset.get_entity(0, 0)
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   492
        self.assertEqual(e.login, 'syt')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   493
        e.complete()
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   494
        self.assertMetadata(e)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   495
        self.assertEqual(e.firstname, None)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   496
        self.assertEqual(e.surname, None)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   497
        self.assertEqual(e.in_group[0].name, 'users')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   498
        self.assertEqual(e.owned_by[0].login, 'syt')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   499
        self.assertEqual(e.created_by, ())
8917
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   500
        addresses = [pe.address for pe in e.use_email]
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   501
        addresses.sort()
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   502
        # should habe two element but ldapuser seems buggy. It's going to be dropped anyway.
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   503
        self.assertEqual(['sylvain.thenault@logilab.fr',], # 'syt@logilab.fr'],
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   504
                         addresses)
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   505
        self.assertIn(e.primary_email[0].address,
685b93559e33 [ldapfeed] add support for multiple email addresses from ldap
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8904
diff changeset
   506
                      ['sylvain.thenault@logilab.fr', 'syt@logilab.fr'])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   507
        # email content should be indexed on the user
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   508
        rset = self.sexecute('CWUser X WHERE X has_text "thenault"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   509
        self.assertEqual(rset.rows, [[e.eid]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   510
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   511
    def test_not(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   512
        eid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   513
        rset = self.sexecute('CWUser X WHERE NOT X eid %s' % eid)
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   514
        self.assert_(rset)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   515
        self.assert_(not eid in (r[0] for r in rset))
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   516
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   517
    def test_multiple(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   518
        seid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   519
        aeid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'adim'})[0][0]
3890
d7a270f50f54 backport stable branch (one more time painfully)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589 3855
diff changeset
   520
        rset = self.sexecute('CWUser X, Y WHERE X login %(syt)s, Y login %(adim)s',
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   521
                            {'syt': 'syt', 'adim': 'adim'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   522
        self.assertEqual(rset.rows, [[seid, aeid]])
3890
d7a270f50f54 backport stable branch (one more time painfully)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589 3855
diff changeset
   523
        rset = self.sexecute('Any X,Y,L WHERE X login L, X login %(syt)s, Y login %(adim)s',
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   524
                            {'syt': 'syt', 'adim': 'adim'})
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   525
        self.assertEqual(rset.rows, [[seid, aeid, 'syt']])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   526
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   527
    def test_in(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   528
        seid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   529
        aeid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'adim'})[0][0]
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   530
        rset = self.sexecute('Any X,L ORDERBY L WHERE X login IN("%s", "%s"), X login L' % ('syt', 'adim'))
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   531
        self.assertEqual(rset.rows, [[aeid, 'adim'], [seid, 'syt']])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   532
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   533
    def test_relations(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   534
        eid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   535
        rset = self.sexecute('Any X,E WHERE X is CWUser, X login L, X primary_email E')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   536
        self.assert_(eid in (r[0] for r in rset))
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   537
        rset = self.sexecute('Any X,L,E WHERE X is CWUser, X login L, X primary_email E')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   538
        self.assert_('syt' in (r[1] for r in rset))
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   539
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   540
    def test_count(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   541
        nbusers = self.sexecute('Any COUNT(X) WHERE X is CWUser')[0][0]
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   542
        # just check this is a possible number
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   543
        self.assert_(nbusers > 1, nbusers)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   544
        self.assert_(nbusers < 30, nbusers)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   545
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   546
    def test_upper(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   547
        eid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   548
        rset = self.sexecute('Any UPPER(L) WHERE X eid %s, X login L' % eid)
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   549
        self.assertEqual(rset[0][0], 'syt'.upper())
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   550
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   551
    def test_unknown_attr(self):
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   552
        eid = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'})[0][0]
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   553
        rset = self.sexecute('Any L,C,M WHERE X eid %s, X login L, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   554
                            'X creation_date C, X modification_date M' % eid)
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   555
        self.assertEqual(rset[0][0], 'syt')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   556
        self.assertEqual(rset[0][1], None)
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   557
        self.assertEqual(rset[0][2], None)
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   558
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   559
    def test_sort(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   560
        logins = [l for l, in self.sexecute('Any L ORDERBY L WHERE X login L')]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   561
        self.assertEqual(logins, sorted(logins))
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   562
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   563
    def test_lower_sort(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   564
        logins = [l for l, in self.sexecute('Any L ORDERBY lower(L) WHERE X login L')]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   565
        self.assertEqual(logins, sorted(logins))
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   566
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   567
    def test_or(self):
3890
d7a270f50f54 backport stable branch (one more time painfully)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3589 3855
diff changeset
   568
        rset = self.sexecute('DISTINCT Any X WHERE X login %(login)s OR (X in_group G, G name "managers")',
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   569
                            {'login': 'syt'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   570
        self.assertEqual(len(rset), 2, rset.rows) # syt + admin
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   571
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   572
    def test_nonregr_set_owned_by(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   573
        # test that when a user coming from ldap is triggering a transition
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   574
        # the related TrInfo has correct owner information
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   575
        self.sexecute('SET X in_group G WHERE X login %(syt)s, G name "managers"', {'syt': 'syt'})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   576
        self.commit()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   577
        syt = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'syt'}).get_entity(0, 0)
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   578
        self.assertEqual([g.name for g in syt.in_group], ['managers', 'users'])
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   579
        cnx = self.login('syt', password='syt')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   580
        cu = cnx.cursor()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   581
        adim = cu.execute('CWUser X WHERE X login %(login)s', {'login': 'adim'}).get_entity(0, 0)
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   582
        iworkflowable = adim.cw_adapt_to('IWorkflowable')
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   583
        iworkflowable.fire_transition('deactivate')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   584
        try:
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   585
            cnx.commit()
7293
97505b798975 [entity 3.13 api] rename clear_all_caches into cw_clear_all_cache
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7241
diff changeset
   586
            adim.cw_clear_all_caches()
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   587
            self.assertEqual(adim.in_state[0].name, 'deactivated')
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   588
            trinfo = iworkflowable.latest_trinfo()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   589
            self.assertEqual(trinfo.owned_by[0].login, 'syt')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   590
            # select from_state to skip the user's creation TrInfo
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   591
            rset = self.sexecute('Any U ORDERBY D DESC WHERE WF wf_info_for X,'
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   592
                                'WF creation_date D, WF from_state FS,'
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   593
                                'WF owned_by U?, X eid %(x)s',
5174
78438ad513ca #759035: Automate addition of eid cachekey in RQL analysis
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5064
diff changeset
   594
                                {'x': adim.eid})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   595
            self.assertEqual(rset.rows, [[syt.eid]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   596
        finally:
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   597
            # restore db state
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   598
            self.restore_connection()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   599
            adim = self.sexecute('CWUser X WHERE X login %(login)s', {'login': 'adim'}).get_entity(0, 0)
5556
9ab2b4c74baf [entity] introduce a new 'adapters' registry
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5426
diff changeset
   600
            adim.cw_adapt_to('IWorkflowable').fire_transition('activate')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   601
            self.sexecute('DELETE X in_group G WHERE X login %(syt)s, G name "managers"', {'syt': 'syt'})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   602
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   603
    def test_same_column_names(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   604
        self.sexecute('Any X, Y WHERE X copain Y, X login "comme", Y login "cochon"')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   605
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   606
    def test_multiple_entities_from_different_sources(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   607
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   608
        self.create_user(req, 'cochon')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   609
        self.assertTrue(self.sexecute('Any X,Y WHERE X login %(syt)s, Y login "cochon"', {'syt': 'syt'}))
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   610
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   611
    def test_exists1(self):
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7293
diff changeset
   612
        self.session.set_cnxset()
4089
ff92c7d692bf typos, api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   613
        self.session.create_entity('CWGroup', name=u'bougloup1')
ff92c7d692bf typos, api update
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 3890
diff changeset
   614
        self.session.create_entity('CWGroup', name=u'bougloup2')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   615
        self.sexecute('SET U in_group G WHERE G name ~= "bougloup%", U login "admin"')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   616
        self.sexecute('SET U in_group G WHERE G name = "bougloup1", U login %(syt)s', {'syt': 'syt'})
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   617
        rset = self.sexecute('Any L,SN ORDERBY L WHERE X in_state S, '
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   618
                             'S name SN, X login L, EXISTS(X in_group G, G name ~= "bougloup%")')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   619
        self.assertEqual(rset.rows, [['admin', 'activated'], ['syt', 'activated']])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   620
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   621
    def test_exists2(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   622
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   623
        self.create_user(req, 'comme')
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   624
        self.create_user(req, 'cochon')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   625
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "cochon"')
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   626
        rset = self.sexecute('Any GN ORDERBY GN WHERE X in_group G, G name GN, '
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   627
                             '(G name "managers" OR EXISTS(X copain T, T login in ("comme", "cochon")))')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   628
        self.assertEqual(rset.rows, [['managers'], ['users']])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   629
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   630
    def test_exists3(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   631
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   632
        self.create_user(req, 'comme')
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   633
        self.create_user(req, 'cochon')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   634
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "cochon"')
7791
31bb51ea5485 [deprecation] fix unittest pending deprecation warnings on failIf/failUnless methods family
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7697
diff changeset
   635
        self.assertTrue(self.sexecute('Any X, Y WHERE X copain Y, X login "comme", Y login "cochon"'))
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   636
        self.sexecute('SET X copain Y WHERE X login %(syt)s, Y login "cochon"', {'syt': 'syt'})
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   637
        self.assertTrue(self.sexecute('Any X, Y WHERE X copain Y, X login %(syt)s, Y login "cochon"', {'syt': 'syt'}))
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   638
        rset = self.sexecute('Any GN,L WHERE X in_group G, X login L, G name GN, G name "managers" '
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   639
                             'OR EXISTS(X copain T, T login in ("comme", "cochon"))')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   640
        self.assertEqual(sorted(rset.rows), [['managers', 'admin'], ['users', 'comme'], ['users', 'syt']])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   641
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   642
    def test_exists4(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   643
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   644
        self.create_user(req, 'comme')
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   645
        self.create_user(req, 'cochon', groups=('users', 'guests'))
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   646
        self.create_user(req, 'billy')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   647
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "cochon"')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   648
        self.sexecute('SET X copain Y WHERE X login "cochon", Y login "cochon"')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   649
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "billy"')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   650
        self.sexecute('SET X copain Y WHERE X login %(syt)s, Y login "billy"', {'syt': 'syt'})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   651
        # search for group name, login where
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   652
        #   CWUser copain with "comme" or "cochon" AND same login as the copain
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   653
        # OR
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   654
        #   CWUser in_state activated AND not copain with billy
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   655
        #
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   656
        # SO we expect everybody but "comme" and "syt"
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   657
        rset= self.sexecute('Any GN,L WHERE X in_group G, X login L, G name GN, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   658
                           'EXISTS(X copain T, T login L, T login in ("comme", "cochon")) OR '
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   659
                           'EXISTS(X in_state S, S name "activated", NOT X copain T2, T2 login "billy")')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   660
        all = self.sexecute('Any GN, L WHERE X in_group G, X login L, G name GN')
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   661
        all.rows.remove(['users', 'comme'])
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   662
        all.rows.remove(['users', 'syt'])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   663
        self.assertEqual(sorted(rset.rows), sorted(all.rows))
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   664
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   665
    def test_exists5(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   666
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   667
        self.create_user(req, 'comme')
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   668
        self.create_user(req, 'cochon', groups=('users', 'guests'))
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   669
        self.create_user(req, 'billy')
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   670
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "cochon"')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   671
        self.sexecute('SET X copain Y WHERE X login "cochon", Y login "cochon"')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   672
        self.sexecute('SET X copain Y WHERE X login "comme", Y login "billy"')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   673
        self.sexecute('SET X copain Y WHERE X login %(syt)s, Y login "cochon"', {'syt': 'syt'})
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   674
        rset= self.sexecute('Any L WHERE X login L, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   675
                           'EXISTS(X copain T, T login in ("comme", "cochon")) AND '
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   676
                           'NOT EXISTS(X copain T2, T2 login "billy")')
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   677
        self.assertEqual(sorted(rset.rows), [['cochon'], ['syt']])
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   678
        rset= self.sexecute('Any GN,L WHERE X in_group G, X login L, G name GN, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   679
                           'EXISTS(X copain T, T login in ("comme", "cochon")) AND '
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   680
                           'NOT EXISTS(X copain T2, T2 login "billy")')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   681
        self.assertEqual(sorted(rset.rows), [['guests', 'cochon'],
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   682
                                              ['users', 'cochon'],
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   683
                                              ['users', 'syt']])
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   684
975
0928daea04e9 fix ldapsource w/ restriction on unsupported relation (return no results in that case)
sylvain.thenault@logilab.fr
parents: 360
diff changeset
   685
    def test_cd_restriction(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   686
        rset = self.sexecute('CWUser X WHERE X creation_date > "2009-02-01"')
3436
1e927f7ccb23 nicer test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   687
        # admin/anon but no ldap user since it doesn't support creation_date
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   688
        self.assertEqual(sorted(e.login for e in rset.entities()),
3436
1e927f7ccb23 nicer test
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 2968
diff changeset
   689
                          ['admin', 'anon'])
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   690
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   691
    def test_union(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   692
        afeids = self.sexecute('State X')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   693
        ueids = self.sexecute('CWUser X')
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   694
        rset = self.sexecute('(Any X WHERE X is State) UNION (Any X WHERE X is CWUser)')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   695
        self.assertEqual(sorted(r[0] for r in rset.rows),
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   696
                          sorted(r[0] for r in afeids + ueids))
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   697
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   698
    def _init_security_test(self):
7241
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   699
        req = self.request()
65d65da31356 fix tests broken by fcb8932082a5
Alexandre Fayolle <alexandre.fayolle@logilab.fr>
parents: 7121
diff changeset
   700
        self.create_user(req, 'iaminguestsgrouponly', groups=('guests',))
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   701
        cnx = self.login('iaminguestsgrouponly')
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   702
        return cnx.cursor()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   703
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   704
    def test_security1(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   705
        cu = self._init_security_test()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   706
        rset = cu.execute('CWUser X WHERE X login %(login)s', {'login': 'syt'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   707
        self.assertEqual(rset.rows, [])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   708
        rset = cu.execute('Any X WHERE X login "iaminguestsgrouponly"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   709
        self.assertEqual(len(rset.rows), 1)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   710
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   711
    def test_security2(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   712
        cu = self._init_security_test()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   713
        rset = cu.execute('Any X WHERE X has_text %(syt)s', {'syt': 'syt'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   714
        self.assertEqual(rset.rows, [])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   715
        rset = cu.execute('Any X WHERE X has_text "iaminguestsgrouponly"')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   716
        self.assertEqual(len(rset.rows), 1)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   717
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   718
    def test_security3(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   719
        cu = self._init_security_test()
8146
67b9b273b70d [ldap test] test actual ldap authentication instead of monkey-patching
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7791
diff changeset
   720
        rset = cu.execute('Any F WHERE X has_text %(syt)s, X firstname F', {'syt': 'syt'})
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   721
        self.assertEqual(rset.rows, [])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   722
        rset = cu.execute('Any F WHERE X has_text "iaminguestsgrouponly", X firstname F')
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   723
        self.assertEqual(rset.rows, [[None]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   724
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   725
    def test_nonregr1(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   726
        self.sexecute('Any X,AA ORDERBY AA DESC WHERE E eid %(x)s, E owned_by X, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   727
                     'X modification_date AA',
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   728
                     {'x': self.session.user.eid})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   729
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   730
    def test_nonregr2(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   731
        self.sexecute('Any X,L,AA WHERE E eid %(x)s, E owned_by X, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   732
                     'X login L, X modification_date AA',
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   733
                     {'x': self.session.user.eid})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   734
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   735
    def test_nonregr3(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   736
        self.sexecute('Any X,AA ORDERBY AA DESC WHERE E eid %(x)s, '
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   737
                     'X modification_date AA',
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   738
                     {'x': self.session.user.eid})
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   739
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   740
    def test_nonregr4(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   741
        emaileid = self.sexecute('INSERT EmailAddress X: X address "toto@logilab.org"')[0][0]
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   742
        self.sexecute('Any X,AA WHERE X use_email Y, Y eid %(x)s, X modification_date AA',
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   743
                     {'x': emaileid})
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   744
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   745
    def test_nonregr5(self):
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   746
        # original jpl query:
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   747
        # Any X, NOW - CD, P WHERE P is Project, U interested_in P, U is CWUser,
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   748
        # U login "sthenault", X concerns P, X creation_date CD ORDERBY CD DESC LIMIT 5
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   749
        rql = ('Any X, NOW - CD, P ORDERBY CD DESC LIMIT 5 WHERE P bookmarked_by U, '
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   750
               'U login "%s", P is X, X creation_date CD') % self.session.user.login
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   751
        self.sexecute(rql, )#{'x': })
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   752
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   753
    def test_nonregr6(self):
2773
b2530e3e0afb [testlib] #345052 and #344207: major test lib refactoring/cleanup + update usage
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 1977
diff changeset
   754
        self.sexecute('Any B,U,UL GROUPBY B,U,UL WHERE B created_by U?, B is File '
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   755
                     'WITH U,UL BEING (Any U,UL WHERE ME eid %(x)s, (EXISTS(U identity ME) '
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   756
                     'OR (EXISTS(U in_group G, G name IN("managers", "staff")))) '
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   757
                     'OR (EXISTS(U in_group H, ME in_group H, NOT H name "users")), U login UL, U is CWUser)',
1122
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   758
                     {'x': self.session.user.eid})
9f37de24251f fix rql2sq w/ outer join on subquery result
sylvain.thenault@logilab.fr
parents: 975
diff changeset
   759
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   760
class GlobTrFuncTC(TestCase):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   761
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   762
    def test_count(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   763
        trfunc = GlobTrFunc('count', 0)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   764
        res = trfunc.apply([[1], [2], [3], [4]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   765
        self.assertEqual(res, [[4]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   766
        trfunc = GlobTrFunc('count', 1)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   767
        res = trfunc.apply([[1, 2], [2, 4], [3, 6], [1, 5]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   768
        self.assertEqual(res, [[1, 2], [2, 1], [3, 1]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   769
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   770
    def test_sum(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   771
        trfunc = GlobTrFunc('sum', 0)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   772
        res = trfunc.apply([[1], [2], [3], [4]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   773
        self.assertEqual(res, [[10]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   774
        trfunc = GlobTrFunc('sum', 1)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   775
        res = trfunc.apply([[1, 2], [2, 4], [3, 6], [1, 5]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   776
        self.assertEqual(res, [[1, 7], [2, 4], [3, 6]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   777
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   778
    def test_min(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   779
        trfunc = GlobTrFunc('min', 0)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   780
        res = trfunc.apply([[1], [2], [3], [4]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   781
        self.assertEqual(res, [[1]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   782
        trfunc = GlobTrFunc('min', 1)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   783
        res = trfunc.apply([[1, 2], [2, 4], [3, 6], [1, 5]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   784
        self.assertEqual(res, [[1, 2], [2, 4], [3, 6]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   785
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   786
    def test_max(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   787
        trfunc = GlobTrFunc('max', 0)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   788
        res = trfunc.apply([[1], [2], [3], [4]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   789
        self.assertEqual(res, [[4]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   790
        trfunc = GlobTrFunc('max', 1)
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   791
        res = trfunc.apply([[1, 2], [2, 4], [3, 6], [1, 5]])
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   792
        self.assertEqual(res, [[1, 5], [2, 4], [3, 6]])
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   793
8188
1867e252e487 [repository] ldap-feed source. Closes #2086984
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 8146
diff changeset
   794
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   795
class RQL2LDAPFilterTC(RQLGeneratorTC):
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   796
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   797
    tags = RQLGeneratorTC.tags | Tags(('ldap'))
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   798
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   799
    @property
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   800
    def schema(self):
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   801
        """return the application schema"""
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   802
        return self._schema
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   803
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   804
    def setUp(self):
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   805
        self.handler = get_test_db_handler(LDAPUserSourceTC.config)
8903
192a748550c7 [test/ldap] have RQL2LDAPFilterTC use its own database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8902
diff changeset
   806
        self.handler.build_db_cache('ldap-rqlgenerator', LDAPUserSourceTC.pre_setup_database)
192a748550c7 [test/ldap] have RQL2LDAPFilterTC use its own database
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents: 8902
diff changeset
   807
        self.handler.restore_database('ldap-rqlgenerator')
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   808
        self._repo = repo = self.handler.get_repo()
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   809
        self._schema = repo.schema
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   810
        super(RQL2LDAPFilterTC, self).setUp()
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   811
        ldapsource = repo.sources[-1]
7398
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7293
diff changeset
   812
        self.cnxset = repo._get_cnxset()
26695dd703d8 [repository api] definitly kill usage of word 'pool' to refer to connections set used by a session
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 7293
diff changeset
   813
        session = mock_object(cnxset=self.cnxset)
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   814
        self.o = RQL2LDAPFilter(ldapsource, session)
6945
28bf94d062a9 [sources] refactor source creation and options handling
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6888
diff changeset
   815
        self.ldapclasses = ''.join(ldapsource.base_filters)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   816
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   817
    def tearDown(self):
7078
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   818
        self._repo.turn_repo_off()
bad26a22fe29 [test] New Handling of database for test.
Aurelien Campeas <aurelien.campeas@logilab.fr>
parents: 6986
diff changeset
   819
        super(RQL2LDAPFilterTC, self).tearDown()
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   820
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   821
    def test_base(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   822
        rqlst = self._prepare('CWUser X WHERE X login "toto"').children[0]
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   823
        self.assertEqual(self.o.generate(rqlst, 'X')[1],
6434
d99b742a9c49 [test] fix ldap test when executed from certain hosts
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   824
                          '(&%s(uid=toto))' % self.ldapclasses)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   825
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   826
    def test_kwargs(self):
1398
5fe84a5f7035 rename internal entity types to have CW prefix instead of E
sylvain.thenault@logilab.fr
parents: 1122
diff changeset
   827
        rqlst = self._prepare('CWUser X WHERE X login %(x)s').children[0]
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   828
        self.o._args = {'x': "toto"}
6340
470d8e828fda [test] update test to unittest2 api (still using lgc.testlib though)
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 5556
diff changeset
   829
        self.assertEqual(self.o.generate(rqlst, 'X')[1],
6434
d99b742a9c49 [test] fix ldap test when executed from certain hosts
Sylvain Thénault <sylvain.thenault@logilab.fr>
parents: 6340
diff changeset
   830
                          '(&%s(uid=toto))' % self.ldapclasses)
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   831
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   832
    def test_get_attr(self):
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   833
        rqlst = self._prepare('Any X WHERE E firstname X, E eid 12').children[0]
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   834
        self.assertRaises(UnknownEid, self.o.generate, rqlst, 'E')
1802
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   835
d628defebc17 delete-trailing-whitespace + some copyright update
Adrien Di Mascio <Adrien.DiMascio@logilab.fr>
parents: 1398
diff changeset
   836
360
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   837
if __name__ == '__main__':
600dd2fe8b40 backport unittest_ldapuser
Sylvain Thenault <sylvain.thenault@logilab.fr>
parents:
diff changeset
   838
    unittest_main()