You are here

class LdapAuthenticationTestCase in Lightweight Directory Access Protocol (LDAP) 8.2

Same name and namespace in other branches
  1. 7.2 ldap_authentication/tests/ldap_authentication.test \LdapAuthenticationTestCase
  2. 7 ldap_authentication/tests/ldap_authentication.test \LdapAuthenticationTestCase

Hierarchy

Expanded class hierarchy of LdapAuthenticationTestCase

File

ldap_authentication/tests/ldap_authentication.test, line 11

View source
class LdapAuthenticationTestCase extends LdapTestCase {
  public static function getInfo() {
    return array(
      'name' => 'LDAP Authentication Tests',
      'description' => 'Test ldap authentication.',
      'group' => 'LDAP Authentication',
    );
  }
  function __construct($test_id = NULL) {
    parent::__construct($test_id);
  }
  public $module_name = 'ldap_authentication';
  protected $ldap_test_data;
  function setUp() {
    parent::setUp(array(
      'ldap_authentication',
      'ldap_authorization',
      'ldap_authorization_drupal_role',
      'ldap_test',
    ));

    // don't need any real servers, configured, just ldap_servers code base
    variable_set('ldap_simpletest', 2);
  }
  function tearDown() {
    parent::tearDown();
    variable_del('ldap_help_watchdog_detail');
    variable_del('ldap_simpletest');
  }

  /**
   * difficult to test install and uninstall since setUp does module enabling and installing.
   */
  function testInstall() {
    $testid = $this->module_name . ': setup success';
    $setup_success = module_exists('ldap_authentication') && module_exists('ldap_servers');
    $this
      ->assertTrue($setup_success, ' ldap_authentication setup successful', $testid);
  }

  /**
   *  LDAP Authentication Mixed Mode User Logon Test (ids = LDAP_authen.MM.ULT.*)
   */
  function testMixedModeUserLogon() {
    $sid = 'activedirectory1';
    $testid = 'MixedModeUserLogon3';
    $sids = array(
      $sid,
    );
    $this
      ->prepTestData(LDAP_TEST_LDAP_NAME, $sids, 'provisionToDrupal', 'MixedModeUserLogon3', 'drupal_role_authentication_test');
    $ldap_servers = ldap_servers_get_servers($sid, 'enabled');
    $this
      ->assertTrue(count($ldap_servers) == 1, ' ldap_authentication test server setup successful', $testid);

    /**
     * LDAP_authen.MM.ULT.user1.goodpwd -- result: Successful logon as user 1
     */
    $user1 = user_load(1);
    $password = $this
      ->randomString(20);
    require_once DRUPAL_ROOT . '/includes/password.inc';
    $account = array(
      'name' => $user1->name,
      'pass' => user_hash_password(trim($password)),
    );
    db_update('users')
      ->fields($account)
      ->condition('uid', 1)
      ->execute();
    $edit = array(
      'name' => $user1->name,
      'pass' => $password,
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'User 1 successfully authenticated', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.user1.badpwd  -- result: Drupal logon error message. **/
    $edit = array(
      'name' => $user1->name,
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'User 1 failed with bad password', $testid);
    $this
      ->drupalLogout();

    /** LDAP_authen.MM.ULT.drupal.goodpwd - result: Successful logon **/
    $drupal_user = $this
      ->drupalCreateUser();
    $raw_pass = $drupal_user->pass_raw;
    $edit = array(
      'name' => $drupal_user->name,
      'pass' => $raw_pass,
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'Drupal user (not ldap associated) successfully authenticated', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.drupal.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => $drupal_user->name,
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'Drupal user  (not ldap associated) with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.ldap.newaccount.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'New Ldap user with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.ldap.newaccount.goodpwd - result: Successful logon, with user record created and authmapped to ldap **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'goodpwd',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'New Ldap user with good password authenticated.');
    $this
      ->assertTrue($this->testFunctions
      ->ldapUserIsAuthmapped('hpotter'), 'Ldap user properly authmapped.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.existingacct.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'Existing Ldap user with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.existingacct.goodpwd - result: Successful logon. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'goodpwd',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'Existing Ldap user with good password authenticated.');
    $this
      ->assertTrue($this->testFunctions
      ->ldapUserIsAuthmapped('hpotter'), 'Existing Ldap user still properly authmapped.', $testid);
    $this
      ->drupalGet('user/logout');
  }

  /**
   *  LDAP Authentication Exclusive Mode User Logon Test (ids = LDAP_authen.EM.ULT.*)
   */
  function testExclusiveModeUserLogon() {
    $sid = 'activedirectory1';
    $testid = 'ExclusiveModeUserLogon3';
    $sids = array(
      $sid,
    );
    $this
      ->prepTestData(LDAP_TEST_LDAP_NAME, $sids, 'ad_authentication', 'ExclusiveModeUserLogon3', 'drupal_role_authentication_test');
    $ldap_servers = ldap_servers_get_servers($sid, 'enabled');
    $this
      ->assertTrue(count($ldap_servers) == 1, ' ldap_authentication test server setup successful', $testid);

    /**
     * LDAP_authen.EM.ULT.user1.goodpwd -- result: Successful logon as user 1
     */
    $user1 = user_load(1);
    $password = $this
      ->randomString(20);
    require_once DRUPAL_ROOT . '/includes/password.inc';
    $account = array(
      'name' => $user1->name,
      'pass' => user_hash_password(trim($password)),
    );
    db_update('users')
      ->fields($account)
      ->condition('uid', 1)
      ->execute();
    $edit = array(
      'name' => $user1->name,
      'pass' => $password,
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'User 1 successfully authenticated', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.EM.ULT.user1.badpwd  -- result: Drupal logon error message. **/
    $edit = array(
      'name' => $user1->name,
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'User 1 failed with bad password', $testid);
    $this
      ->drupalLogout();

    /** LDAP_authen.EM.ULT.drupal.goodpwd - result: failed logon **/
    $drupal_user = $this
      ->drupalCreateUser();
    $raw_pass = $drupal_user->pass_raw;
    $edit = array(
      'name' => $drupal_user->name,
      'pass' => $raw_pass,
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'Drupal user successfully authenticated', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.EM.ULT.drupal.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => $drupal_user->name,
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'Drupal user with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.EM.ULT.ldap.newaccount.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'New Ldap user with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.EM.ULT.ldap.newaccount.goodpwd - result: Successful logon, with user record created and authmapped to ldap **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'goodpwd',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'New Ldap user with good password authenticated.');
    $this
      ->assertTrue($this->testFunctions
      ->ldapUserIsAuthmapped('hpotter'), 'Ldap user properly authmapped.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.EM.ULT.existingacct.badpwd - result: Drupal logon error message. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'mydabpassword',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Sorry, unrecognized username or password'), 'Existing Ldap user with bad password failed to authenticate.', $testid);
    $this
      ->drupalGet('user/logout');

    /** LDAP_authen.MM.ULT.existingacct.goodpwd - result: Successful logon. **/
    $edit = array(
      'name' => 'hpotter',
      'pass' => 'goodpwd',
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'Existing Ldap user with good password authenticated.');
    $this
      ->assertTrue($this->testFunctions
      ->ldapUserIsAuthmapped('hpotter'), 'Existing Ldap user still properly authmapped.', $testid);
    $this
      ->drupalGet('user/logout');
  }

  /**
   * set mock server variables for sso tests
   *
   * @param object $drupal_user in drupal stdClass format
   * @param array $ldap_user array
   * @param enum ldap implementation type
   *
   */
  private function setSsoServerEnvironment($sso_username = NULL, $ldapImplementation = 'mod_auth_sspi') {

    // clear past environment
    // these need to be set in simpletest client browser,
    // or a new user/client browser  created each test
    // perhaps there is a wrapper function in simpletest framework for altering
    // $_SESSION ?

    //setcookie("seamless_login", '');

    //unset($_SESSION['seamless_login']);

    //setcookie("seamless_login_attempted", '');

    //unset($_SESSION['seamless_login_attempted']);
    if ($sso_username !== FALSE) {
      $_SERVER['REMOTE_USER'] = $sso_username;
      $_SERVER['REDIRECT_REMOTE_USER'] = $sso_username;
    }
  }

  /**
   *  LDAP Authentication Exclusive Mode User Logon Test (ids = LDAP_authen.EM.ULT.*)
   */
  function x_testSSOUserLogon() {
    module_enable(array(
      'ldap_sso',
    ));
    $sid = 'activedirectory1';
    $testid = 'SSOUserLogon3';
    $sids = array(
      $sid,
    );
    $this
      ->prepTestData(LDAP_TEST_LDAP_NAME, $sids, 'ad_authentication', 'SSOUserLogon');
    $ldap_servers = ldap_servers_get_servers($sid, 'enabled');
    $this
      ->assertTrue(count($ldap_servers) == 1, ' ldap_authentication test server setup successful', $testid);
    $hpotter_drupal = user_load_by_name('hpotter');
    $ldap_user_conf = ldap_user_conf('admin', TRUE);
    $hpotter_ldap = $ldap_user_conf
      ->getProvisionRelatedLdapEntry($hpotter_drupal);
    foreach (array(
      'hpotter',
    ) as $sso_name) {

      // array('hpotter@hogwarts', 'hogwarts\hpotter', 'hpotter')
      foreach (array(
        'user',
      ) as $test_path) {

        // ,'user/login/sso'
        foreach (array(
          'mod_auth_sspi',
        ) as $ldapImplementation) {

          // , 'mod_auth_kerb'
          foreach (array(
            TRUE,
          ) as $seamlessLogin) {

            // , FALSE
            foreach (array(
              TRUE,
            ) as $ssoRemoteUserStripDomainName) {

              // , FALSE
              foreach (array(
                TRUE,
                FALSE,
              ) as $invalid_server_data) {
                $this->ldapTestId = "testSSO.{$sso_name}.invalid_server_data={$invalid_server_data}.path.{$test_path}.{$ldapImplementation}.seamlessLogin.{$seamlessLogin}.ssoRemoteUserStripDomainName.{$ssoRemoteUserStripDomainName}";
                $this
                  ->assertTrue(TRUE, 'test of loop', $this->ldapTestId);
                $sso_name = $invalid_server_data ? 'blah' : $sso_name;
                $this
                  ->setSsoServerEnvironment($sso_name, $ldapImplementation);
                $this
                  ->drupalGet($test_path);

                /**
                 * what should results be?
                 */
                if ($invalid_server_data) {

                  // user should end up on logon page with logon form
                }
                elseif ($seamlessLogin) {

                  // if seemless logon, should end up on requested page
                }
                else {
                }

                // test resulting page path and logged in
                //  $this->drupalLogout();
                // test logged out
              }
            }
          }
        }
      }
    }
  }
  function testAuthenticationWhitelistTests() {
    require_once drupal_get_path('module', 'ldap_authentication') . '/LdapAuthenticationConfAdmin.class.php';
    $sid = 'activedirectory1';
    $testid = 'WL3';
    $sids = array(
      $sid,
    );
    $this
      ->prepTestData('hogwarts', array(
      $sid,
    ), 'provisionToDrupal', 'WL3', 'drupal_role_authentication_test');

    //debug($this->testFunctions);
    $ldap_servers = ldap_servers_get_servers($sid, 'enabled');
    $this
      ->assertTrue(count($ldap_servers) == 1, ' ldap_authentication test server setup successful', $testid);

    // these 2 modules are configured in setup, but disabled for most authentication tests
    module_disable(array(
      'ldap_authorization_drupal_role',
      'ldap_authorization',
    ));

    /**
     * LDAP_authen.WL.user1  test for user 1 being excluded from white and black list tests
     */
    $user1 = user_load(1);
    $password = $this
      ->randomString(20);
    require_once DRUPAL_ROOT . '/includes/password.inc';
    $account = array(
      'name' => $user1->name,
      'pass' => user_hash_password(trim($password)),
    );
    db_update('users')
      ->fields($account)
      ->condition('uid', 1)
      ->execute();
    $edit = array(
      'name' => $user1->name,
      'pass' => $password,
    );
    $this
      ->drupalPost('user', $edit, t('Log in'));
    $this
      ->assertText(t('Member for'), 'User 1 successfully authenticated in LDAP_authen.WL.user1', $testid);
    $this
      ->drupalGet('user/logout');
    module_enable(array(
      'ldap_authorization',
    ));
    module_enable(array(
      'ldap_authorization_drupal_role',
    ));

    /**
     * prep LDAP_authen.WL.allow
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->allowOnlyIfTextInDn = array(
      'pot',
    );
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * LDAP_authen.WL.allow.match -- desirect_result: authenticate success
     */
    $this
      ->AttemptLogonNewUser('hpotter');
    $this
      ->assertText(t('Member for'), 'User able to authenticate because in white list (allowOnlyIfTextInDn).', $testid);

    /**
     *  LDAP_authen.WL.allow.miss -- desirect_result: authenticate fail
     */
    $this
      ->AttemptLogonNewUser('ssnape');
    $this
      ->assertText(t('User disallowed'), 'User unable to authenticate because not in white list (allowOnlyIfTextInDn).', $testid);

    /**
     * undo LDAP_authen.WL.allow settings
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->allowOnlyIfTextInDn = array();
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * prep LDAP_authen.WL.exclude
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->excludeIfTextInDn = array(
      'cn=ssnape',
    );
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * LDAP_authen.WL.exclude.match -- desirect_result: authenticate fail
     */
    $this
      ->AttemptLogonNewUser('ssnape');
    $this
      ->assertText(t('User disallowed'), 'User unable to authenticate in exclude list (excludeIfTextInDn).', $testid);

    /**
     *  LDAP_authen.WL.exclude.miss-- desirect_result: authenticate success
     */
    $this
      ->AttemptLogonNewUser('hpotter');
    $this
      ->assertText(t('Member for'), 'Able to authenticate because not in exclude list (allowOnlyIfTextInDn).', $testid);

    /**
     * undo LDAP_authen.WL.allow settings
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->excludeIfTextInDn = array();
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * prep LDAP_authen.WL.php
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->allowTestPhp = "\n\n      //exclude users with dumb in email address \n\n      if (strpos(\$_ldap_user_entry['attr']['mail'][0], 'dumb') === FALSE) {\n\n        print 1;\n\n      }\n\n      else {\n        print 0;\n\n      }\n      ";
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * LDAP_authen.WL.php.php disabled -- desired result: authenticate fail with warning the authentication disabled
     */
    module_disable(array(
      'php',
    ));
    $this
      ->AttemptLogonNewUser('adumbledore');
    $this
      ->assertText(LDAP_AUTHENTICATION_DISABLED_FOR_BAD_CONF_MSG, 'With php disabled and php code in whitelist, refuse authentication. (allowTestPhp).', $testid);
    module_enable(array(
      'php',
    ));

    /**
     * LDAP_authen.WL.php.true -- desired result: authenticate success
     */
    $this
      ->AttemptLogonNewUser('hpotter');
    $this
      ->assertText(t('Member for'), 'Able to authenticate because php returned true (allowTestPhp).', $testid);

    /**
     *  LDAP_authen.WL.php.false-- desired result: authenticate fail
     */
    $this
      ->AttemptLogonNewUser('adumbledore');
    $this
      ->assertText(t('User disallowed'), 'User unable to authenticate because php returned false (allowTestPhp).', $testid);

    /**
     * clear LDAP_authen.WL.php
     */
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->allowTestPhp = '';
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * need to test username changes with PUID
     *   - given a user exists
     *   - change samaccountname in ldap server
     *   - have user logon
     *   - make sure old user and new user have same puid
     *
     */

    /***  multiple options used in whitelist **/

    /**
     * LDAP_authen.WL.allow[match].exclude[match] -- desired result: authenticate fail
     */

    /**
     *  LDAP_authen.WL.allow[match].exclude[miss] -- desired result: authenticate success
     */

    /**
     * LDAP_authen.WL.exclude[match].*-- desirect_result: authenticate fail
     */

    /**
     *  LDAP_authen.WL.exclude[match].php[false] -- desired result: authenticate fail
     */

    /**
     * LDAP_authen.WL1.excludeIfNoAuthorizations.hasAuthorizations
     * test for excludeIfNoAuthorizations set to true and consumer granted authorizations
     */

    // these 2 modules are configured in setup, but disabled for most authentication tests
    module_disable(array(
      'ldap_authorization_drupal_role',
      'ldap_authorization',
    ));
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->excludeIfNoAuthorizations = 1;
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);

    /**
     * LDAP_authen.WL1.excludeIfNoAuthorizations.failsafe
     * test for excludeIfNoAuthorizations set to true and ldap_authorization disabled
     * to make sure authentication fails completely
     */
    $this
      ->AttemptLogonNewUser('hpotter');
    $this
      ->assertText(LDAP_AUTHENTICATION_DISABLED_FOR_BAD_CONF_MSG, t('Authentication prohibited when excludeIfNoAuthorizations =
        true and LDAP Authorization disabled.
        LDAP_authen.WL1.excludeIfNoAuthorizations.failsafe'), $testid);
    module_enable(array(
      'ldap_authorization',
    ), TRUE);
    module_enable(array(
      'ldap_authorization_drupal_role',
    ), TRUE);
    $consumer = ldap_authorization_get_consumers('drupal_role', TRUE, TRUE);

    // clear static cache
    $this
      ->AttemptLogonNewUser('hpotter');
    $this
      ->assertText(t('Member for'), 'User able to authenticate because of excludeIfNoAuthorizations setting.', $testid);

    /**
     * LDAP_authen.WL1.excludeIfNoAuthorizations.hasNoAuthorizations
     * test for excludeIfNoAuthorizations set to true and No consumer
     * granted authorizations
     */
    $this
      ->AttemptLogonNewUser('ssnape');
    $this
      ->assertText(t('User disallowed'), 'User unable to authenticate because of excludeIfNoAuthorizations setting.', $testid);
    $authenticationConf = new LdapAuthenticationConfAdmin();
    $authenticationConf->excludeIfNoAuthorizations = 0;
    $authenticationConf
      ->save();
    $authenticationConf = ldap_authentication_get_valid_conf(TRUE);
    module_disable(array(
      'ldap_authorization_drupal_role',
      'ldap_authorization',
    ));
  }

  /**
   * make sure user admin interface works.
   */
  function testUI() {

    // just to give warning if setup doesn't succeed.  may want to take these out at some point.
    $setup_success = module_exists('ldap_user') && module_exists('ldap_servers') && module_exists('ldap_authentication') && config('ldap_test.settings')
      ->get('simpletest')(config('ldap_test.settings')
      ->get('simpletest') > 0);
    $this
      ->assertTrue($setup_success, ' ldap_authentication UI setup successful', $this
      ->testId('user interface tests'));
    $sid = 'activedirectory1';
    $sids = array(
      'activedirectory1',
    );
    $this
      ->prepTestData(LDAP_TEST_LDAP_NAME, $sids, 'provisionToDrupal', 'default');
    $this->privileged_user = $this
      ->drupalCreateUser(array(
      'administer site configuration',
    ));
    $this
      ->drupalLogin($this->privileged_user);
    $ldap_authentication_conf_pre = ldap_authentication_get_valid_conf();
    $this
      ->drupalGet('admin/config/people/ldap/authentication');
    $form_tests = array(
      'authenticationMode' => array(
        'property' => 'authenticationMode',
        'values' => array(
          LDAP_AUTHENTICATION_MIXED,
          LDAP_AUTHENTICATION_EXCLUSIVE,
        ),
        'required' => TRUE,
      ),
      'authenticationServers[' . $sid . ']' => array(
        'property' => 'enabledAuthenticationServers',
        'values' => array(
          TRUE,
          TRUE,
        ),
        'desired_result' => array(
          array(
            $sid,
          ),
          array(
            $sid,
          ),
        ),
      ),
      'loginUIUsernameTxt' => array(
        'property' => 'loginUIUsernameTxt',
        'values' => array(
          '',
          'Hogwarts UserID',
        ),
      ),
      'loginUIPasswordTxt' => array(
        'property' => 'loginUIPasswordTxt',
        'values' => array(
          '',
          'Hogwarts UserID Password',
        ),
      ),
      'ldapUserHelpLinkUrl' => array(
        'property' => 'ldapUserHelpLinkUrl',
        'values' => array(
          '',
          'http://passwords.hogwarts.edu',
        ),
      ),
      'ldapUserHelpLinkText' => array(
        'property' => 'ldapUserHelpLinkText',
        'values' => array(
          'Hogwarts Password Management Page',
          'Hogwarts Password Management Page',
        ),
      ),
      'allowOnlyIfTextInDn' => array(
        'property' => 'allowOnlyIfTextInDn',
        'values' => array(
          'witch\\nwarlord\\nwisecracker',
          "witch\nwarlord\nwisecracker",
        ),
        'desired_result' => array(
          array(
            'witch',
            'warlord',
            'wisecracker',
          ),
          array(
            'witch',
            'warlord',
            'wisecracker',
          ),
        ),
      ),
      'excludeIfTextInDn' => array(
        'property' => 'excludeIfTextInDn',
        'values' => array(
          "muggle\nmuddle\nmummy",
          "muggle\nmuddle\nmummy",
        ),
        'desired_result' => array(
          array(
            'muggle',
            'muddle',
            'mummy',
          ),
          array(
            'muggle',
            'muddle',
            'mummy',
          ),
        ),
      ),
      'excludeIfNoAuthorizations' => array(
        'property' => 'excludeIfNoAuthorizations',
        'values' => array(
          array(
            TRUE,
          ),
          array(
            TRUE,
          ),
        ),
      ),
      'emailOption' => array(
        'property' => 'emailOption',
        'values' => array(
          LDAP_AUTHENTICATION_EMAIL_FIELD_REMOVE,
          LDAP_AUTHENTICATION_EMAIL_FIELD_DISABLE,
        ),
        'required' => TRUE,
      ),
      'emailUpdate' => array(
        'property' => 'emailUpdate',
        'values' => array(
          LDAP_AUTHENTICATION_EMAIL_UPDATE_ON_LDAP_CHANGE_ENABLE,
          LDAP_AUTHENTICATION_EMAIL_UPDATE_ON_LDAP_CHANGE_DISABLE,
        ),
        'required' => TRUE,
      ),
      'allowTestPhp' => array(
        'property' => 'allowTestPhp',
        'values' => array(
          'pretend php',
          'pretend php',
        ),
      ),
    );
    module_enable(array(
      'php',
    ));
    foreach (array(
      0,
      1,
    ) as $i) {
      $edit = array();
      foreach ($form_tests as $field_name => $conf) {
        $value = $conf['values'][$i];
        $property = isset($conf['property']) ? $conf['property'] : $field_name;
        $edit[$field_name] = $value;

        //  debug("$field_name $value"); debug($conf);debug($edit);
      }

      // debug($edit);
      $this
        ->drupalPost('admin/config/people/ldap/authentication', $edit, t('Save'));
      $ldap_authentication_conf_post = ldap_authentication_get_valid_conf(TRUE);
      foreach ($form_tests as $field_name => $conf) {
        $property = isset($conf['property']) ? $conf['property'] : $field_name;
        $desired = isset($conf['desired_result']) ? isset($conf['desired_result'][$i]) : $conf['values'][$i];
        if (is_array($desired)) {
          $success = count($desired) == count($ldap_authentication_conf_post->{$property});
        }
        else {
          $success = $ldap_authentication_conf_post->{$property} == $desired;
        }
        $this
          ->assertTrue($success, $property . ' ' . t('field set correctly'), $this
          ->testId('ldap authentication user interface tests'));
        if (!$success) {
          debug("fail {$i} {$property}");
          debug("desired:");
          debug($desired);
          debug("actual:");
          debug($ldap_authentication_conf_post->{$property});
        }
      }
    }
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LdapAuthenticationTestCase::$ldap_test_data protected property
LdapAuthenticationTestCase::$module_name public property Overrides LdapTestCase::$module_name
LdapAuthenticationTestCase::getInfo public static function
LdapAuthenticationTestCase::setSsoServerEnvironment private function set mock server variables for sso tests
LdapAuthenticationTestCase::setUp function Overrides LdapTestCase::setUp
LdapAuthenticationTestCase::tearDown function Overrides LdapTestCase::tearDown
LdapAuthenticationTestCase::testAuthenticationWhitelistTests function
LdapAuthenticationTestCase::testExclusiveModeUserLogon function LDAP Authentication Exclusive Mode User Logon Test (ids = LDAP_authen.EM.ULT.*)
LdapAuthenticationTestCase::testInstall function difficult to test install and uninstall since setUp does module enabling and installing.
LdapAuthenticationTestCase::testMixedModeUserLogon function LDAP Authentication Mixed Mode User Logon Test (ids = LDAP_authen.MM.ULT.*)
LdapAuthenticationTestCase::testUI function make sure user admin interface works.
LdapAuthenticationTestCase::x_testSSOUserLogon function LDAP Authentication Exclusive Mode User Logon Test (ids = LDAP_authen.EM.ULT.*)
LdapAuthenticationTestCase::__construct function Overrides LdapTestCase::__construct
LdapTestCase::$authenticationData public property
LdapTestCase::$authorizationData public property
LdapTestCase::$consumerAdminConf public property
LdapTestCase::$featureName public property
LdapTestCase::$featurePath public property
LdapTestCase::$ldapTestId public property
LdapTestCase::$sid public property
LdapTestCase::$testData public property
LdapTestCase::$testFunctions public property
LdapTestCase::$useFeatureData public property
LdapTestCase::AttemptLogonNewUser public function
LdapTestCase::checkConsumerConfSetup public function
LdapTestCase::compareFormToProperties public function 1
LdapTestCase::createTestUserFields function keep user entity fields function for ldap_user in base class instead of user test class in case module integration testing is needed
LdapTestCase::ldap_user_test_entity_fields function
LdapTestCase::prepTestData function setup configuration and fake test data for all ldap modules
LdapTestCase::removeUserFromGroup public function
LdapTestCase::testId public function attempt to derive a testid from backtrace