You are here

public function LdapServersTestCase::testApiFunctions in Lightweight Directory Access Protocol (LDAP) 7.2

Same name and namespace in other branches
  1. 8.2 ldap_servers/tests/ldap_servers.test \LdapServersTestCase::testApiFunctions()

File

ldap_servers/tests/ldap_servers.test, line 63

Class

LdapServersTestCase

Code

public function testApiFunctions() {
  $group = 'ldap_servers: functions';

  // , 'activedirectory1'.
  foreach ([
    'openldap1',
    'activedirectory1',
  ] as $sid) {
    $ldap_type = $sid == 'openldap1' ? 'Open Ldap' : 'Active Directory';
    $this
      ->prepTestData('hogwarts', [
      $sid,
    ]);
    $group = "ldap_servers: functions: {$ldap_type}";
    $test_data = variable_get('ldap_test_server__' . $sid, []);
    ldap_servers_module_load_include('php', 'ldap_test', 'LdapServerTest.class');
    $ldap_server = LdapServerTest::getLdapServerObjects($sid, NULL, TRUE);

    // Check against csv data rather than ldap array to make sure csv to ldap conversion is correct.
    $user_csv_entry = $test_data['csv']['users']['101'];
    $user_dn = $user_csv_entry['dn'];
    $user_cn = $user_csv_entry['cn'];
    $user_ldap_entry = $test_data['ldap'][$user_dn];
    $username = $ldap_server
      ->userUsernameFromLdapEntry($user_ldap_entry);
    $this
      ->assertTrue($username == $user_csv_entry['cn'], 'LdapServer::userUsernameFromLdapEntry works when LdapServer::user_attr attribute used', $group);
    $bogus_ldap_entry = [];
    $username = $ldap_server
      ->userUsernameFromLdapEntry($bogus_ldap_entry);
    $this
      ->assertTrue($username === FALSE, 'LdapServer::userUsernameFromLdapEntry fails correctly', $group);
    $username = $ldap_server
      ->userUsernameFromDn($user_dn);
    $this
      ->assertTrue($username == $user_cn, 'LdapServer::userUsernameFromDn works when LdapServer::user_attr attribute used', $group);
    $username = $ldap_server
      ->userUsernameFromDn('bogus dn');
    $this
      ->assertTrue($username === FALSE, 'LdapServer::userUsernameFromDn fails correctly', $group);
    $desired = [];
    $desired[0] = [
      0 => 'cn=gryffindor,ou=groups,dc=hogwarts,dc=edu',
      1 => 'cn=students,ou=groups,dc=hogwarts,dc=edu',
      2 => 'cn=honors students,ou=groups,dc=hogwarts,dc=edu',
    ];
    $desired[1] = array_merge($desired[0], [
      'cn=users,ou=groups,dc=hogwarts,dc=edu',
    ]);
    foreach ([
      0,
      1,
    ] as $nested) {
      $nested_display = $nested ? 'nested' : 'not nested';
      $desired_count = $nested ? 4 : 3;
      $ldap_module_user_entry = [
        'attr' => $user_ldap_entry,
        'dn' => $user_dn,
      ];
      $groups_desired = $desired[$nested];
      $suffix = ",desired={$desired_count}, nested=" . (bool) $nested;

      // Test parent function groupMembershipsFromUser.
      $groups = $ldap_server
        ->groupMembershipsFromUser($ldap_module_user_entry, 'group_dns', $nested);
      $count = count($groups);
      $diff1 = array_diff($groups_desired, $groups);
      $diff2 = array_diff($groups, $groups_desired);
      $pass = count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count;
      $this
        ->assertTrue($pass, "LdapServer::groupMembershipsFromUser nested={$nested}", $group . $suffix);
      if (!$pass) {
        debug('groupMembershipsFromUser');
        debug($groups);
        debug($diff1);
        debug($diff2);
        debug($groups_desired);
      }

      // Test parent groupUserMembershipsFromUserAttr, for openldap should be false, for ad should work.
      $groups = $ldap_server
        ->groupUserMembershipsFromUserAttr($ldap_module_user_entry, $nested);
      $count = is_array($groups) ? count($groups) : $count;
      $pass = $count === FALSE;
      if ($sid == 'openldap1') {
        $pass = $groups === FALSE;
      }
      else {
        $pass = count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count;
      }
      $this
        ->assertTrue($pass, "LdapServer::groupUserMembershipsFromUserAttr {$nested_display}, {$ldap_type}, is false because not configured", $group . $suffix);
      if (!$pass) {
        debug('groupUserMembershipsFromUserAttr');
        debug($groups);
        debug($diff1);
        debug($diff2);
      }
      $groups = $ldap_server
        ->groupUserMembershipsFromEntry($ldap_module_user_entry, $nested);
      $count = count($groups);
      $diff1 = array_diff($groups_desired, $groups);
      $diff2 = array_diff($groups, $groups_desired);
      $pass = count($diff1) == 0 && count($diff2) == 0 && $count == $desired_count;
      $this
        ->assertTrue($pass, "LdapServer::groupUserMembershipsFromEntry {$nested_display} works", $group . $suffix);
      if (!$pass) {
        debug('groupUserMembershipsFromEntry');
        debug($groups);
        debug($diff1);
        debug($diff2);
        debug($groups_desired);
      }
    }
  }
}