package org.apereo.cas.authentication;
import org.apereo.cas.authentication.principal.DefaultPrincipalFactory;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import javax.security.auth.login.AccountNotFoundException;
import javax.security.auth.login.FailedLoginException;
import java.net.MalformedURLException;
import java.net.URL;
import java.security.GeneralSecurityException;
import java.util.HashMap;
import java.util.Map;
import static org.junit.Assert.*;
/**
* @author Scott Battaglia
* @since 3.0.0
*/
public class AcceptUsersAuthenticationHandlerTests {
private static final String SCOTT = "scott";
private static final String RUTGERS = "rutgers";
@Rule
public ExpectedException thrown = ExpectedException.none();
private final AcceptUsersAuthenticationHandler authenticationHandler;
public AcceptUsersAuthenticationHandlerTests() throws Exception {
final Map<String, String> users = new HashMap<>();
users.put(SCOTT, RUTGERS);
users.put("dima", "javarules");
users.put("bill", "thisisAwesoME");
users.put("brian", "t�st");
this.authenticationHandler = new AcceptUsersAuthenticationHandler("", null, new DefaultPrincipalFactory(), null, users);
}
@Test
public void verifySupportsSpecialCharacters() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername("brian");
c.setPassword("t�st");
assertEquals("brian", this.authenticationHandler.authenticate(c).getPrincipal().getId());
}
@Test
public void verifySupportsProperUserCredentials() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername(SCOTT);
c.setPassword(RUTGERS);
assertTrue(this.authenticationHandler.supports(c));
}
@Test
public void verifyDoesntSupportBadUserCredentials() {
try {
assertFalse(this.authenticationHandler
.supports(new HttpBasedServiceCredential(new URL(
"http://www.rutgers.edu"), CoreAuthenticationTestUtils.getRegisteredService("https://some.app.edu"))));
} catch (final MalformedURLException e) {
fail("Could not resolve URL.");
}
}
@Test
public void verifyAuthenticatesUserInMap() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername(SCOTT);
c.setPassword(RUTGERS);
try {
assertEquals(SCOTT, this.authenticationHandler.authenticate(c).getPrincipal().getId());
} catch (final GeneralSecurityException e) {
fail("Authentication exception caught but it should not have been thrown.");
}
}
@Test
public void verifyFailsUserNotInMap() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername("fds");
c.setPassword(RUTGERS);
this.thrown.expect(AccountNotFoundException.class);
this.thrown.expectMessage("fds not found in backing map.");
this.authenticationHandler.authenticate(c);
}
@Test
public void verifyFailsNullUserName() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername(null);
c.setPassword("user");
this.thrown.expect(AccountNotFoundException.class);
this.thrown.expectMessage("Username is null.");
this.authenticationHandler.authenticate(c);
}
@Test
public void verifyFailsNullUserNameAndPassword() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername(null);
c.setPassword(null);
this.thrown.expect(AccountNotFoundException.class);
this.thrown.expectMessage("Username is null.");
this.authenticationHandler.authenticate(c);
}
@Test
public void verifyFailsNullPassword() throws Exception {
final UsernamePasswordCredential c = new UsernamePasswordCredential();
c.setUsername(SCOTT);
c.setPassword(null);
this.thrown.expect(FailedLoginException.class);
this.thrown.expectMessage("Password is null.");
this.authenticationHandler.authenticate(c);
}
}