package org.apereo.cas.monitor; import org.apereo.cas.authentication.CoreAuthenticationTestUtils; import org.apereo.cas.config.CasCoreAuthenticationConfiguration; import org.apereo.cas.config.CasCoreAuthenticationHandlersConfiguration; import org.apereo.cas.config.CasCoreAuthenticationMetadataConfiguration; import org.apereo.cas.config.CasCoreAuthenticationPolicyConfiguration; import org.apereo.cas.config.CasCoreAuthenticationPrincipalConfiguration; import org.apereo.cas.config.CasCoreAuthenticationServiceSelectionStrategyConfiguration; import org.apereo.cas.config.CasCoreAuthenticationSupportConfiguration; import org.apereo.cas.config.CasCoreConfiguration; import org.apereo.cas.config.CasCoreHttpConfiguration; import org.apereo.cas.config.CasCoreServicesConfiguration; import org.apereo.cas.config.CasCoreTicketsConfiguration; import org.apereo.cas.config.CasPersonDirectoryConfiguration; import org.apereo.cas.config.CasCoreTicketCatalogConfiguration; import org.apereo.cas.config.JpaTicketRegistryConfiguration; import org.apereo.cas.config.support.EnvironmentConversionServiceInitializer; import org.apereo.cas.logout.config.CasCoreLogoutConfiguration; import org.apereo.cas.mock.MockService; import org.apereo.cas.ticket.ExpirationPolicy; import org.apereo.cas.ticket.TicketGrantingTicketImpl; import org.apereo.cas.ticket.UniqueTicketIdGenerator; import org.apereo.cas.ticket.registry.JpaTicketRegistry; import org.apereo.cas.ticket.registry.TicketRegistry; import org.apereo.cas.ticket.support.HardTimeoutExpirationPolicy; import org.apereo.cas.util.DefaultUniqueTicketIdGenerator; import org.apereo.cas.util.SchedulingUtils; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.context.TestConfiguration; import org.springframework.cloud.autoconfigure.RefreshAutoConfiguration; import org.springframework.context.ApplicationContext; import org.springframework.test.annotation.Rollback; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner; import org.springframework.transaction.annotation.Transactional; import javax.annotation.PostConstruct; import static org.junit.Assert.*; /** * Unit test for {@link SessionMonitor} class that involves * {@link JpaTicketRegistry}. * * @author Marvin S. Addison * @since 3.5.0 */ @RunWith(SpringRunner.class) @Transactional @SpringBootTest(classes = { SessionMonitorJpaTests.JpaTestConfiguration.class, RefreshAutoConfiguration.class, CasCoreAuthenticationConfiguration.class, CasCoreAuthenticationPrincipalConfiguration.class, CasCoreAuthenticationPolicyConfiguration.class, CasCoreAuthenticationMetadataConfiguration.class, CasCoreAuthenticationSupportConfiguration.class, CasCoreAuthenticationHandlersConfiguration.class, CasCoreHttpConfiguration.class, CasCoreServicesConfiguration.class, CasPersonDirectoryConfiguration.class, CasCoreLogoutConfiguration.class, CasCoreConfiguration.class, CasCoreAuthenticationServiceSelectionStrategyConfiguration.class, CasCoreTicketsConfiguration.class, CasCoreTicketCatalogConfiguration.class, JpaTicketRegistryConfiguration.class}) @ContextConfiguration(initializers = EnvironmentConversionServiceInitializer.class) public class SessionMonitorJpaTests { private static final ExpirationPolicy TEST_EXP_POLICY = new HardTimeoutExpirationPolicy(10000); private static final UniqueTicketIdGenerator GENERATOR = new DefaultUniqueTicketIdGenerator(); @Autowired @Qualifier("ticketRegistry") private TicketRegistry jpaRegistry; @TestConfiguration public static class JpaTestConfiguration { @Autowired protected ApplicationContext applicationContext; @PostConstruct public void init() { SchedulingUtils.prepScheduledAnnotationBeanPostProcessor(applicationContext); } } @Test @Rollback(false) public void verifyObserveOkJpaTicketRegistry() throws Exception { addTicketsToRegistry(jpaRegistry, 5, 5); assertEquals(10, jpaRegistry.getTickets().size()); final SessionMonitor monitor = new SessionMonitor(jpaRegistry, -1, -1); final SessionStatus status = monitor.observe(); assertEquals(5, status.getSessionCount()); assertEquals(5, status.getServiceTicketCount()); assertEquals(StatusCode.OK, status.getCode()); } private static void addTicketsToRegistry(final TicketRegistry registry, final int tgtCount, final int stCount) { TicketGrantingTicketImpl ticket = null; for (int i = 0; i < tgtCount; i++) { ticket = new TicketGrantingTicketImpl(GENERATOR.getNewTicketId("TGT"), CoreAuthenticationTestUtils.getAuthentication(), TEST_EXP_POLICY); registry.addTicket(ticket); } if (ticket != null) { for (int i = 0; i < stCount; i++) { registry.addTicket(ticket.grantServiceTicket(GENERATOR.getNewTicketId("ST"), new MockService("junit"), TEST_EXP_POLICY, false, true)); } } } }