Projet

Général

Profil

Paste
Télécharger (12 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / modules / ldap / ldap_test / LdapTestCase.class.php @ 32700c57

1 85ad3d82 Assos Assos
<?php
2
3
/**
4
 * @file
5 32700c57 Assos Assos
 * Simpletest class for LDAP simpletests.
6 85ad3d82 Assos Assos
 */
7
8
module_load_include('php', 'ldap_test', 'LdapTestFunctions.class');
9 32700c57 Assos Assos
/**
10
 *
11
 */
12 85ad3d82 Assos Assos
class LdapTestCase extends DrupalWebTestCase {
13
14
  public $testFunctions;
15
  public $module_name;
16
17 32700c57 Assos Assos
  /**
18
   * Storage for test data.
19
   */
20 85ad3d82 Assos Assos
  public $useFeatureData;
21
  public $featurePath;
22
  public $featureName;
23
  public $consumerAdminConf;
24
25
  public $ldapTestId;
26
  public $authorizationData;
27
  public $authenticationData;
28 32700c57 Assos Assos
  public $testData = [];
29 85ad3d82 Assos Assos
30 32700c57 Assos Assos
  /**
31
   * Current, or only, sid.
32
   */
33
  public $sid;
34 85ad3d82 Assos Assos
35 32700c57 Assos Assos
  /**
36
   *
37
   */
38
  public function __construct($test_id = NULL) {
39 85ad3d82 Assos Assos
    parent::__construct($test_id);
40
    $this->testFunctions = new LdapTestFunctions();
41
  }
42
43 32700c57 Assos Assos
  /**
44
   *
45
   */
46
  public function setUp() {
47 85ad3d82 Assos Assos
    $modules = func_get_args();
48
    if (isset($modules[0]) && is_array($modules[0])) {
49
      $modules = $modules[0];
50
    }
51
    parent::setUp($modules);
52
    variable_set('ldap_simpletest', 2);
53
    variable_set('ldap_help_watchdog_detail', 0);
54
    $this->createTestUserFields();
55
56
  }
57
58 32700c57 Assos Assos
  /**
59
   *
60
   */
61
  public function tearDown() {
62 85ad3d82 Assos Assos
    parent::tearDown();
63
    variable_del('ldap_help_watchdog_detail');
64
    variable_del('ldap_simpletest');
65
  }
66
67
  /**
68 32700c57 Assos Assos
   * Setup configuration and fake test data for all ldap modules.
69 85ad3d82 Assos Assos
   *
70 32700c57 Assos Assos
   * @param string $test_ldap_id
71
   *   name of directory in ldap_test where data is (e.g. hogwarts)
72 85ad3d82 Assos Assos
   *
73 32700c57 Assos Assos
   *   the following params are ids that indicate what config data in /ldap_test/<module_name>.conf.inc to use
74
   *   for example if $ldap_user_conf_id = 'ad_authentication', the array /ldap_test/ldap_user.conf.inc with the key
75
   *   'ad_authentication' will be used for the user module cofiguration.
76 85ad3d82 Assos Assos
   *
77 32700c57 Assos Assos
   * @param array $sids
78
   *   to setup.
79 85ad3d82 Assos Assos
   * @param string $ldap_user_conf_id
80 32700c57 Assos Assos
   * @param string $ldap_authentication_conf_id
81
   *   = NULL,.
82
   * @param string $ldap_authorization_conf_id
83
   *   = NULL,.
84
   * @param string $ldap_feeds_conf_id
85
   *   = NULL,.
86
   * @param string $ldap_query_conf_id
87
   *   = NULL.
88 85ad3d82 Assos Assos
   */
89 32700c57 Assos Assos
  public function prepTestData(
90 85ad3d82 Assos Assos
      $test_ldap_id,
91
      $sids,
92
      $ldap_user_conf_id = NULL,
93
      $ldap_authentication_conf_id = NULL,
94
      $ldap_authorization_conf_id = NULL,
95
      $ldap_feeds_conf_id = NULL,
96
      $ldap_query_conf_id = NULL
97
    ) {
98
99
    $this->testFunctions->configureLdapServers($sids);
100
101
    foreach ($sids as $sid) {
102
      $this->testFunctions->populateFakeLdapServerData($test_ldap_id, $sid);
103
    }
104
105
    if ($ldap_user_conf_id) {
106
      $this->testFunctions->configureLdapUser($ldap_user_conf_id);
107
    }
108
    if ($ldap_authentication_conf_id) {
109
      $this->testFunctions->configureLdapAuthentication($ldap_authentication_conf_id, $sids);
110
    }
111
112
    if ($ldap_authorization_conf_id) {
113
      $authorization_data = ldap_test_ldap_authorization_data();
114
      if (!empty($authorization_data[$ldap_authorization_conf_id])) {
115
        $this->testFunctions->prepConsumerConf($authorization_data[$ldap_authorization_conf_id]);
116
        foreach ($authorization_data[$ldap_authorization_conf_id] as $consumer_type => $discard) {
117
          $this->consumerAdminConf[$consumer_type] = ldap_authorization_get_consumer_admin_object($consumer_type);
118
        }
119
      }
120
    }
121
  }
122
123
  /**
124 32700c57 Assos Assos
   * Attempt to derive a testid from backtrace.
125 85ad3d82 Assos Assos
   */
126
  public function testId($description = NULL, $method = NULL) {
127
128
    static $test_id;
129
    static $i;
130
131
    if ($description || $method) {
132
      $test_id = NULL;
133
      $i = 0;
134
    }
135 32700c57 Assos Assos
    // Default test id.
136
    elseif ($test_id) {
137 85ad3d82 Assos Assos
      $i++;
138
      return $test_id . '.' . $i;
139
    }
140
    if (!$method) {
141
      $trace = debug_backtrace();
142
143
      $caller = array_shift($trace);
144
      $caller = array_shift($trace);
145
      $method = $caller['function'];
146
      $count = 1;
147
      $method = str_replace('test', '', $method, $count);
148
    }
149
150 32700c57 Assos Assos
    $test_id = join(".", [$this->module_name, $method, $description]);
151 85ad3d82 Assos Assos
    return $test_id;
152
153
  }
154 32700c57 Assos Assos
155
  /**
156
   *
157
   */
158 85ad3d82 Assos Assos
  public function removeUserFromGroup(&$test_data, $user_dn, $group_dn, $domain = "dc=hogwarts,dc=edu") {
159
160 32700c57 Assos Assos
    $filter = "(&(objectClass=group)(member=$user_dn))";
161
    if (!empty($test_data['search_results'][$filter][$domain]) &&
162 85ad3d82 Assos Assos
            in_array($group_dn, $test_data['search_results'][$filter][$domain])) {
163 32700c57 Assos Assos
      $test_data['search_results'][$filter][$domain] = array_diff($test_data['search_results'][$filter][$domain], [$group_dn]);
164
      $test_data['search_results'][$filter][$domain]['count'] = count($test_data['search_results'][$filter][$domain] - 1);
165
    }
166 85ad3d82 Assos Assos
167 32700c57 Assos Assos
    if (!empty($test_data['users'][$user_dn]['attr']['memberof']) && in_array($group_dn, $test_data['users'][$user_dn]['attr']['memberof'])) {
168
      $test_data['users'][$user_dn]['attr']['memberof'] = array_diff($test_data['users'][$user_dn]['attr']['memberof'], [$group_dn]);
169
      $test_data['users'][$user_dn]['attr']['memberof']['count'] = count($test_data['users'][$user_dn]['attr']['memberof'] - 1);
170
    }
171 85ad3d82 Assos Assos
172 32700c57 Assos Assos
    if (!empty($test_data['ldap'][$user_dn]['memberof']) && in_array($group_dn, $test_data['ldap'][$user_dn]['memberof'])) {
173
      $test_data['ldap'][$user_dn]['memberof'] = array_diff($test_data['ldap'][$user_dn]['memberof'], [$group_dn]);
174
      $test_data['ldap'][$user_dn]['memberof']['count'] = count($test_data['ldap'][$user_dn]['memberof']) - 1;
175
    }
176 85ad3d82 Assos Assos
177 32700c57 Assos Assos
    if (!empty($test_data['groups'][$group_dn]['attr']['member']) && in_array($group_dn, $test_data['groups'][$group_dn]['attr']['member'])) {
178
      $members = array_diff($test_data['groups'][$group_dn]['attr']['member'], [$group_dn]);
179
      $test_data['groups'][$group_dn]['attr']['member'] = $members;
180
      $test_data['groups'][$group_dn]['attr']['member'][$i]['count'] = count($members - 1);
181 85ad3d82 Assos Assos
    }
182 32700c57 Assos Assos
  }
183 85ad3d82 Assos Assos
184 32700c57 Assos Assos
  /**
185
   *
186
   */
187 85ad3d82 Assos Assos
  public function AttemptLogonNewUser($name, $goodpwd = TRUE) {
188
189
    $this->drupalLogout();
190
191 32700c57 Assos Assos
    $edit = [
192 85ad3d82 Assos Assos
      'name' => $name,
193
      'pass' => ($goodpwd) ? "goodpwd" : "badpwd",
194 32700c57 Assos Assos
    ];
195 85ad3d82 Assos Assos
    $user = user_load_by_name($name);
196
    if ($user) {
197
      user_delete($user->uid);
198
    }
199
    $this->drupalPost('user', $edit, t('Log in'));
200
  }
201
202
  /**
203 32700c57 Assos Assos
   * Keep user entity fields function for ldap_user
204 85ad3d82 Assos Assos
   * in base class instead of user test class in case
205 32700c57 Assos Assos
   * module integration testing is needed.
206 85ad3d82 Assos Assos
   */
207 32700c57 Assos Assos
  public function createTestUserFields() {
208 85ad3d82 Assos Assos
    foreach ($this->ldap_user_test_entity_fields() as $field_id => $field_conf) {
209
      $field_info = field_info_field($field_id);
210
      if (!$field_info) {
211
        field_create_field($field_conf['field']);
212
        field_create_instance($field_conf['instance']);
213
      }
214
      $field_info = field_info_field($field_id);
215
    }
216
  }
217
218 32700c57 Assos Assos
  /**
219
   *
220
   */
221
  public function ldap_user_test_entity_fields() {
222 85ad3d82 Assos Assos
223 32700c57 Assos Assos
    $fields = [];
224 85ad3d82 Assos Assos
225 32700c57 Assos Assos
    $fields['field_lname']['field'] = [
226 85ad3d82 Assos Assos
      'field_name' => 'field_lname',
227
      'type' => 'text',
228 32700c57 Assos Assos
      'settings' => [
229 85ad3d82 Assos Assos
        'max_length' => 64,
230 32700c57 Assos Assos
      ],
231
    ];
232 85ad3d82 Assos Assos
233 32700c57 Assos Assos
    $fields['field_lname']['instance'] = [
234 85ad3d82 Assos Assos
      'field_name' => 'field_lname',
235
      'entity_type' => 'user',
236
      'label' => 'Last Name',
237
      'bundle' => 'user',
238
      'required' => FALSE,
239 32700c57 Assos Assos
      'widget' => [
240 85ad3d82 Assos Assos
        'type' => 'text_textfield',
241 32700c57 Assos Assos
      ],
242
      'display' => [
243
        'default' => [
244 85ad3d82 Assos Assos
          'type' => 'text_default',
245 32700c57 Assos Assos
        ],
246
      ],
247
      'settings' => ['user_register_form' => FALSE],
248
    ];
249 85ad3d82 Assos Assos
250 32700c57 Assos Assos
    $fields['field_department']['field'] = [
251 85ad3d82 Assos Assos
      'field_name' => 'field_department',
252
      'type' => 'text',
253 32700c57 Assos Assos
      'settings' => [
254 85ad3d82 Assos Assos
        'max_length' => 64,
255 32700c57 Assos Assos
      ],
256
    ];
257 85ad3d82 Assos Assos
258 32700c57 Assos Assos
    $fields['field_department']['instance'] = [
259 85ad3d82 Assos Assos
      'field_name' => 'field_department',
260
      'entity_type' => 'user',
261
      'label' => 'Department',
262
      'bundle' => 'user',
263
      'required' => FALSE,
264 32700c57 Assos Assos
      'widget' => [
265 85ad3d82 Assos Assos
        'type' => 'text_textfield',
266 32700c57 Assos Assos
      ],
267
      'display' => [
268
        'default' => [
269 85ad3d82 Assos Assos
          'type' => 'text_default',
270 32700c57 Assos Assos
        ],
271
      ],
272
      'settings' => ['user_register_form' => FALSE],
273
    ];
274 85ad3d82 Assos Assos
275 32700c57 Assos Assos
    $fields['field_fname']['field'] = [
276 85ad3d82 Assos Assos
      'field_name' => 'field_fname',
277
      'type' => 'text',
278 32700c57 Assos Assos
      'settings' => [
279 85ad3d82 Assos Assos
        'max_length' => 64,
280 32700c57 Assos Assos
      ],
281
    ];
282 85ad3d82 Assos Assos
283 32700c57 Assos Assos
    $fields['field_fname']['instance'] = [
284 85ad3d82 Assos Assos
      'field_name' => 'field_fname',
285
      'entity_type' => 'user',
286
      'label' => 'Last Name',
287
      'bundle' => 'user',
288
      'required' => FALSE,
289 32700c57 Assos Assos
      'widget' => [
290 85ad3d82 Assos Assos
        'type' => 'text_textfield',
291 32700c57 Assos Assos
      ],
292
      'display' => [
293
        'default' => [
294 85ad3d82 Assos Assos
          'type' => 'text_default',
295 32700c57 Assos Assos
        ],
296
      ],
297
      'settings' => ['user_register_form' => FALSE],
298
    ];
299 85ad3d82 Assos Assos
300 32700c57 Assos Assos
    // Display name for testing compound tokens.
301
    $fields['field_display_name']['field'] = [
302 85ad3d82 Assos Assos
      'field_name' => 'field_display_name',
303
      'type' => 'text',
304 32700c57 Assos Assos
      'settings' => [
305 85ad3d82 Assos Assos
        'max_length' => 64,
306 32700c57 Assos Assos
      ],
307
    ];
308 85ad3d82 Assos Assos
309 32700c57 Assos Assos
    $fields['field_display_name']['instance'] = [
310 85ad3d82 Assos Assos
      'field_name' => 'field_display_name',
311
      'entity_type' => 'user',
312
      'label' => 'Display Name',
313
      'bundle' => 'user',
314
      'required' => FALSE,
315 32700c57 Assos Assos
      'widget' => [
316 85ad3d82 Assos Assos
        'type' => 'text_textfield',
317 32700c57 Assos Assos
      ],
318
      'display' => [
319
        'default' => [
320 85ad3d82 Assos Assos
          'type' => 'text_default',
321 32700c57 Assos Assos
        ],
322
      ],
323
      'settings' => ['user_register_form' => FALSE],
324
    ];
325 85ad3d82 Assos Assos
326 32700c57 Assos Assos
    // Display name for testing compound tokens.
327
    $fields['field_binary_test']['field'] = [
328 85ad3d82 Assos Assos
      'field_name' => 'field_binary_test',
329
      'type' => 'text',
330
      'size' => 'big',
331 32700c57 Assos Assos
    ];
332 85ad3d82 Assos Assos
333 32700c57 Assos Assos
    $fields['field_binary_test']['instance'] = [
334 85ad3d82 Assos Assos
      'field_name' => 'field_binary_test',
335
      'entity_type' => 'user',
336
      'label' => 'Binary Field',
337
      'bundle' => 'user',
338
      'required' => FALSE,
339 32700c57 Assos Assos
      'widget' => [
340 85ad3d82 Assos Assos
        'type' => 'text_textfield',
341 32700c57 Assos Assos
      ],
342
      'display' => [
343
        'default' => [
344 85ad3d82 Assos Assos
          'type' => 'text_default',
345 32700c57 Assos Assos
        ],
346
      ],
347
      'settings' => ['user_register_form' => FALSE],
348
    ];
349 85ad3d82 Assos Assos
350
    return $fields;
351
352
  }
353
354 32700c57 Assos Assos
  /**
355
   *
356
   */
357 85ad3d82 Assos Assos
  public function checkConsumerConfSetup($conf_id) {
358
359
    $authorization_data = ldap_test_ldap_authorization_data();
360
    $props_set_correctly = TRUE;
361
362
    foreach ($authorization_data[$conf_id] as $consumer_type => $conf) {
363 32700c57 Assos Assos
      $props_set_display = [];
364 85ad3d82 Assos Assos
      foreach ($conf as $prop => $values) {
365
        if (!property_exists($this->consumerAdminConf[$consumer_type], $prop)) {
366
          $props_set_correctly = FALSE;
367
          $props_set_display[] = $prop . " $consumer_type property does not exist in consumer conf object";
368
        }
369
        elseif (is_scalar($this->consumerAdminConf[$consumer_type]->{$prop})) {
370
          if ($this->consumerAdminConf[$consumer_type]->{$prop} == $values) {
371
            $props_set_display[] = $prop . " $consumer_type set to $values correctly";
372
          }
373
          else {
374
            $props_set_correctly = FALSE;
375
            $props_set_display[] = $prop . " $consumer_type not set to $values correctly";
376
          }
377
        }
378
      }
379
    }
380
381 32700c57 Assos Assos
    return [$props_set_display, $props_set_correctly];
382 85ad3d82 Assos Assos
  }
383
384 32700c57 Assos Assos
  /**
385
   *
386
   */
387 85ad3d82 Assos Assos
  public function compareFormToProperties($object, $data, $item_id, $map, $lcase_transformed) {
388
389 32700c57 Assos Assos
    $mismatches = [];
390 85ad3d82 Assos Assos
    foreach ($data as $field_id => $values) {
391
      $field_id = drupal_strtolower($field_id);
392
      if (!isset($map[$field_id])) {
393
        continue;
394
      }
395
      $property = $map[$field_id];
396
      if (!is_object($object) || !property_exists($object, $property) && !property_exists($object, drupal_strtolower($property))) {
397
        continue;
398
      }
399
      $property_value = $object->{$property};
400
401 32700c57 Assos Assos
      // For cases where string input is not same as array.
402
      $field_value = isset($values[$item_id + 2]) ? $values[$item_id + 2] : $values[$item_id];
403 85ad3d82 Assos Assos
404
      if (in_array($field_id, $lcase_transformed) && is_scalar($field_value)) {
405
        $field_value = drupal_strtolower($field_value);
406
      }
407
      $property_value_show = (is_scalar($property_value)) ? $property_value : serialize($property_value);
408
      $field_value_show = (is_scalar($field_value)) ? $field_value : serialize($field_value);
409
410
      if (is_array($property_value) && is_array($field_value)) {
411
        $pass = count(array_diff($property_value, $field_value)) == 0;
412
      }
413
      elseif (is_scalar($property_value) && is_scalar($field_value)) {
414
        $pass = ($property_value == $field_value);
415
      }
416
      else {
417
        $pass = FALSE;
418
      }
419
420
      if (!$pass) {
421
        $mismatches[] = "property $property ($property_value_show) does not match field $field_id value ($field_value_show)";
422
      }
423
    }
424
425
    return $mismatches;
426
  }
427
428
}