package org.geoserver.threadlocals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertSame;
import java.util.concurrent.ExecutionException;
import org.junit.After;
import org.junit.Test;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
public class AuthenticationThreadLocalTransferTest extends AbstractThreadLocalTransferTest {
@After
public void cleanupThreadLocals() {
SecurityContextHolder.getContext().setAuthentication(null);
}
@Test
public void testRequest() throws InterruptedException, ExecutionException {
// setup the state
final Authentication auth = new UsernamePasswordAuthenticationToken("user", "password");
SecurityContextHolder.getContext().setAuthentication(auth);
// test it's transferred properly using the base class machinery
testThreadLocalTransfer(new ThreadLocalTransferCallable(new AuthenticationThreadLocalTransfer()) {
@Override
void assertThreadLocalCleaned() {
assertNull(SecurityContextHolder.getContext().getAuthentication());
}
@Override
void assertThreadLocalApplied() {
assertSame(auth, SecurityContextHolder.getContext().getAuthentication());
}
});
}
}