You are here

public function SessionLimitBaseTestCase::assertSessionLogout in Session Limit 7.2

Same name and namespace in other branches
  1. 8 tests/session_limit.test \SessionLimitBaseTestCase::assertSessionLogout()
  2. 6.2 tests/session_limit.test \SessionLimitBaseTestCase::assertSessionLogout()
  3. 2.x tests/session_limit.test \SessionLimitBaseTestCase::assertSessionLogout()

Test that an individual user can have up to a specifed number of sessions.

Once the maximum is reached, the oldest session is logged out.

Parameters

int $session_limit: The max number of sessions the specified user should be able to access.

stdClass $user: (optional) The user to test this with. Leave blank to create a user.

5 calls to SessionLimitBaseTestCase::assertSessionLogout()
SessionLimitLogoutTestCase::testSessionLimitRoles in tests/session_limit.test
Checks that the session limit is returned correctly by a role.
SessionLimitLogoutTestCase::testSessionLimitUser in tests/session_limit.test
Checks that the session limit is returned correctly by a user override.
SessionLimitLogoutTestCase::testSessionLimitUserMaxPrecedence in tests/session_limit.test
Check that user override takes precedence over default and role regardless of max.
SessionLimitLogoutTestCase::testSessionLogoutOnMax1 in tests/session_limit.test
Test user can only have 1 session, logout oldest.
SessionLimitLogoutTestCase::testSessionLogoutOnMax2 in tests/session_limit.test
Test user can only have 2 sessions, logout oldest.

File

tests/session_limit.test, line 63
Simpletest tests for session_limit.

Class

SessionLimitBaseTestCase
Base test for session limits.

Code

public function assertSessionLogout($session_limit, stdClass $user = NULL) {

  // Set the session limit behaviour to log out of old sessions.
  variable_set('session_limit_behaviour', 1);
  variable_set('session_limit_logged_out_message', 'Reached limit @number.');

  // Create the user to test with.
  $user = empty($user) ? $this
    ->drupalCreateUser(array(
    'access content',
  )) : $user;
  $sessions = array();
  for ($session_number = 1; $session_number <= $session_limit; $session_number++) {

    // Log user into each session.
    $this
      ->drupalLogin($user);
    $this
      ->drupalGet('user');
    $this
      ->assertText(t('Log out'), t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));
    $this
      ->assertText($user->name, t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));

    // Backup session.
    $sessions[$session_number] = $this
      ->stashSession();

    // Wait briefly to prevent race conditions.
    sleep(1);
  }

  // Check all allowed sessions are currently accessible.
  foreach ($sessions as $session_number => $session_id) {
    $this
      ->restoreSession($session_id);
    $this
      ->drupalGet('user');
    $this
      ->assertText(t('Log out'), t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));
    $this
      ->assertText($user->name, t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));
  }

  // Create a further session.
  $extra_session_number = $session_limit + 1;
  $this
    ->stashSession();
  $this
    ->drupalLogin($user);
  $this
    ->drupalGet('user');
  $this
    ->assertText(t('Log out'), t('User is logged in under session @no.', array(
    '@no' => $extra_session_number,
  )));
  $this
    ->assertText($user->name, t('User is logged in under session @no.', array(
    '@no' => $extra_session_number,
  )));

  // Check user 1 is no longer logged in on session 1.
  $sessions[$extra_session_number] = $this
    ->stashSession();
  $this
    ->restoreSession($sessions[1]);
  $this
    ->drupalGet('node');
  $this
    ->assertNoText(t('Log out'), t('User 1 is not logged in under session 1.'));
  $this
    ->assertText(t('Reached limit @number.', array(
    '@number' => $session_limit,
  )), t('User was shown session limit message.'));

  // Check user 1 is logged in on all other sessions.
  foreach ($sessions as $session_number => $session_id) {
    if ($session_number == 1) {

      // We know they have been logged out of session 1.
      continue;
    }
    $this
      ->restoreSession($session_id);
    $this
      ->drupalGet('user');
    $this
      ->assertText(t('Log out'), t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));
    $this
      ->assertText($user->name, t('User is logged in under session @no.', array(
      '@no' => $session_number,
    )));
  }
}