1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217
|
# #
# Test LDAPUserFolder w/ GRUF #
# #
# #
# (c)2002+ Ingeniweb #
import os, sys
if __name__ == '__main__':
execfile(os.path.join(sys.path[0], 'framework.py'))
# Load fixture
from Testing import ZopeTestCase
# Permissions / security
from AccessControl.Permissions import access_contents_information, view, add_documents_images_and_files, change_images_and_files, view_management_screens
from AccessControl.SecurityManagement import newSecurityManager, noSecurityManager, getSecurityManager
from AccessControl import Unauthorized
from AccessControl.User import UnrestrictedUser
import urllib
# Create the error_log object
app = ZopeTestCase.app()
ZopeTestCase.utils.setupSiteErrorLog(app)
ZopeTestCase.close(app)
# Start the web server
host, port = ZopeTestCase.utils.startZServer(4)
base = 'http://%s:%d/%s' %(host, port, ZopeTestCase._folder_name)
# Get global vars
#from Products.GroupUserFolder.global_symbols import *
from Products.GroupUserFolder.interfaces import IUserFolder
from Interface import Verify
# Install our product
ZopeTestCase.installProduct('GroupUserFolder')
ZopeTestCase.installProduct('LDAPUserFolder')
import GRUFTestCase
import testGroupUserFolderAPI
from Log import *
try:
from LDAPconfig import defaults
except ImportError:
Log(LOG_ERROR, """
To perform this test case, you must provide a 'LDAPconfig.py' file with the following structure:
defaults = { 'title' : 'LDAP User Folder'
, 'server' : 'localhost:389'
, 'login_attr' : 'cn'
, 'uid_attr': 'cn'
, 'users_base' : 'ou=people,dc=dataflake,dc=org'
, 'users_scope' : 2
, 'roles' : 'Anonymous'
, 'groups_base' : 'ou=groups,dc=dataflake,dc=org'
, 'groups_scope' : 2
, 'binduid' : 'cn=Manager,dc=dataflake,dc=org'
, 'bindpwd' : 'mypass'
, 'binduid_usage' : 1
, 'rdn_attr' : 'cn'
, 'local_groups' : 1 # Keep this true
, 'use_ssl' : 0
, 'encryption' : 'SHA'
, 'read_only' : 0
}
Of course, you've got to replace all values by some relevant ones for your project.
This test case won't complete without.
NEVER PUT THIS FILE INTO YOUR CVS ! Unless you want your password to be publicly known...
""")
dg = defaults.get
class TestLDAPUserFolderBasics(GRUFTestCase.GRUFTestCase):
"""
Basic LDAPUserFolder binding
This test just creates a LDAPUF connexion for the user source and performs a few API tests.
Heavy LDAP testing is delegated to TestLDAPUserFolder class.
"""
def gruf_sources_setup(self,):
"""
Basic LDAP initialization inside gruf's user source
"""
# User source replacement
self.gruf.replaceUserSource("Users",
"manage_addProduct/LDAPUserFolder/manage_addLDAPUserFolder",
title = dg('title'),
LDAP_server = dg('server'),
login_attr = dg('login_attr'),
uid_attr = dg('uid_attr'),
users_base = dg('users_base'),
users_scope = dg('users_scope'),
roles= dg('roles'),
groups_base = dg('groups_base'),
groups_scope = dg('groups_scope'),
binduid = dg('binduid'),
bindpwd = dg('bindpwd'),
binduid_usage = dg('binduid_usage'),
rdn_attr = dg('rdn_attr'),
local_groups = dg('local_groups'),
encryption = dg('encryption'),
use_ssl = dg('use_ssl'),
read_only=dg('read_only'),
)
# Edit LDAPUF 'cause objectClass cannot be set otherwise :(
self.gruf.Users.acl_users.manage_edit(
title = dg('title'),
login_attr = dg('login_attr'),
uid_attr = dg('uid_attr'),
users_base = dg('users_base'),
users_scope = dg('users_scope'),
roles= dg('roles'),
obj_classes = 'top,inetOrgPerson',
groups_base = dg('groups_base'),
groups_scope = dg('groups_scope'),
binduid = dg('binduid'),
bindpwd = dg('bindpwd'),
binduid_usage = dg('binduid_usage'),
rdn_attr = dg('rdn_attr'),
local_groups = dg('local_groups'),
encryption = dg('encryption'),
read_only=dg('read_only'),
)
# Purge existing users in order to start on a clean basis
self.delete_created_users()
def test01_LDAPUp(self,):
"""Ensure LDAP is up and running
"""
self.gruf.Users.acl_users.getUsers()
class TestLDAPUserFolderAPI(TestLDAPUserFolderBasics, testGroupUserFolderAPI.TestGroupUserFolderAPI):
"""
Whole API test for GRUF+LDAP
Users stored in LDAP
Groups stored in ZODB
"""
def test_getPureUsers(self):
"""
The original test didn't work because of LDAPUF's cache -> we disable
"""
pass
def test_getUsers(self,):
"""
The original test didn't work because of LDAPUF's cache -> we disable
"""
pass
def test_userSetDomains(self,):
"""
LDAPUF has no domain support
"""
pass
def test_setProperty(self,):
"""Set user's properties
"""
u1 = self.gruf.getUser("u1")
# Simplest case: sn property setting
u1.setProperty("sn", "Second Name Value")
# We check that it has been changed
self.failUnless(u1.getProperty("sn") == "Second Name Value", u1.getProperty("sn"), )
def test_searchUsersByAttribute(self,):
# Simple match
self.failUnlessEqual(
self.gruf.searchUsersByAttribute(defaults['login_attr'], "u3"),
["u3",],
)
# Different case matching
self.failUnlessEqual(
self.gruf.searchUsersByAttribute(defaults['login_attr'], "U3"),
["u3",],
)
# Multiple (different case) matching
s = self.gruf.searchUsersByAttribute(defaults['login_attr'], "U")
s.sort()
self.failUnlessEqual(
s,
['u1', 'u10', 'u11', 'u2', 'u3', 'u4', 'u5', 'u6', 'u7', 'u8', 'u9', ],
)
if __name__ == '__main__':
framework(descriptions=1, verbosity=1)
else:
import unittest
def test_suite():
suite = unittest.TestSuite()
## suite.addTest(unittest.makeSuite(TestLDAPUserFolderBasics))
suite.addTest(unittest.makeSuite(TestLDAPUserFolderAPI))
return suite
|