@Test(expected = UserAlreadyLoggedInException.class)
  public void failUserAlreadyLoggedIn() {
    DefaultLoginCredentials credentials = getCredentials();

    credentials.setUserId(USER_NAME);
    credentials.setPassword(USER_PASSWORD);

    Identity identity = getIdentity();

    identity.login();

    // should throw the exception. user is already authenticated.
    identity.login();
  }
  protected void performAuthentication() {
    DefaultLoginCredentials credentials = this.credentials;

    credentials.setPassword(USER_PASSWORD);
    credentials.setUserId(USER_NAME);

    Identity identity = this.identity;

    Identity.AuthenticationResult status = identity.login();

    assertEquals(Identity.AuthenticationResult.SUCCESS, status);
    assertTrue(identity.isLoggedIn());

    assertEquals(this.identity.getAccount(), identity.getAccount());
  }
  @Test
  public void testUnsuccessfulPasswordBasedAuthentication() throws Exception {
    DefaultLoginCredentials credentials = getCredentials();

    credentials.setUserId(USER_NAME);
    credentials.setPassword("badpasswd");

    Identity identity = getIdentity();

    AuthenticationResult status = identity.login();

    assertEquals(AuthenticationResult.FAILED, status);
    assertFalse(identity.isLoggedIn());

    assertNull(identity.getAccount());
  }
  @Test
  public void testSuccessfulPasswordBasedAuthentication() throws Exception {
    DefaultLoginCredentials credentials = getCredentials();

    credentials.setPassword(USER_PASSWORD);
    credentials.setUserId(USER_NAME);

    Identity identity = getIdentity();

    AuthenticationResult status = identity.login();

    assertEquals(AuthenticationResult.SUCCESS, status);
    assertTrue(identity.isLoggedIn());

    assertEquals(getAccount(), identity.getAccount());
  }
  @Test(expected = LockedAccountException.class)
  public void failLockedAccount() {
    Account account = getAccount();

    account.setEnabled(false);

    getIdentityManager().update(account);

    DefaultLoginCredentials credentials = getCredentials();

    credentials.setPassword(USER_PASSWORD);
    credentials.setUserId(USER_NAME);

    // should throw the exception. user is disabled/locked.
    Identity identity = getIdentity();

    identity.login();
  }