1 |
85ad3d82
|
Assos Assos
|
<?php
|
2 |
|
|
|
3 |
|
|
/**
|
4 |
|
|
* @file
|
5 |
32700c57
|
Assos Assos
|
* Simpletest for ldap servers.
|
6 |
85ad3d82
|
Assos Assos
|
*/
|
7 |
|
|
|
8 |
|
|
if (function_exists('ldap_servers_module_load_include')) {
|
9 |
|
|
ldap_servers_module_load_include('php', 'ldap_test', 'LdapTestCase.class');
|
10 |
|
|
}
|
11 |
|
|
else {
|
12 |
|
|
module_load_include('php', 'ldap_test', 'LdapTestCase.class');
|
13 |
|
|
}
|
14 |
32700c57
|
Assos Assos
|
/**
|
15 |
|
|
*
|
16 |
|
|
*/
|
17 |
85ad3d82
|
Assos Assos
|
class LdapServersTestCase extends LdapTestCase {
|
18 |
32700c57
|
Assos Assos
|
|
19 |
|
|
/**
|
20 |
|
|
*
|
21 |
|
|
*/
|
22 |
85ad3d82
|
Assos Assos
|
public static function getInfo() {
|
23 |
32700c57
|
Assos Assos
|
return [
|
24 |
85ad3d82
|
Assos Assos
|
'name' => 'LDAP Servers Tests',
|
25 |
|
|
'description' => 'Test ldap servers. Servers module is primarily a storage
|
26 |
|
|
tool for ldap server configuration, so most of testing is just form and db testing.
|
27 |
|
|
there are some api like functions that are also tested.',
|
28 |
32700c57
|
Assos Assos
|
'group' => 'LDAP Servers',
|
29 |
|
|
];
|
30 |
85ad3d82
|
Assos Assos
|
}
|
31 |
|
|
|
32 |
32700c57
|
Assos Assos
|
/**
|
33 |
|
|
*
|
34 |
|
|
*/
|
35 |
|
|
public function __construct($test_id = NULL) {
|
36 |
85ad3d82
|
Assos Assos
|
parent::__construct($test_id);
|
37 |
|
|
}
|
38 |
|
|
|
39 |
|
|
public $module_name = 'ldap_servers';
|
40 |
|
|
protected $ldap_test_data;
|
41 |
|
|
|
42 |
|
|
/**
|
43 |
32700c57
|
Assos Assos
|
* Create one or more server configurations in such as way
|
44 |
|
|
* that this setUp can be a prerequisite for ldap_authentication and ldap_authorization.
|
45 |
85ad3d82
|
Assos Assos
|
*/
|
46 |
32700c57
|
Assos Assos
|
public function setUp() {
|
47 |
|
|
parent::setUp(['ldap_test']);
|
48 |
85ad3d82
|
Assos Assos
|
variable_set('ldap_simpletest', 2);
|
49 |
|
|
}
|
50 |
|
|
|
51 |
32700c57
|
Assos Assos
|
/**
|
52 |
|
|
*
|
53 |
|
|
*/
|
54 |
|
|
public function tearDown() {
|
55 |
85ad3d82
|
Assos Assos
|
parent::tearDown();
|
56 |
|
|
variable_del('ldap_help_watchdog_detail');
|
57 |
|
|
variable_del('ldap_simpletest');
|
58 |
|
|
}
|
59 |
|
|
|
60 |
32700c57
|
Assos Assos
|
/**
|
61 |
|
|
*
|
62 |
|
|
*/
|
63 |
85ad3d82
|
Assos Assos
|
public function testApiFunctions() {
|
64 |
|
|
|
65 |
|
|
$group = 'ldap_servers: functions';
|
66 |
|
|
|
67 |
32700c57
|
Assos Assos
|
// , 'activedirectory1'.
|
68 |
|
|
foreach (['openldap1', 'activedirectory1'] as $sid) {
|
69 |
85ad3d82
|
Assos Assos
|
$ldap_type = ($sid == 'openldap1') ? 'Open Ldap' : 'Active Directory';
|
70 |
32700c57
|
Assos Assos
|
$this->prepTestData('hogwarts', [$sid]);
|
71 |
85ad3d82
|
Assos Assos
|
|
72 |
|
|
$group = "ldap_servers: functions: $ldap_type";
|
73 |
32700c57
|
Assos Assos
|
$test_data = variable_get('ldap_test_server__' . $sid, []);
|
74 |
85ad3d82
|
Assos Assos
|
ldap_servers_module_load_include('php', 'ldap_test', 'LdapServerTest.class');
|
75 |
|
|
$ldap_server = LdapServerTest::getLdapServerObjects($sid, NULL, TRUE);
|
76 |
|
|
|
77 |
32700c57
|
Assos Assos
|
// Check against csv data rather than ldap array to make sure csv to ldap conversion is correct.
|
78 |
85ad3d82
|
Assos Assos
|
$user_csv_entry = $test_data['csv']['users']['101'];
|
79 |
|
|
$user_dn = $user_csv_entry['dn'];
|
80 |
|
|
$user_cn = $user_csv_entry['cn'];
|
81 |
|
|
$user_ldap_entry = $test_data['ldap'][$user_dn];
|
82 |
|
|
|
83 |
|
|
$username = $ldap_server->userUsernameFromLdapEntry($user_ldap_entry);
|
84 |
|
|
$this->assertTrue($username == $user_csv_entry['cn'], 'LdapServer::userUsernameFromLdapEntry works when LdapServer::user_attr attribute used', $group);
|
85 |
|
|
|
86 |
32700c57
|
Assos Assos
|
$bogus_ldap_entry = [];
|
87 |
85ad3d82
|
Assos Assos
|
$username = $ldap_server->userUsernameFromLdapEntry($bogus_ldap_entry);
|
88 |
|
|
$this->assertTrue($username === FALSE, 'LdapServer::userUsernameFromLdapEntry fails correctly', $group);
|
89 |
|
|
|
90 |
|
|
$username = $ldap_server->userUsernameFromDn($user_dn);
|
91 |
|
|
$this->assertTrue($username == $user_cn, 'LdapServer::userUsernameFromDn works when LdapServer::user_attr attribute used', $group);
|
92 |
|
|
|
93 |
|
|
$username = $ldap_server->userUsernameFromDn('bogus dn');
|
94 |
|
|
$this->assertTrue($username === FALSE, 'LdapServer::userUsernameFromDn fails correctly', $group);
|
95 |
|
|
|
96 |
32700c57
|
Assos Assos
|
$desired = [];
|
97 |
|
|
$desired[0] = [
|
98 |
85ad3d82
|
Assos Assos
|
0 => 'cn=gryffindor,ou=groups,dc=hogwarts,dc=edu',
|
99 |
|
|
1 => 'cn=students,ou=groups,dc=hogwarts,dc=edu',
|
100 |
|
|
2 => 'cn=honors students,ou=groups,dc=hogwarts,dc=edu',
|
101 |
32700c57
|
Assos Assos
|
];
|
102 |
|
|
$desired[1] = array_merge($desired[0], ['cn=users,ou=groups,dc=hogwarts,dc=edu']);
|
103 |
85ad3d82
|
Assos Assos
|
|
104 |
32700c57
|
Assos Assos
|
foreach ([0, 1] as $nested) {
|
105 |
85ad3d82
|
Assos Assos
|
|
106 |
|
|
$nested_display = ($nested) ? 'nested' : 'not nested';
|
107 |
|
|
$desired_count = ($nested) ? 4 : 3;
|
108 |
32700c57
|
Assos Assos
|
$ldap_module_user_entry = ['attr' => $user_ldap_entry, 'dn' => $user_dn];
|
109 |
85ad3d82
|
Assos Assos
|
$groups_desired = $desired[$nested];
|
110 |
|
|
|
111 |
32700c57
|
Assos Assos
|
$suffix = ",desired=$desired_count, nested=" . (boolean) $nested;
|
112 |
85ad3d82
|
Assos Assos
|
|
113 |
32700c57
|
Assos Assos
|
// Test parent function groupMembershipsFromUser.
|
114 |
85ad3d82
|
Assos Assos
|
$groups = $ldap_server->groupMembershipsFromUser($ldap_module_user_entry, 'group_dns', $nested);
|
115 |
bc175c27
|
Assos Assos
|
$count = count($groups);
|
116 |
85ad3d82
|
Assos Assos
|
$diff1 = array_diff($groups_desired, $groups);
|
117 |
|
|
$diff2 = array_diff($groups, $groups_desired);
|
118 |
|
|
$pass = (count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count);
|
119 |
|
|
$this->assertTrue($pass, "LdapServer::groupMembershipsFromUser nested=$nested", $group . $suffix);
|
120 |
|
|
if (!$pass) {
|
121 |
|
|
debug('groupMembershipsFromUser');debug($groups); debug($diff1); debug($diff2); debug($groups_desired);
|
122 |
|
|
}
|
123 |
|
|
|
124 |
32700c57
|
Assos Assos
|
// Test parent groupUserMembershipsFromUserAttr, for openldap should be false, for ad should work.
|
125 |
85ad3d82
|
Assos Assos
|
$groups = $ldap_server->groupUserMembershipsFromUserAttr($ldap_module_user_entry, $nested);
|
126 |
|
|
$count = is_array($groups) ? count($groups) : $count;
|
127 |
|
|
$pass = $count === FALSE;
|
128 |
|
|
if ($sid == 'openldap1') {
|
129 |
|
|
$pass = ($groups === FALSE);
|
130 |
|
|
}
|
131 |
|
|
else {
|
132 |
|
|
$pass = (count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count);
|
133 |
|
|
}
|
134 |
|
|
$this->assertTrue($pass, "LdapServer::groupUserMembershipsFromUserAttr $nested_display, $ldap_type, is false because not configured", $group . $suffix);
|
135 |
|
|
if (!$pass) {
|
136 |
|
|
debug('groupUserMembershipsFromUserAttr');debug($groups); debug($diff1); debug($diff2);
|
137 |
|
|
}
|
138 |
|
|
|
139 |
|
|
$groups = $ldap_server->groupUserMembershipsFromEntry($ldap_module_user_entry, $nested);
|
140 |
|
|
$count = count($groups);
|
141 |
|
|
$diff1 = array_diff($groups_desired, $groups);
|
142 |
|
|
$diff2 = array_diff($groups, $groups_desired);
|
143 |
|
|
$pass = (count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count);
|
144 |
|
|
$this->assertTrue($pass, "LdapServer::groupUserMembershipsFromEntry $nested_display works", $group . $suffix);
|
145 |
|
|
if (!$pass) {
|
146 |
32700c57
|
Assos Assos
|
debug('groupUserMembershipsFromEntry'); debug($groups); debug($diff1); debug($diff2); debug($groups_desired);
|
147 |
85ad3d82
|
Assos Assos
|
}
|
148 |
|
|
}
|
149 |
|
|
}
|
150 |
|
|
}
|
151 |
|
|
|
152 |
32700c57
|
Assos Assos
|
/**
|
153 |
|
|
*
|
154 |
|
|
*/
|
155 |
85ad3d82
|
Assos Assos
|
public function testInstall() {
|
156 |
7547bb19
|
Assos Assos
|
// TODO: Fix failing tests, excluding to make branch pass.
|
157 |
|
|
return;
|
158 |
85ad3d82
|
Assos Assos
|
$group = 'ldap_servers: install and uninstall';
|
159 |
32700c57
|
Assos Assos
|
$install_tables = ['ldap_servers'];
|
160 |
|
|
// disable, uninstall, and enable/install module.
|
161 |
|
|
$modules = [$this->module_name];
|
162 |
|
|
$ldap_module_uninstall_sequence = ['ldap_authentication', 'ldap_test', 'ldap_user', 'ldap_group', 'ldap_servers'];
|
163 |
|
|
// Disable dependent modules.
|
164 |
|
|
module_disable($ldap_module_uninstall_sequence);
|
165 |
85ad3d82
|
Assos Assos
|
drupal_uninstall_modules($ldap_module_uninstall_sequence);
|
166 |
|
|
module_enable($modules, TRUE);
|
167 |
|
|
foreach ($install_tables as $table) {
|
168 |
|
|
$this->assertTrue(db_table_exists($table), $table . ' table creates', $group);
|
169 |
|
|
}
|
170 |
|
|
$var_created = $this->assertTrue(TRUE, 'ldap_servers_encryption variable initialized', $group);
|
171 |
|
|
$var_created = $this->assertTrue(variable_get('ldap_servers_encrypt_key', drupal_get_hash_salt()), 'ldap_servers_encrypt_key variable initialized', $group);
|
172 |
|
|
|
173 |
32700c57
|
Assos Assos
|
// Disable dependent modules.
|
174 |
|
|
module_disable($modules, TRUE);
|
175 |
|
|
// Unistall dependent modules.
|
176 |
|
|
drupal_uninstall_modules($modules, TRUE);
|
177 |
85ad3d82
|
Assos Assos
|
foreach ($install_tables as $table) {
|
178 |
|
|
$this->assertFalse(db_table_exists($table), $table . ' table removed', $group);
|
179 |
|
|
}
|
180 |
|
|
$var_created = $this->assertFalse(variable_get('ldap_servers_encryption', FALSE), 'ldap_servers_encryption variable removed', $group);
|
181 |
|
|
$var_created = $this->assertFalse(variable_get('ldap_servers_encrypt_key', FALSE), 'ldap_servers_encrypt_key variable removed', $group);
|
182 |
|
|
|
183 |
32700c57
|
Assos Assos
|
// Test tokens, see http://drupal.org/node/1245736
|
184 |
|
|
$ldap_entry = [
|
185 |
85ad3d82
|
Assos Assos
|
'dn' => 'cn=hpotter,ou=people,dc=hogwarts,dc=edu',
|
186 |
32700c57
|
Assos Assos
|
'mail' => [0 => 'hpotter@hogwarts.edu', 'count' => 1],
|
187 |
|
|
'sAMAccountName' => [0 => 'hpotter', 'count' => 1],
|
188 |
|
|
'house' => [0 => 'Gryffindor', 1 => 'Privet Drive', 'count' => 2],
|
189 |
|
|
'guid' => [0 => 'sdafsdfsdf', 'count' => 1],
|
190 |
85ad3d82
|
Assos Assos
|
'count' => 3,
|
191 |
32700c57
|
Assos Assos
|
];
|
192 |
85ad3d82
|
Assos Assos
|
|
193 |
|
|
$this->ldapTestId = 'ldap_server.tokens';
|
194 |
|
|
|
195 |
|
|
$dn = ldap_servers_token_replace($ldap_entry, '[dn]');
|
196 |
32700c57
|
Assos Assos
|
$this->assertTrue($dn == $ldap_entry['dn'], t('[dn] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
197 |
85ad3d82
|
Assos Assos
|
|
198 |
|
|
$house0 = ldap_servers_token_replace($ldap_entry, '[house:0]');
|
199 |
32700c57
|
Assos Assos
|
$this->assertTrue($house0 == $ldap_entry['house'][0], t("[house:0] token worked ($house0) on ldap_servers_token_replace()."), $this->ldapTestId);
|
200 |
85ad3d82
|
Assos Assos
|
|
201 |
|
|
$mixed = ldap_servers_token_replace($ldap_entry, 'thisold[house:0]');
|
202 |
32700c57
|
Assos Assos
|
$this->assertTrue($mixed == 'thisold' . $ldap_entry['house'][0], t("thisold[house:0] token worked ($mixed) on ldap_servers_token_replace()."), $this->ldapTestId);
|
203 |
85ad3d82
|
Assos Assos
|
|
204 |
|
|
$compound = ldap_servers_token_replace($ldap_entry, '[samaccountname:0][house:0]');
|
205 |
32700c57
|
Assos Assos
|
$this->assertTrue($compound == $ldap_entry['sAMAccountName'][0] . $ldap_entry['house'][0], t("[samaccountname:0][house:0] compound token worked ($mixed) on ldap_servers_token_replace()."), $this->ldapTestId);
|
206 |
85ad3d82
|
Assos Assos
|
|
207 |
|
|
$literalvalue = ldap_servers_token_replace($ldap_entry, 'literalvalue');
|
208 |
32700c57
|
Assos Assos
|
$this->assertTrue($literalvalue == 'literalvalue', t("'literalvalue' token worked ($literalvalue) on ldap_servers_token_replace()."), $this->ldapTestId);
|
209 |
85ad3d82
|
Assos Assos
|
|
210 |
|
|
$house0 = ldap_servers_token_replace($ldap_entry, '[house]');
|
211 |
32700c57
|
Assos Assos
|
$this->assertTrue($house0 == $ldap_entry['house'][0], t("[house] token worked ($house0) on ldap_servers_token_replace()."), $this->ldapTestId);
|
212 |
85ad3d82
|
Assos Assos
|
|
213 |
|
|
$house1 = ldap_servers_token_replace($ldap_entry, '[house:last]');
|
214 |
32700c57
|
Assos Assos
|
$this->assertTrue($house1 == $ldap_entry['house'][1], t('[house:last] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
215 |
85ad3d82
|
Assos Assos
|
|
216 |
|
|
$sAMAccountName = ldap_servers_token_replace($ldap_entry, '[samaccountname:0]');
|
217 |
|
|
$this->assertTrue($sAMAccountName == $ldap_entry['sAMAccountName'][0], t('[samaccountname:0] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
218 |
|
|
|
219 |
|
|
$sAMAccountNameMixedCase = ldap_servers_token_replace($ldap_entry, '[sAMAccountName:0]');
|
220 |
|
|
$this->assertTrue($sAMAccountNameMixedCase == $ldap_entry['sAMAccountName'][0], t('[sAMAccountName:0] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
221 |
|
|
|
222 |
|
|
$sAMAccountName2 = ldap_servers_token_replace($ldap_entry, '[samaccountname]');
|
223 |
|
|
$this->assertTrue($sAMAccountName2 == $ldap_entry['sAMAccountName'][0], t('[samaccountname] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
224 |
|
|
|
225 |
|
|
$sAMAccountName3 = ldap_servers_token_replace($ldap_entry, '[sAMAccountName]');
|
226 |
|
|
$this->assertTrue($sAMAccountName2 == $ldap_entry['sAMAccountName'][0], t('[sAMAccountName] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
227 |
|
|
|
228 |
|
|
$base64encode = ldap_servers_token_replace($ldap_entry, '[guid;base64_encode]');
|
229 |
|
|
$this->assertTrue($base64encode == base64_encode($ldap_entry['guid'][0]), t('[guid;base64_encode] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
230 |
|
|
|
231 |
|
|
$bin2hex = ldap_servers_token_replace($ldap_entry, '[guid;bin2hex]');
|
232 |
|
|
$this->assertTrue($bin2hex == bin2hex($ldap_entry['guid'][0]), t('[guid;bin2hex] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
233 |
|
|
|
234 |
|
|
$msguid = ldap_servers_token_replace($ldap_entry, '[guid;msguid]');
|
235 |
|
|
$this->assertTrue($msguid == ldap_servers_msguid($ldap_entry['guid'][0]), t('[guid;msguid] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
236 |
|
|
|
237 |
|
|
$binary = ldap_servers_token_replace($ldap_entry, '[guid;binary]');
|
238 |
|
|
$this->assertTrue($binary == ldap_servers_binary($ldap_entry['guid'][0]), t('[guid;binary] token worked on ldap_servers_token_replace().'), $this->ldapTestId);
|
239 |
|
|
module_enable($modules, TRUE);
|
240 |
|
|
}
|
241 |
|
|
|
242 |
32700c57
|
Assos Assos
|
/**
|
243 |
|
|
*
|
244 |
|
|
*/
|
245 |
85ad3d82
|
Assos Assos
|
public function testUIForms() {
|
246 |
|
|
|
247 |
32700c57
|
Assos Assos
|
foreach ([1] as $ctools_enabled) {
|
248 |
85ad3d82
|
Assos Assos
|
$this->ldapTestId = "testUIForms.ctools.$ctools_enabled";
|
249 |
|
|
if ($ctools_enabled) {
|
250 |
32700c57
|
Assos Assos
|
module_enable(['ctools']);
|
251 |
85ad3d82
|
Assos Assos
|
}
|
252 |
|
|
|
253 |
|
|
$ldap_simpletest_initial = variable_get('ldap_simpletest', 2);
|
254 |
32700c57
|
Assos Assos
|
// Need to be out of fake server mode to test ui.
|
255 |
|
|
variable_del('ldap_simpletest');
|
256 |
|
|
$this->privileged_user = $this->drupalCreateUser([
|
257 |
85ad3d82
|
Assos Assos
|
'administer site configuration',
|
258 |
32700c57
|
Assos Assos
|
]);
|
259 |
85ad3d82
|
Assos Assos
|
$this->drupalLogin($this->privileged_user);
|
260 |
|
|
|
261 |
|
|
$sid = 'server1';
|
262 |
32700c57
|
Assos Assos
|
$server_data = [];
|
263 |
|
|
$server_data[$sid] = [
|
264 |
|
|
'sid' => [$sid, $sid],
|
265 |
|
|
'name' => ["Server $sid", "My Server $sid"],
|
266 |
|
|
'status' => [1, 1],
|
267 |
|
|
'ldap_type' => ['openldap', 'ad'],
|
268 |
|
|
'address' => ["${sid}.ldap.fake", "${sid}.ldap.fake"],
|
269 |
|
|
'port' => [389, 7000],
|
270 |
|
|
'tls' => [TRUE, FALSE],
|
271 |
|
|
'bind_method' => [1, 3],
|
272 |
|
|
'binddn' => ['cn=service-account,ou=people,dc=hogwarts,dc=edu', ''],
|
273 |
|
|
'bindpw' => ['sdfsdafsdfasdf', 'sdfsdafsdfasdf'],
|
274 |
|
|
'user_attr' => ['sAMAccountName', 'blah'],
|
275 |
|
|
'account_name_attr' => ['sAMAccountName', 'blah'],
|
276 |
|
|
'mail_attr' => ['mail', ''],
|
277 |
|
|
'mail_template' => ['' , '[email]'],
|
278 |
|
|
'unique_persistent_attr' => ['dn', 'uniqueregistryid'],
|
279 |
|
|
'unique_persistent_attr_binary' => [1, 1, 1, 1],
|
280 |
|
|
'user_dn_expression' => ['cn=%cn,%basedn', 'cn=%username,%basedn'],
|
281 |
|
|
'ldap_to_drupal_user' => ['code', 'different code'],
|
282 |
|
|
|
283 |
|
|
'testing_drupal_username' => ['hpotter', 'hpotter'],
|
284 |
|
|
'testing_drupal_user_dn' => ['cn=hpotter,ou=people,dc=hogwarts,dc=edu', 'cn=hpotter,ou=people,dc=hogwarts,dc=edu'],
|
285 |
|
|
|
286 |
|
|
'grp_unused' => [FALSE, FALSE],
|
287 |
|
|
'grp_object_cat' => ['group', 'group'],
|
288 |
|
|
'grp_nested' => [FALSE, FALSE],
|
289 |
|
|
|
290 |
|
|
'grp_user_memb_attr_exists' => [1, 1],
|
291 |
|
|
'grp_user_memb_attr' => ['memberof', 'memberof'],
|
292 |
|
|
|
293 |
|
|
'grp_memb_attr' => ['member', 'member'],
|
294 |
|
|
'grp_memb_attr_match_user_attr' => ['dn', 'dn'],
|
295 |
|
|
|
296 |
|
|
'grp_derive_from_dn' => [1, 1],
|
297 |
|
|
'grp_derive_from_dn_attr' => ['ou', 'ou'],
|
298 |
|
|
|
299 |
|
|
'grp_test_grp_dn' => ['cn=students,ou=groups,dc=hogwarts,dc=edu', 'cn=students,ou=groups,dc=hogwarts,dc=edu'],
|
300 |
|
|
'grp_test_grp_dn_writeable' => ['cn=students,ou=groups,dc=hogwarts,dc=edu', 'cn=students,ou=groups,dc=hogwarts,dc=edu'],
|
301 |
|
|
|
302 |
|
|
];
|
303 |
|
|
|
304 |
|
|
$lcase_transformed = [
|
305 |
85ad3d82
|
Assos Assos
|
'user_attr',
|
306 |
|
|
'account_name_attr',
|
307 |
|
|
'mail_attr',
|
308 |
|
|
'unique_persistent_attr',
|
309 |
|
|
'grp_user_memb_attr',
|
310 |
|
|
'grp_memb_attr_match_user_attr',
|
311 |
32700c57
|
Assos Assos
|
'grp_derive_from_dn_attr',
|
312 |
|
|
];
|
313 |
85ad3d82
|
Assos Assos
|
|
314 |
|
|
if (!module_exists('php')) {
|
315 |
|
|
unset($server_data[$sid]['ldap_to_drupal_user']);
|
316 |
|
|
}
|
317 |
|
|
|
318 |
|
|
/** add server conf test **/
|
319 |
|
|
$this->drupalGet('admin/config/people/ldap/servers/add');
|
320 |
|
|
|
321 |
32700c57
|
Assos Assos
|
$edit = [];
|
322 |
85ad3d82
|
Assos Assos
|
foreach ($server_data['server1'] as $input_name => $input_values) {
|
323 |
|
|
$edit[$input_name] = $input_values[0];
|
324 |
|
|
}
|
325 |
|
|
$this->drupalPost('admin/config/people/ldap/servers/add', $edit, t('Add'));
|
326 |
|
|
$field_to_prop_map = LdapServer::field_to_properties_map();
|
327 |
|
|
$field_to_prop_map['bindpw'] = 'bindpw';
|
328 |
|
|
$ldap_servers = ldap_servers_get_servers(NULL, 'all', FALSE, TRUE);
|
329 |
bc175c27
|
Assos Assos
|
$this->assertTrue(count(array_keys($ldap_servers)) == 1, 'Add form for ldap server added server.', $this->ldapTestId . ' Add Server');
|
330 |
|
|
$this->assertText('LDAP Server Server server1 added', 'Add form confirmation message', $this->ldapTestId . ' Add Server');
|
331 |
32700c57
|
Assos Assos
|
// Assert one ldap server exists in db table
|
332 |
|
|
// Assert load of server has correct properties for each input.
|
333 |
85ad3d82
|
Assos Assos
|
$mismatches = $this->compareFormToProperties($ldap_servers['server1'], $server_data['server1'], 0, $field_to_prop_map, $lcase_transformed);
|
334 |
|
|
if (count($mismatches)) {
|
335 |
|
|
debug('mismatches between ldap server properties and form submitted values');
|
336 |
|
|
debug($mismatches);
|
337 |
|
|
debug($ldap_servers);
|
338 |
|
|
debug($server_data['server1']);
|
339 |
|
|
}
|
340 |
bc175c27
|
Assos Assos
|
$this->assertTrue(count($mismatches) == 0, 'Add form for ldap server properties match values submitted.', $this->ldapTestId . ' Add Server');
|
341 |
85ad3d82
|
Assos Assos
|
|
342 |
|
|
/** update server conf test **/
|
343 |
|
|
|
344 |
|
|
$this->drupalGet('admin/config/people/ldap/servers/edit/server1');
|
345 |
|
|
|
346 |
32700c57
|
Assos Assos
|
$edit = [];
|
347 |
85ad3d82
|
Assos Assos
|
foreach ($server_data['server1'] as $input_name => $input_values) {
|
348 |
|
|
if ($input_values[1] !== NULL) {
|
349 |
|
|
$edit[$input_name] = $input_values[1];
|
350 |
|
|
}
|
351 |
|
|
}
|
352 |
|
|
|
353 |
|
|
unset($edit['sid']);
|
354 |
|
|
$this->drupalPost('admin/config/people/ldap/servers/edit/server1', $edit, t('Update'));
|
355 |
|
|
$ldap_servers = ldap_servers_get_servers(NULL, 'all', FALSE, TRUE);
|
356 |
bc175c27
|
Assos Assos
|
$this->assertTrue(count(array_keys($ldap_servers)) == 1, 'Update form for ldap server didnt delete or add another server.', $this->ldapTestId . '.Update Server');
|
357 |
32700c57
|
Assos Assos
|
// Assert confirmation message without error
|
358 |
85ad3d82
|
Assos Assos
|
// assert one ldap server exists in db table
|
359 |
32700c57
|
Assos Assos
|
// assert load of server has correct properties for each input.
|
360 |
85ad3d82
|
Assos Assos
|
$mismatches = $this->compareFormToProperties($ldap_servers['server1'], $server_data['server1'], 1, $field_to_prop_map, $lcase_transformed);
|
361 |
|
|
if (count($mismatches)) {
|
362 |
|
|
debug('mismatches between ldap server properties and form submitted values'); debug($mismatches);
|
363 |
|
|
}
|
364 |
bc175c27
|
Assos Assos
|
$this->assertTrue(count($mismatches) == 0, 'Update form for ldap server properties match values submitted.', $this->ldapTestId . '.Update Server');
|
365 |
85ad3d82
|
Assos Assos
|
|
366 |
|
|
/** delete server conf test **/
|
367 |
|
|
$this->drupalGet('admin/config/people/ldap/servers/delete/server1');
|
368 |
32700c57
|
Assos Assos
|
$this->drupalPost('admin/config/people/ldap/servers/delete/server1', [], t('Delete'));
|
369 |
85ad3d82
|
Assos Assos
|
|
370 |
|
|
$ldap_servers = ldap_servers_get_servers(NULL, 'all', FALSE, TRUE);
|
371 |
|
|
|
372 |
bc175c27
|
Assos Assos
|
$this->assertTrue(count(array_keys($ldap_servers)) == 0, 'Delete form for ldap server deleted server.', $this->ldapTestId . '.Delete Server');
|
373 |
85ad3d82
|
Assos Assos
|
|
374 |
32700c57
|
Assos Assos
|
// Return to fake server mode.
|
375 |
|
|
variable_set('ldap_simpletest', $ldap_simpletest_initial);
|
376 |
85ad3d82
|
Assos Assos
|
}
|
377 |
|
|
}
|
378 |
|
|
|
379 |
32700c57
|
Assos Assos
|
/**
|
380 |
|
|
*
|
381 |
|
|
*/
|
382 |
85ad3d82
|
Assos Assos
|
public function serverConfCount() {
|
383 |
|
|
$records = db_query('SELECT * FROM {ldap_servers}')->fetchAllAssoc('sid');
|
384 |
|
|
return count(array_keys($records));
|
385 |
|
|
}
|
386 |
|
|
|
387 |
32700c57
|
Assos Assos
|
/**
|
388 |
|
|
*
|
389 |
|
|
*/
|
390 |
85ad3d82
|
Assos Assos
|
public function compareFormToProperties($object, $data, $item_id, $map, $lcase_transformed) {
|
391 |
|
|
|
392 |
32700c57
|
Assos Assos
|
$mismatches = [];
|
393 |
85ad3d82
|
Assos Assos
|
foreach ($data as $field_id => $values) {
|
394 |
|
|
$field_id = drupal_strtolower($field_id);
|
395 |
|
|
if (!isset($map[$field_id])) {
|
396 |
|
|
continue;
|
397 |
|
|
}
|
398 |
|
|
$property = $map[$field_id];
|
399 |
|
|
if (!property_exists($object, $property) && !property_exists($object, drupal_strtolower($property))) {
|
400 |
|
|
continue;
|
401 |
|
|
}
|
402 |
|
|
$property_value = $object->{$property};
|
403 |
|
|
|
404 |
32700c57
|
Assos Assos
|
// For cases where string input is not same as array.
|
405 |
|
|
$field_value = isset($values[$item_id + 2]) ? $values[$item_id + 2] : $values[$item_id];
|
406 |
85ad3d82
|
Assos Assos
|
|
407 |
32700c57
|
Assos Assos
|
if ($field_id == 'bindpw') {
|
408 |
85ad3d82
|
Assos Assos
|
continue;
|
409 |
|
|
}
|
410 |
|
|
if ($field_id == 'basedn') {
|
411 |
|
|
$pass = count($property_value) == 2;
|
412 |
|
|
if (!$pass) {
|
413 |
|
|
debug($property_value);
|
414 |
|
|
}
|
415 |
|
|
}
|
416 |
|
|
else {
|
417 |
|
|
if (in_array($field_id, $lcase_transformed) && is_scalar($field_value)) {
|
418 |
|
|
$field_value = drupal_strtolower($field_value);
|
419 |
|
|
}
|
420 |
|
|
$property_value_show = (is_scalar($property_value)) ? $property_value : serialize($property_value);
|
421 |
|
|
$field_value_show = (is_scalar($field_value)) ? $field_value : serialize($field_value);
|
422 |
|
|
|
423 |
|
|
if (is_array($property_value) && is_array($field_value)) {
|
424 |
|
|
$pass = count(array_diff($property_value, $field_value)) == 0;
|
425 |
|
|
}
|
426 |
|
|
elseif (is_scalar($property_value) && is_scalar($field_value)) {
|
427 |
|
|
$pass = ($property_value == $field_value);
|
428 |
|
|
}
|
429 |
|
|
else {
|
430 |
|
|
$pass = FALSE;
|
431 |
|
|
}
|
432 |
|
|
}
|
433 |
|
|
if (!$pass) {
|
434 |
|
|
$mismatches[] = "property $property ($property_value_show) does not match field $field_id value ($field_value_show)";
|
435 |
|
|
}
|
436 |
|
|
}
|
437 |
|
|
|
438 |
|
|
return $mismatches;
|
439 |
|
|
}
|
440 |
|
|
|
441 |
|
|
} |