package org.apereo.cas.authentication.handler.support;
import org.apache.commons.io.IOUtils;
import org.apereo.cas.authentication.CoreAuthenticationTestUtils;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.springframework.core.io.ClassPathResource;
import javax.security.auth.login.LoginException;
import java.io.File;
import java.io.FileWriter;
import java.nio.charset.Charset;
import static org.junit.Assert.*;
/**
* @author Marvin S. Addison
* @since 3.0.0
*/
public class JaasAuthenticationHandlerTests {
private static final String USERNAME = "test";
@Rule
public ExpectedException thrown = ExpectedException.none();
private JaasAuthenticationHandler handler;
@Before
public void setUp() throws Exception {
final ClassPathResource resource = new ClassPathResource("jaas.conf");
final File fileName = new File(System.getProperty("java.io.tmpdir"), "jaas.conf");
try(FileWriter writer = new FileWriter(fileName)) {
IOUtils.copy(resource.getInputStream(), writer, Charset.defaultCharset());
writer.flush();
}
if (fileName.exists()) {
System.setProperty("java.security.auth.login.config", '=' + fileName.getCanonicalPath());
this.handler = new JaasAuthenticationHandler("", null, null, null);
}
}
@Test
public void verifyWithAlternativeRealm() throws Exception {
this.thrown.expect(LoginException.class);
this.handler.setRealm("TEST");
this.handler.authenticate(CoreAuthenticationTestUtils.getCredentialsWithDifferentUsernameAndPassword(USERNAME, "test1"));
}
@Test
public void verifyWithAlternativeRealmAndValidCredentials() throws Exception {
this.handler.setRealm("TEST");
assertNotNull(this.handler.authenticate(CoreAuthenticationTestUtils.getCredentialsWithDifferentUsernameAndPassword(USERNAME, USERNAME)));
}
@Test
public void verifyWithValidCredenials() throws Exception {
assertNotNull(this.handler.authenticate(CoreAuthenticationTestUtils.getCredentialsWithSameUsernameAndPassword()));
}
@Test
public void verifyWithInvalidCredentials() throws Exception {
this.thrown.expect(LoginException.class);
this.handler.authenticate(CoreAuthenticationTestUtils.getCredentialsWithDifferentUsernameAndPassword(USERNAME, "test1"));
}
}