package org.apereo.cas.ticket.support; import com.fasterxml.jackson.databind.ObjectMapper; import org.apache.commons.io.FileUtils; import org.apereo.cas.authentication.Authentication; import org.apereo.cas.authentication.RememberMeCredential; import org.apereo.cas.authentication.CoreAuthenticationTestUtils; import org.apereo.cas.authentication.principal.DefaultPrincipalFactory; import org.apereo.cas.authentication.principal.PrincipalFactory; import org.apereo.cas.services.RegisteredServiceTestUtils; import org.apereo.cas.ticket.ExpirationPolicy; import org.apereo.cas.ticket.TicketGrantingTicketImpl; import org.junit.Before; import org.junit.Test; import java.io.File; import java.io.IOException; import java.util.Collections; import static org.junit.Assert.*; /** * Tests for RememberMeDelegatingExpirationPolicy. * * @author Scott Battaglia * @since 3.2.1 */ public class RememberMeDelegatingExpirationPolicyTests { private static final File JSON_FILE = new File(FileUtils.getTempDirectoryPath(), "rememberMeDelegatingExpirationPolicy.json"); private static final ObjectMapper MAPPER = new ObjectMapper(); /** Factory to create the principal type. **/ protected PrincipalFactory principalFactory = new DefaultPrincipalFactory(); private RememberMeDelegatingExpirationPolicy p; @Before public void setUp() throws Exception { this.p = new RememberMeDelegatingExpirationPolicy(); this.p.setRememberMeExpirationPolicy(new MultiTimeUseOrTimeoutExpirationPolicy(1, 20000)); this.p.setSessionExpirationPolicy(new MultiTimeUseOrTimeoutExpirationPolicy(5, 20000)); } @Test public void verifyTicketExpirationWithRememberMe() { final Authentication authentication = CoreAuthenticationTestUtils.getAuthentication( this.principalFactory.createPrincipal("test"), Collections.singletonMap( RememberMeCredential.AUTHENTICATION_ATTRIBUTE_REMEMBER_ME, true)); final TicketGrantingTicketImpl t = new TicketGrantingTicketImpl("111", authentication, this.p); assertFalse(t.isExpired()); t.grantServiceTicket("55", RegisteredServiceTestUtils.getService(), this.p, false, true); assertTrue(t.isExpired()); } @Test public void verifyTicketExpirationWithoutRememberMe() { final Authentication authentication = CoreAuthenticationTestUtils.getAuthentication(); final TicketGrantingTicketImpl t = new TicketGrantingTicketImpl("111", authentication, this.p); assertFalse(t.isExpired()); t.grantServiceTicket("55", RegisteredServiceTestUtils.getService(), this.p, false, true); assertFalse(t.isExpired()); } @Test public void verifySerializeATimeoutExpirationPolicyToJson() throws IOException { MAPPER.writeValue(JSON_FILE, p); final ExpirationPolicy policyRead = MAPPER.readValue(JSON_FILE, RememberMeDelegatingExpirationPolicy.class); assertEquals(p, policyRead); } }