package org.apereo.cas.audit.spi;
import org.apereo.cas.authentication.CoreAuthenticationTestUtils;
import org.apereo.cas.authentication.AuthenticationCredentialsLocalBinder;
import org.apereo.inspektr.common.spi.PrincipalResolver;
import org.junit.After;
import org.junit.Test;
import static org.junit.Assert.*;
/**
* Unit test for {@link ThreadLocalPrincipalResolver}.
*
* @author Dmitriy Kopylenko
* @since 5.0.0
*/
public class ThreadLocalPrincipalResolverTests {
private final ThreadLocalPrincipalResolver theResolver =
new ThreadLocalPrincipalResolver(new PrincipalIdProvider() {});
@After
public void cleanup() {
AuthenticationCredentialsLocalBinder.clear();
}
@Test
public void noAuthenticationOrCrendentialsAvailableInThreadLocal() {
assertResolvedPrincipal(PrincipalResolver.UNKNOWN_USER);
}
@Test
public void singleThreadSetsSingleCredential() {
AuthenticationCredentialsLocalBinder.bindCurrent(CoreAuthenticationTestUtils.getCredentialsWithSameUsernameAndPassword());
assertResolvedPrincipal(CoreAuthenticationTestUtils.CONST_USERNAME);
}
@Test
public void singleThreadSetsMultipleCredentials() {
AuthenticationCredentialsLocalBinder.bindCurrent(
CoreAuthenticationTestUtils.getCredentialsWithSameUsernameAndPassword(),
CoreAuthenticationTestUtils.getCredentialsWithSameUsernameAndPassword("test2"));
assertResolvedPrincipal(String.format("%s, %s", CoreAuthenticationTestUtils.CONST_USERNAME, "test2"));
}
@Test
public void singleThreadSetsAuthentication() {
AuthenticationCredentialsLocalBinder.bindCurrent(CoreAuthenticationTestUtils.getAuthentication());
assertResolvedPrincipal(CoreAuthenticationTestUtils.CONST_USERNAME);
}
private void assertResolvedPrincipal(final String principalId) {
assertEquals(principalId, theResolver.resolveFrom(null, (Object) null));
}
}